首页 > 代码库 > ETERNALROMACE漏洞利用流程备录
ETERNALROMACE漏洞利用流程备录
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漏洞利用流程备录