首页
社区
课程
招聘
[原创]某RCE漏洞复现、排查与监测
发表于: 2022-3-2 17:11 10511

[原创]某RCE漏洞复现、排查与监测

2022-3-2 17:11
10511

测试服务器:Win7虚拟机
测试服务器IP:192.168.220.134
软件版本:SunloginClient_11.0.0.33162_X64
EXP下载地址: b25K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6y4M7W2)9J5k6s2S2F1i4K6u0r3M7%4g2F1L8r3!0Y4K9h3&6Q4y4h3k6J5j5$3f1`. (感谢开源作者)

在Win7虚拟机里执行 SunloginClient_11.0.0.33162_X64.exe
图片描述
查看对外开放端口,这里为49218,这个端口不是固定的,重启程序会变。
图片描述
配合查找的命令

测试exp,命令执行成功,是system权限
图片描述

其实直接看exp源码,也能猜个差不多,莫过于
1.授权认证出了问题,任意用户可以获得访问令牌;
2.存在命令注入问题
图片描述
对导致命令执行的url进行url解码可以看的更清楚些
图片描述

执行exp,并使用wireshark抓包
抓包时可以使用bpf语句过滤掉无关的报文,如

图片描述
对抓包结果进行分析
请求令牌,存在未授权访问的问题
图片描述
命令执行,存在命令注入的问题
图片描述

使用 Procmon 对程序进行行为分析,找到命令执行的关键函数,CreateProcessA。其实不用找,大概也能猜出来,可以把常见造成命令执行的函数都下个断点,断下来之后再进行判断。
图片描述
图片描述

小技巧,使用PsExec得到system权限

以system权限启动x64dbg,以方便附加调试目标进程
图片描述
在调试时需要隐藏调试器,否则在调试过程中会报异常

对CreateProcessA函数下断点,然后执行exp触发断点
图片描述

有个upx壳,使用“upx -d”直接脱掉。脱掉后的程序直接运行的话,还是会报错,没有探究原因,不过ida可以正常分析了。
图片描述

根据动态调试的结果,可以很快定位到关键代码位置。找到URL路由,这可以用来分析其他api功能。另外,发现除了exp里提到的ping可以导致命令执行,nslookup也是可以的,可以自行编写脚本测试。
图片描述
图片描述

图片描述
这里的指纹信息十分关键,Goby在扫描的时候,会先扫描资产,这个指纹就是用来判断资产种类的,匹配上指纹之后,才会打对应的poc。指纹的好坏,直接决定了扫描速度。
Goby语法和fofa是一致的,这里匹配的是"GET /"的应答,因为Goby在做资产探测的时候不会探测太多URL。

扫描测试有两个步骤,1.获得访问令牌CID;2.带令牌执行命令。

访问获取令牌的URL
图片描述
指纹判断,如果访问成功,则根据正则提取CID
图片描述
可以用python快速测试正则

带Cookie访问命令执行的URL,上一步设置的变量CID可以套三个大括号来使用,即{{{CID}}}
图片描述

图片描述

测试效果,发现漏洞。
图片描述
测试过程可以使用wireshark抓包来辅助poc编写,也可以参考老的poc脚本,其目录在
goby-win-x64-1.8.293\golib\exploits\user
或者通过poc管理导出来也是可以的。
图片描述

考虑合理变形,尽可能多的生成多种形式的攻击流量,以便用来测试检测规则。
图片描述

打poc的同时,用wireshark抓包,这里得到攻击流量包sunlogin_rce_multi_payload.pcap
图片描述

测试环境为 Kali-Linux-2021.2-vmware-amd64,suricata版本为6.0.4 。

根据payload编写pcre正则

正则解释

测试pcre正则

图片描述

编写suricata规则
(此规则可以应对正常攻击和部分变形,但依然存在被绕过的可能。规则写严了容易漏报,写松了容易误报,另外还应该要考虑报文分片传输、丢包的问题。)
vim /etc/suricata/rules/test.rules

/U 里的 U 表示在标准uri 上进行 pcre 匹配(区别于http_raw_uri,类似于http_uri,相当于URL解码后再匹配)。

vim /etc/suricata/suricata.yaml

测试suricata规则,5条攻击报文触发了5次告警,测试成功。

图片描述

流量监测相关资料
318K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6K6N6i4u0A6j5$3q4@1j5g2)9J5k6i4u0W2j5h3c8@1K9r3g2V1L8$3y4K6i4K6u0W2K9h3!0Q4x3V1k6W2L8W2)9J5c8Y4y4#2M7X3W2U0j5i4c8S2i4K6u0V1y4W2)9J5k6e0m8Q4x3X3f1H3i4K6u0r3M7Y4g2D9k6i4y4Q4x3V1j5`.
942K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6J5L8$3y4C8L8Y4y4E0i4K6u0W2K9h3!0Q4x3V1j5`.
530K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6Y4K9i4c8Z5N6h3u0Q4x3X3g2U0L8$3#2Q4x3V1k6S2M7X3E0A6L8h3g2Q4x3V1k6S2M7X3E0A6L8h3f1`.

windows下的事件监控可以用sysmon,Linux下则可以用auditd,然后借助wazuh来管理日志。

图片描述

图片描述

终端监测相关资料
922K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2K6P5i4y4Y4k6h3g2C8i4K6u0W2j5$3&6Q4x3V1k6K6P5i4y4E0L8$3&6Q4x3V1j5`.
39fK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2E0j5h3I4A6j5$3W2G2N6i4y4C8M7W2)9J5k6h3y4U0i4K6u0r3x3U0l9I4z5q4)9J5c8U0p5I4i4K6u0r3x3e0g2Q4x3V1k6Q4c8e0c8Q4b7V1c8Q4b7V1k6Q4c8e0N6Q4z5e0c8Q4b7e0S2a6f1#2y4q4b7#2!0q4y4W2)9&6c8g2)9^5y4q4!0q4y4g2!0n7b7W2!0n7b7g2!0q4y4q4!0n7z5q4!0n7b7W2!0q4y4W2)9&6b7#2!0n7b7g2!0q4y4g2!0n7x3g2)9^5x3W2!0q4y4g2)9^5y4g2!0m8y4g2!0q4y4q4!0n7c8g2!0n7y4g2!0q4y4W2!0m8x3#2)9^5x3q4!0q4y4W2!0n7y4g2)9^5b7W2)9J5c8R3`.`.
288K9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6T1L8r3!0Y4i4K6u0W2j5%4y4V1L8W2)9J5k6h3&6W2N6q4)9J5c8Y4y4A6L8X3N6D9k6e0N6Q4y4h3k6Q4x3V1k6S2M7Y4c8A6j5$3I4W2i4K6u0r3k6r3g2@1j5h3W2D9M7#2)9J5c8U0p5I4x3o6l9K6z5o6p5I4y4H3`.`.

netstat -ano | findstr LISTEN
tasklist | findstr SunloginClient
netstat -ano | findstr LISTEN
tasklist | findstr SunloginClient
host 192.168.220.134 and tcp port 49168
host 192.168.220.134 and tcp port 49168
PsExec64.exe -i -s cmd
PsExec64.exe -i -s cmd
调试->高级->隐藏调试器(PEB)
调试->高级->隐藏调试器(PEB)
 
body="Verification failure" && body="false" && header="Cache-Control: no-cache" && header="Content-Length: 46" && header="Content-Type: application/json"
body="Verification failure" && body="false" && header="Cache-Control: no-cache" && header="Content-Length: 46" && header="Content-Type: application/json"
import re
 
a=r'''{"__code":0,"enabled":"1","verify_string":"ysDRmcQu37usMmdA60fniHTv3cJzlWHz","code":0}'''
filter=re.compile(r'''"verify_string":"(\S+?)",''')
res = filter.findall(a)
print(res)

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

最后于 2022-3-5 00:09 被Jtian编辑 ,原因: 补充与纠错
收藏
免费 4
支持
分享
最新回复 (2)
雪    币: 341
活跃值: (1020)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
搞不清楚,一个远程桌面开那么高的权限干嘛!
2022-3-2 17:54
0
雪    币: 1993
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
good
2022-3-2 18:03
0
游客
登录 | 注册 方可回帖
返回