SafeMode
SafeMode 是 Windows 操作系统中针对安全的一种特殊模式,即安全模式。默认情况下 vbscript 脚本执行权限是非常低的,正是因为safemode 安全属性的限制(正常情况下该属性值为 0xE。),如若我们能通过一定方法修改掉此属性值改为0,即可绕过安全权限检查,即进入上帝模式。而且,经过调试发现在 COleScript 对象偏移 0x174(不同版本可能偏移不一样) 位置正是 SafeMode标志位(结论记住就行,前人逆向出来的经验)。
代码
<html>
<body>
<script language="vbscript">
on error resume next
set shell = createobject("shell.application")
shell.shellexecute "calc.exe"
</script>
</body>
</html>
直接运行上面html无法弹出cmd.exe的。在 IE 中打开,使用 windbg 附加进程后调试
调试
下断点bu vbscript!COleSCript::InSafeMode
断下后:
0:005> dd poi(esp+c) l4
0207a5e0 0000600c 00000000 0070fd08 004f9e50
0:005> dd 004f9e50 l8
004f9e50 08920001 00000010 00000000 004d3c38
004f9e60 00000003 00000000 43797355 8c000000
0:005> dt SAFEARRAY 004f9e50
ole32!SAFEARRAY
+0x000 cDims : 1
+0x002 fFeatures : 0x892
+0x004 cbElements : 0x10
+0x008 cLocks : 0
+0x00c pvData : 0x004d3c38
+0x010 rgsabound : [1] tagSAFEARRAYBOUND
0:005> dt SAFEARRAYBOUND 004f9e50 + 0x10
ole32!SAFEARRAYBOUND
+0x000 cElements : 3
+0x004 lLbound : 0
0:005> dd 0x004d3c38 lc
004d3c38 00000003 00000000 12345678 00000000
004d3c48 00000003 00000000 87654321 00000000
004d3c58 00000000 00000000 00000000 00000000
可以看到,在 InSafeMode 函数中,会检查 0x174 偏移处的值与 0xB(1011) 的 与 结果。如果结果为 0, 则vbscript的执行将不再受到限制。故此时值应该为 0 或者 4(0100) 才行。手动在调试器中修改内存值,便可弹出cmd