漏洞简介:Cacti是Cacti团队的一套开源的网络流量监测和分析工具。该工具通过snmpget来获取数据,使用RRDtool绘画图形进行分析,并提供数据和用户管理功能。
Cacti 1.2.x through 1.2.16 存在SQL注入漏洞,该漏洞允许经过身份验证的远程攻击者通过site_id参数执行任意SQL命令,导致远程代码执行。
漏洞复现: 在date_debug.php中:
首先获取了action的参数 使用switch来分别对不同的参数进行不同的操作,在action=ajax_hosts时 cacti会获取site_id的参数 并且没有添加任何的过滤
获取到site_id参数后 直接跳到auth.php的get_allowed_ajax_hosts函数
接着读取代码 并没有对传入进来的sql语句进行过滤 直接拼接到get_allowed_devices(auth.php中)函数获取hosts的值
从代码可以看出 依旧没有做任何的过滤 只是在尝试添加其他的参数,site_id直接被拼接到了sql语句并且执行,从语句可以看出来,这完全可以构造堆叠注入,我们尝试构造poc
http://192.168.62.224/cacti/data_debug.php?action=ajax_hosts&site_id=1;select sleep(10)-- -
发包尝试
很明显 ,sleep函数成功执行
现在有了堆叠,我们就可以任意构造sql语句,可以寻找其他rce的方式
全局搜索shell_exec等执行命令函数,我们找到了一个graph_realtime.php中的函数
在这个函数中,尝试从数据库获取配置参数 path_php_binary参数,并且直接与args参数拼接在一起放入shell_exec中,现在 path_php_binary参数等于可控,很明显,我们可以直接构造rce了
参数在settings表中,我们尝试修改
http://192.168.62.224/cacti/data_debug.php?action=ajax_hosts&site_id=1;update settings set value='whoami > /tmp/9.txt;' where name='path_php_binary';-- -
执行完成 查看数据表
修改成功,接下来我们进行触发,访问graph_realtime.php
(文章仅做分析)