朋友@Sin在一次渗透测试项目中遇到的一个问题,在拿到了Webshell权限后发现不能执行命令,最后虽然成功绕过了安全狗的命令执行限制,但上线时还是遇到些问题。
我们在这篇文章中将模拟这个实战场景来记录整个测试过程,以及遇到的问题和解决方式。
0x01 问题复现
Windows 2008,官网下载的最新网站安全狗IIS版 V4.0.29666,已开启"禁止IIS执行程序"防护功能。
这免费版的安全狗产品估计也快凉凉,软件和防护规则都已经快两年没更新了。http://free.safedog.cn/
我们尝试利用冰蝎来连接Webshell,但在访问时发现已经被安全狗拦截了,中国菜刀、冰蝎、哥斯拉等默认的Webshell均会被拦截,所以还得找个免杀的Webshell。
这里我找了一个可用来免杀冰蝎Webshell的项目,只需使用该项目生成一个ASP.NET免杀Webshell即可绕过网站安全狗的特征检测。
项目地址:https://github.com/Tas9er/ByPassBehinder
注:这个免杀项目Java写的,用exe4j打包的exe,所以在执行前还得先安装好JRE或JDK,并且在环境变量中新建一个系统变量:EXE4J_JAVA_HOME,否则在执行时可能会出现下图提示。
下载地址:https://adoptium.net
接着我们再去这个网站后台通过上传漏洞将刚生成的冰蝎ASP.NET免杀Webshell上传上去,虽然在访问时出现了报错,但还是可以用冰蝎连接这个Webshell。
在冰蝎执行命令时总会提示:拒绝访问,刚开始还以为是cmd权限问题,但自己传了一个cmd还是不行,后边才想到可能是网站安全狗的"禁止IIS执行程序",因为几年前有测试过这个防护功能。
0x02 绕过测试
掏出了我多年前改的一个可用于绕过安全狗命令执行限制的ASP.NET脚本,原理也很简单,只需在执行的命令中带有安全狗内置的白名单程序即可,这时可以看到已经可以正常执行命令了。
但在@Sin那个项目中虽然绕过了安全狗的命令执行限制,但也只能执行set、whoami、ipconfig,其他命令和自己传的EXE都执行不了,暂时还不能上线。按理说是OK的,不知问题出哪!
不过我们后边在冰蝎中测试发现也可以通过带有安全狗内置的白名单程序来执行命令。
现在基本上什么命令都可以执行了,也可以直接上线CS/MSF了,实战中得自行考虑杀软和免杀问题。
c:\windows\Microsoft.NET\Framework\v1.1.4322\csc.exe\..\..\..\..\system32\cmd.exe /c whoami
我们也可以直接利用冰蝎反弹shell模块中的Meterpreter、CobaltStrike来上线。
如果能够免杀蚁剑、哥斯拉的Webshell,也可以去试一下里边的内存加载shellcode上线,原理都是一样的。
注:我们利用冰蝎Meterpreter上线时还得注意以下一些问题,CobaltStrike倒是没啥问题,可以直接上线。
0x03 注意事项
(1) 冰蝎不可自定义shellcode,内置的是x86的shellcode,如果IIS应用池是64位,而我们加载的是x86的shellcode,所以这时即使执行了也不能上线。
(2) 因为以上方式是将冰蝎Meterpreter中的shellcode加载到IIS的w3wp.exe内存中运行,所以极易造成该网站对应IIS应用池崩溃,网站出现503报错,还请谨慎使用。
(3) 通过冰蝎Meterpreter、CobaltStrike成功上线,但执行命令时仍会被安全狗"禁止IIS执行程序"拦截,所以还是得利用安全狗内置白名单绕过,也可尝试进程迁移或另起一个会话。
execute -Hc -i -f "c:\windows\system32\cmd.exe" -a "C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\csc.exe"
0x04 文末总结
这次渗透测试项目其实也就是通过ByPassBehinder免杀冰蝎Webshell绕过安全狗特征检测,利用内置白名单绕过命令执行限制上线MSF,然后发现运行的有ssms.exe进程,通过模拟令牌方式拿到Administrator权限。
这里只是给大家提供一个思路,因为有时在本地和实战的测试结果不太一样,所以还得根据实际情况灵活运用。