码迷,mamicode.com
首页 > 系统相关 > 详细

ETERNALROMACE漏洞利用流程备录

时间:2017-06-19 22:04:16      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:com   tran   else   关系   cve   拼接   let   ref   tps   

NSA中Eternalromance模块为windows中针对SMB服务的漏洞利用工具,该工具针对CVE-2017-0145。

SMB在处理SMB_COM_TRANSACTION命令的请求时,如果发送的内容超过最大长度,需要使用SMB_COM_TRANSACTION_SECONDARY命令请求发送之后的数据,如下图所示,通过该函数SMB_COM_TRANSACTION_SECONDARY才能获取对应的正确SMB_COM_TRANSACTION(主要通过判断两个包的PID,MID,TID和UID是否一致),该漏洞函数在SMB协议处理对应的SMB_COM_WRITE_ANDX命令请求时也会被调用,此时对mid域的处理存在混淆的情况,构造恶意SMB_COM_WRITE_ANDX的数据包,使SMB_COM_WRITE_ANDX->fid=SMB_COM_TRANSACTION->mid时,会返回错误的transcation(该transcation原本应该是返回给SMB_COM_TRANSACTION_SECONDARY请求的)。

技术分享 

该transcation的indata域在之后的代码中被增加长度。

技术分享 

而之后再处理SMB_COM_TRANSACTION_SECONDARY命令的请求包时,进行数据拼接时就有可能发生越界写的情况。

如下图所示修改了indata的长度。

 技术分享

整体利用使的函数调用关系如下:

 技术分享

对应的内存布局图。

 技术分享

以下为我使用到的相关断点,通过这些断点可以监控整个利用时的相关过程(内存上的,代码上的),注意不同版本的srv.sys偏移可能不一致(我这里的版本为5.1.2600.5671,对应的漏洞文件放在云盘上了,有兴趣的可以直接看这个版本https://pan.baidu.com/s/1slM36Zb)。

bp SrvSmbTransactionSecondary ".printf \"SrvSmbTransactionSecondaryexectures:\";.echo;g"
bp SrvSmbTransactionSecondary+0x26d ".printf \"SrvSmbTransactionSecondaryexectures writeoption:\";.echo des;dc poi(esp);.echo src;dc poi(esp+4);.if(poi(poi(esp+4))=0x40000023|poi(poi(esp+4))=0x00000000){.echo;r;.echo;dc esp;.echo;u eip;.echo;g}.else{.echo;g}"
bp SrvFindTransaction ".printf \"SrvFindTransaction exectures:\";.echo;g"
bp SrvSmbWriteAndX ".printf \"SrvSmbWriteAndX exectures:\";.echo;g"
bp SrvSmbWriteAndX+0x659 ".printf \"SrvSmbWriteAndX extend the size:\";.echo;r;.echo;dc esp;.echo;u eip;.echo;g"
bp SrvCompleteExecuteTransaction ".printf \"SrvCompleteExecuteTransaction exectures:\";.echo;g"
bp SrvCompleteExecuteTransaction+0x52a8 ".printf \"SrvCompleteExecuteTransaction readoption:\";.echo des;dc poi(esp);.echo src;dc poi(esp+4);.echo;r;.echo;dc esp;.echo;u eip;.echo;g"
bp ExecuteTransaction ".printf \"ExecuteTransaction exectures:\";.echo;g"
bp ExecuteTransaction+0x5a ".printf \"ExecuteTransaction get poolpage:\";.echo;dc esi L30;.echo;r;.echo;dc esp;.echo;u eip;.echo;g"
bp SrvPeekNamedPipe ".printf \"SrvPeekNamedPipe exectures:\";.echo;g"
bp RestartPeekNamedPipe ".printf \"RestartPeekNamedPipe exectures:\";.echo;g"
bp RestartPeekNamedPipe+0x5f ".printf \"RestartPeekNamedPipe set writeleak datacount:\";.echo;r;.echo;dc esp;.echo;u eip;.echo;dc ecx-1200 LA00;.echo;g"

参考链接

http://m.bobao.360.cn/learning/detail/3747.html

 转载请注明出处

ETERNALROMACE漏洞利用流程备录

标签:com   tran   else   关系   cve   拼接   let   ref   tps   

原文地址:http://www.cnblogs.com/goabout2/p/7050557.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!