当前位置:安全客 >> 知识详情

【技术分享】Stack overflow in PlugX RAT

2017-09-05 17:01:52 阅读:1955次 收藏 来源: 安全客 作者:0keeTeam

http://p6.qhimg.com/t016b4bf808fc4f0c65.png

作者:Chu@0KEE Team


前言


Black Hat USA 2017上@professor__plum分享了几款常见RATXtremePlugXGh0st)中存在的漏洞,利用这些漏洞可以反向攻击C&C Server,这里以PlugX RAT为例进行漏洞分析。


1.漏洞分析


1.1 Delphi

http://p8.qhimg.com/t011ee4bd90867bb849.png

PlugX RAT由Delphi语言开发,直接使用IDA对其分析会因缺少符号表导致系统库函数无法识别,分析起来非常不方便。可以使用IDR加载bin文件,导出IDC脚本供IDA使用,如下:

http://p5.qhimg.com/t010c10ad85410c8ef9.png

逆向Delphi程序时还需要注意的一点就是传参方式,Delphi中默认的传参方式是前3个参数通过寄存器eaxedxecx传递,其余参数通过堆栈传递,如上图中ShowMessage、MoveMemory的调用。

1.2 漏洞分析

漏洞出现在Server与Client的通信中:

http://p3.qhimg.com/t017f71bd7d2e762852.png

Server在接收到客户端的请求包后首先对包头进行解析,而后将整个包完整地拷贝到栈上(0x00549D51 MoveMemory),典型的栈溢出。有趣的是,在内存拷贝操作的之后开发者再一次对包进行解析(0x00549D93, DecodePacket_),在其中判断包的大小并且如果数据过大会进行弹框提示:

http://p3.qhimg.com/t01e8782b170b9f9139.png

但此时上层栈帧已被破坏,再做检查为时已晚。


2.漏洞利用


2.1 加解密函数

目前市面的PlugX RAT大概有3个版本,对此漏洞而言区别主要在于它们对流量加解密方式的不同:

http://p7.qhimg.com/t013657928643d0b3c6.png

以Type I为例可编写如下加解密函数:

http://p9.qhimg.com/t01c9e46f8bdd3af2ee.png

2.2 保护机制的绕过

http://p0.qhimg.com/t01e4b75c80dfe6c1c1.png

No GS、NO PIE,只需要考虑DEP,而程序中存在丰富的Gadgets,例如CreateProcess、WinExec、VirtualAlloc、VirtualProtect等,这使得通过ROP绕过DEP变得十分简单。

基于VirtualProtect可编写如下ROP:

http://p2.qhimg.com/t01b996bdc0fece41d1.png

2.3 利用

样本、IDB及完整的exploit可从这里下载:http://git.sh3ll.me/chu/bh17-plugx-stack-overflow


3.参考


https://www.blackhat.com/docs/us-17/thursday/us-17-Grange-Digital-Vengeance-Exploiting-The-Most-Notorious-C&C-Toolkits.pdf

https://www.blackhat.com/docs/asia-14/materials/Haruyama/Asia-14-Haruyama-I-Know-You-Want-Me-Unplugging-PlugX.pdf


本文由 安全客 原创发布,如需转载请注明来源及本文地址。
本文地址:http://bobao.360.cn/learning/detail/4365.html

参与讨论,请先 | 注册 | 匿名评论
发布
用户评论
360U1244729396 2017-09-05 23:14:23
回复 |  点赞

66666

360U573700421 2017-09-05 22:08:34
回复 |  点赞

膜我chu牛

带头大哥 2017-09-05 17:36:46
回复 |  点赞

PLUGX居然是DELPHI写的。。。。。。。。。。。。。

查看更多