导语: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的调用,我很感兴趣,于是对其进行了学习研究。本文用来记录测试心得并补充个人理解。

01 Dynamic Wrapper X简介

1. 下载获得dynwrapx.dll

下载地址: http://www.script­coding.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脚本弹框实例:

02 生成shellcode

使用msf:

如图

获得shellcode

03 js脚本加载shellcode

步骤:

1. 通过VirtualAlloc申请一块具有RWX权限的内存,函数返回值为内存的基地址
2. 向这段内存写入shellcode
3. 调用CreateThread加载shellcode

实例代码如下:

https://gist.github.com/subTee/ca6ab8ec75ec38c213da580cd0de30fe

代码比较简洁,在此不做详细介绍,直接替换其中的shellcode,正常执行,如图

注: VirtualAlloc第二个参数表示分配内存的大小,shellcode的长度不要超过这个数值

DynamicWrapperX 1.0提供了英文版说明,可对照语法进行二次开发,参考地址如下: http://www.script­coding.com/dynwrapx_eng.html

DynamicWrapperX2.0中默认提供英文帮助文档,语法有细微变化,需要注意

04 regsvr32利用方式

前面提到过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 

实际测试如图

05 补充

最新的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")

06 防御

该方法利用的前提是注册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

手动卸载组件,即可限制该方法的运用。

源链接

Hacking more

...