某RCE漏洞复现、排查与监测

资讯 作者:看雪学院 2023-01-29 19:09:17 阅读:176


本文为看雪论坛优秀文章
看雪论坛作者ID:Jtian




漏洞复现


1、础环境


测试服务器:Win7虚拟机
测试服务器IP:192.168.220.134
软件版本:SunloginClient_11.0.0.33162_X64
EXP下载地址:https://github.com/Mr-xn/sunlogin_rce (感谢开源作者)


2、复现流程


在Win7虚拟机里执行 SunloginClient_11.0.0.33162_X64.exe

查看对外开放端口,这里为49218,这个端口不是固定的,重启程序会变。

配合查找的命令:

netstat -ano | findstr LISTENtasklist | findstr SunloginClient

测试exp,命令执行成功,是system权限:




漏洞原理分析


1、EXP源码分析


其实直接看exp源码,也能猜个差不多,莫过于:
(1)授权认证出了问题,任意用户可以获得访问令牌;
(2)存在命令注入问题。

对导致命令执行的url进行url解码可以看的更清楚些:


2、流量分析


执行exp,并使用wireshark抓包。


抓包时可以使用bpf语句过滤掉无关的报文,如:

host 192.168.220.134 and tcp port 49168



对抓包结果进行分析,请求令牌,存在未授权访问的问题:

命令执行,存在命令注入的问题:


3、为了定位命令执行的关键代码位置


(1)行为分析

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



(2)动态调试


小技巧,使用PsExec得到system权限:
PsExec64.exe -i -s cmd

以system权限启动x64dbg,以方便附加调试目标进程:


在调试时需要隐藏调试器,否则在调试过程中会报异常:
调试->高级->隐藏调试器(PEB)

对CreateProcessA函数下断点,然后执行exp触发断点:


(3)静态分析


有个upx壳,使用“upx -d”直接脱掉。脱掉后的程序直接运行的话,还是会报错,没有探究原因,不过ida可以正常分析了。
根据动态调试的结果,可以很快定位到关键代码位置。找到URL路由,这可以用来分析其他api功能。另外,发现除了exp里提到的ping可以导致命令执行,nslookup也是可以的,可以自行编写脚本测试。






渗透测试


编写Goby脚本


(1)配置“漏洞信息”:


这里的指纹信息十分关键,Goby在扫描的时候,会先扫描资产,这个指纹就是用来判断资产种类的,匹配上指纹之后,才会打对应的poc。指纹的好坏,直接决定了扫描速度。
Goby语法和fofa是一致的,这里匹配的是"GET /"的应答,因为Goby在做资产探测的时候不会探测太多URL。
body="Verification failure" && body="false" && header="Cache-Control: no-cache" && header="Content-Length: 46" && header="Content-Type: application/json"


(2)配置“扫描测试”


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


Test1


访问获取令牌的URL:

指纹判断,如果访问成功,则根据正则提取CID:

可以用python快速测试正则:
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)


Test2


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


(3)测试效果


测试效果,发现漏洞。

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





态势感知


1、流量监测


(1)尽可能多的生成多种形式的攻击流量


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

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


(2)编写规则并测试


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

根据payload编写pcre正则:
  /\/check?.*cmd[\s]*?=(?:ping|nslookup).*?(?:\.\.\/|\.\.\\)/

正则解释:
[\s]*?=             匹配任意个空白符,非贪婪匹配,匹配最近的“=”(?:ping|nslookup)    匹配 ping 或 nslookup,?:表示不获取匹配结果(?:\.\.\/|\.\.\\)       匹配 ../ 或 ..\

测试pcre正则:
apt install pcre2-utilspcre2test

编写suricata规则

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

vim /etc/suricata/rules/test.rules
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;)

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

vim /etc/suricata/suricata.yaml
rule-files:  #- suricata.rules  - test.rules

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

流量监测相关资料
https://suricata.readthedocs.io/en/suricata-6.0.0/rules/
https://rocknsm.io/
https://github.com/arkime/arkime


2、终端监测


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

事件查看器 ->应用程序和服务日志 ->Microsoft ->Windows ->Sysmon

终端监测相关资料:
https://www.sysgeek.cn/sysmon/;
https://www.maliciouskr.cc/2018/11/15/使用OSSEC构建主机层入侵检测/
https://blog.csdn.net/single7_/article/details/110038117





看雪ID:Jtian

https://bbs.pediy.com/user-home-598931.htm

*本文由看雪论坛 Jtian 原创,转载请注明来自看雪社区



# 往期推荐

1.CVE-2022-21882提权漏洞学习笔记

2.wibu证书 - 初探

3.win10 1909逆向之APIC中断和实验

4.EMET下EAF机制分析以及模拟实现

5.sql注入学习分享

6.V8 Array.prototype.concat函数出现过的issues和他们的POC们



球分享

球点赞

球在看


点击“阅读原文”,了解更多!

在线申请SSL证书行业最低 =>立即申请

[广告]赞助链接:

关注数据与安全,洞悉企业级服务市场:https://www.ijiandao.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注KnowSafe微信公众号
随时掌握互联网精彩
赞助链接