9

利用BHO实现IE浏览器劫持

 3 years ago
source link: https://3gstudent.github.io/3gstudent.github.io/%E5%88%A9%E7%94%A8BHO%E5%AE%9E%E7%8E%B0IE%E6%B5%8F%E8%A7%88%E5%99%A8%E5%8A%AB%E6%8C%81/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

利用BHO实现IE浏览器劫持

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签名,修改注册表劫持系统的签名验证功能,使签名生效

可参考之前的文章: 《Authenticode签名伪造——PE文件的签名伪造与签名验证劫持》

需要使用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

本文不做进一步介绍

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

0x06 防御检测


防御:

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

检测:

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

0x07 小结


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


LEAVE A REPLY

Written on December 28, 2017

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK