一
1、基础环境
测试服务器:Win7虚拟机
测试服务器IP:192.168.220.134
软件版本:SunloginClient_11.0.0.33162_X64
EXP下载地址:https://github.com/Mr-xn/sunlogin_rce (感谢开源作者)
在Win7虚拟机里执行 SunloginClient_11.0.0.33162_X64.exe
查看对外开放端口,这里为49218,这个端口不是固定的,重启程序会变。
配合查找的命令:
netstat -ano | findstr LISTEN
tasklist | findstr SunloginClient
测试exp,命令执行成功,是system权限:
二
1、EXP源码分析
其实直接看exp源码,也能猜个差不多,莫过于:
(1)授权认证出了问题,任意用户可以获得访问令牌;
(2)存在命令注入问题。
对导致命令执行的url进行url解码可以看的更清楚些:
执行exp,并使用wireshark抓包。
抓包时可以使用bpf语句过滤掉无关的报文,如:
host 192.168.220.134 and tcp port 49168
使用 Procmon 对程序进行行为分析,找到命令执行的关键函数,CreateProcessA。其实不用找,大概也能猜出来,可以把常见造成命令执行的函数都下个断点,断下来之后再进行判断。
PsExec64.exe -i -s cmd
调试->高级->隐藏调试器(PEB)
三
编写Goby脚本
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)
四
1、流量监测
/\/check?.*cmd[\s]*?=(?:ping|nslookup).*?(?:\.\.\/|\.\.\\)/
[\s]*?= 匹配任意个空白符,非贪婪匹配,匹配最近的“=”
(?:ping|nslookup) 匹配 ping 或 nslookup,?:表示不获取匹配结果
(?:\.\.\/|\.\.\\) 匹配 ../ 或 ..\
apt install pcre2-utils
pcre2test
alert http any any -> any any (msg:"CNVD-2022-10270 SunloginClient RCE"; pcre:"/\/check?.*cmd[\s]*?=(?:ping|nslookup).*?(?:\.\.\/|\.\.\\)/U"; classtype:attempted-admin; sid:22022801; rev:2;)
rule-files:
#- suricata.rules
- test.rules
suricata -r sunlogin_rce_multi_payload.pcap
Sysmon64.exe -i
事件查看器 ->应用程序和服务日志 ->Microsoft ->Windows ->Sysmon
看雪ID:Jtian
https://bbs.pediy.com/user-home-598931.htm
# 往期推荐
球分享
球点赞
球在看
点击“阅读原文”,了解更多!