导语:Casey [email protected]近日更新了新的博客,介绍了如何利用脚本附加库DynamicWrapperX实现JS/VBS对win32 API的调用,我很感兴趣,于是对其进行了学习研究。
目录:
1. 介绍如何配置使用脚本附加库DynamicWrapperX 2. 通过JS/VBS实现对win32 API的调用 3. 如何在js脚本中加载shellcode 4. 结合sct的攻击思路 5. 补充在64位下的使用方法 6. 对该方法的检测
00 前言
Casey [email protected]近日更新了新的博客,介绍了如何利用脚本附加库DynamicWrapperX实现JS/VBS对win32 API的调用,我很感兴趣,于是对其进行了学习研究。本文用来记录测试心得并补充个人理解。
1. 下载获得dynwrapx.dll
下载地址: http://www.scriptcoding.com/dynwrapx_eng.html
注册DynamicWrapperX:
卸载DynamicWrapperX:
注:
/i表示对当前用户操作,当前用户权限即可;如何不加/i,代表对所有用户操作,需要管理员权限
/s可去掉注册成功弹出的提示框
2. 通过JS/VBS来调用win32 API
注册组件后就可以通过JS/VBS来调用win32 API
js脚本弹框实例:
注册前,js脚本执行失败,如图
注册组件,执行
再次执行js脚本,成功弹框,如图
成功调用win32 API
dynwrapx.dll是一个32位的dll,所以在64位系统下通过regsvr32 /i dynwrapx.dll注册后,在使用js调用win32 API时注意需要选择32位的cscript.exe,代码如下:
如图,默认64位cscript.exe无法调用COM组件,换成32位,执行成功
vbs脚本弹框实例:
使用msf:
如图
获得shellcode
步骤:
1. 通过VirtualAlloc申请一块具有RWX权限的内存,函数返回值为内存的基地址 2. 向这段内存写入shellcode 3. 调用CreateThread加载shellcode
实例代码如下:
https://gist.github.com/subTee/ca6ab8ec75ec38c213da580cd0de30fe
代码比较简洁,在此不做详细介绍,直接替换其中的shellcode,正常执行,如图
注: VirtualAlloc第二个参数表示分配内存的大小,shellcode的长度不要超过这个数值
DynamicWrapperX 1.0提供了英文版说明,可对照语法进行二次开发,参考地址如下: http://www.scriptcoding.com/dynwrapx_eng.html
DynamicWrapperX2.0中默认提供英文帮助文档,语法有细微变化,需要注意
前面提到过dynwrapx.dll是一个32位的dll,注册的组件也只能供32位程序调用所以在64位系统下使用需要注意如下:
1. 只支持x86shellcode 2. 在64位系统下要使用syswow64文件夹下的32位程序
利用方式:
将js代码写到sct文件中,就可以将其放到服务器上
实现远程调用sct的实例地址
https://gist.github.com/subTee/ca6ab8ec75ec38c213da580cd0de30fe
自动化download, register dll, execute Shellcode的实例地址:
https://gist.github.com/subTee/aa548b36b5d3c8f07e2024ab39217712
里面多了一个调用certuil.exe对文件进行base64加解密
cmd下执行如下代码实现远程调用sct:
注: 使用前需要提前安装DynamicWrapperX
实际测试如图
最新的DynamicWrapperX已经支持x64,版本为DynamicWrapperX 2.0
相关地址:
http://www.minner.ru/html/Dynwrapx.html
在64位系统上面需要分别注册32位和64位的DynamicWrapperX
64位dll注册成功后,js脚本可直接运行,如图
注:使用DynamicWrapperX 2.0需要提前卸载DynamicWrapperX 1.0 否则,使用2.0需要将object改为DynamicWrapperX.2,如: newActiveXObject("DynamicWrapperX") 改为newActiveXObject("DynamicWrapperX.2")
该方法利用的前提是注册dynwrapx.dll,所以通过查看系统已注册的com组件就能够检测该方法
推荐工具:
下载地址:
http://www.nirsoft.net/utils/registered_dll_view.html
特点:
1. 显示所有注册DLL/OCX / exe文件列表 2. 查看注册的最近时间 3. 查看CLSID和ProgID 4. 可以手动卸载DLL/OCX文件 5. 可以手动注册DLL/OCX文件
如图,通过查看已注册的COM控件,找到dynwrapx.dll
手动卸载组件,即可限制该方法的运用。