前言

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

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

简介

本文将要介绍以下内容:

  1. BHO简介
  2. 开发BHO
  3. 利用思路
  4. 实际测试
  5. 防御

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}

开发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,如下图

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

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

注:

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

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

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

regsvr32 helloworld.dll /s

注:

/s参数用来去掉注册成功的提示框

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

补充:

卸载dll:

regsvr32 helloworld.dll /s /u

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

实际测试

测试系统: Win 7x86 IE8

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

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

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

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

利用思路

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,查看加载项,验证通过,如下图

注:

修改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的登录密码,如下图

3、下载文件

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

4、在IE页面注入js

可参考以下开源工程做进一步修改:

https://github.com/xiyiaoo/BHO

本文不做进一步介绍

5、补充

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

防御监测

防御:

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

检测:

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

小结

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

利用BHO开发IE浏览器第三方插件相关推荐

  1. Web开发实用浏览器(工具)插件

    1.PowerBand PowerBand是一个IE的插件(同时也支持MyIE2/Maxthon).提供了对HTML动态分析,跟踪,编辑的功能.能够方便快捷的分析HTML页面的结构,有助于网页设计人员 ...

  2. python 开发浏览器插件,利用firebreath开发跨浏览器插件

    工程中生成了相应的npapi和activex的代码,主要修改对应项目名称目录下的文件即可. 其中***API.cpp和***API.h中定义了相关的示例方法,比如echo方法,我们可以直接编译.对应目 ...

  3. iOS 10 的一个重要更新-开发 iMessage 的第三方插件

    苹果官方的 Messages 在 iOS 10 推出了非常重大的更新,可能主要是想从其他 IM 巨头手里抢点市场份额回来,包括 Facebook Messenger, Wechat 和 Snapcha ...

  4. 使用js开发IE浏览器本地插件

    使用js开发的IE插件可以在当前浏览的页面中执行js代码,在此基础上实现任何用户可以想到的功能. 可以针对不用的网站做一些common处理(比如提取某类信息),也可以针对特定网站做特色处理(比如抢购火 ...

  5. mac 下基于firebreath 开发多浏览器支持的浏览器插件

    mac 下基于firebreath 开发多浏览器支持的浏览器插件 首先要区分什么是浏览器扩展和浏览器插件;插件可以像本地程序一样做的更多 一. 关于 firebreath http://www.fir ...

  6. 我是如何利用插件赚钱的(开发delphi6,VB 2008,Java ME等流行软件的第三方插件)

    我是如何利用插件赚钱的(2) Google搜索:软件工程师 金海龙 简介:若只把链接插入到自己的博客中去,无法提高浏览量:若能插入到大型网站的主页,就能每天100万次的浏览量,看看怎么做吧-- 郑重声 ...

  7. 【分享】Web前端开发第三方插件大全

    收集整理了一些Web前端开发比较成熟的第三方插件,分享给大家. ******************************************************************** ...

  8. 一些vc开发浏览器及插件的资料

    如何往IE工具条添加按钮 问题提出: 金山词霸.网络蚂蚁等软件安装后会向IE的工具条添加自己的按钮.按下按钮后还会作出相应的动作,这种功能是如何实现的呢?读完本文,您也可以将自己应用程序的按钮添加到I ...

  9. linux 桌面小部件,[试玩] FMXLinux (Firemonkey for Linux) Linux 桌面开发(第三方插件)...

    FMXLinux 是一个可以用来开发 Linux 桌面软件的第三方插件,它需要配合 Delphi 10.2 Toyko 使用方法:开启 FMX 工程,在工程项目上按鼠标右键加入 "Linux ...

最新文章

  1. ACL 2020 | 腾讯AI Lab解读三大前沿方向及入选的20篇论文
  2. MFC Timer定时器
  3. AJAX的表单请求POST请求方式
  4. 【干货】吴甘沙:你是数据,我即生意
  5. WPF入门(六)样式Style
  6. oracle技术之顺序文件上的索引(一)
  7. 分布式系统之消息队列
  8. 使用JavaScript将图片保存至本地
  9. JSP九大内置对象的分析,对应SERVLET中如何获取、使用
  10. WebRTC 聊天Demo
  11. 高级UI-符合MD的常用控件
  12. Java中对象的直接赋值、浅拷贝及深拷贝的理解和应用场景及其实现方式
  13. java设置user.dir_使用java系统属性user.dir读取配置文件
  14. html吃豆豆小游戏源码,HTML5 Canvas吃豆豆动画
  15. html中css 样式怎么写,css样式怎么写?
  16. API文档与模拟数据接口
  17. (三)bossGroup, workGroup
  18. 计算机视觉书籍资源推荐_Computer Vision Principles, Algorithms, Applications, Learning
  19. 两个人体红外传感器计数,判断屋里的人数的单片机程序
  20. Citrix PVS无盘系统最小环境搭建

热门文章

  1. 全局变量和局部变量的理解及注意事项 超详细 简单易懂
  2. 计算机密码忘了幽默回答,要不是他,你根本不会忘记密码
  3. 聊天室的服务端和客户端实现多人聊天
  4. 纯css画菱形,三角形,梯形,平行四边形
  5. 马云香港演讲年轻人创业
  6. Java核心技术卷一学习笔记1
  7. [深度解剖C语言] --关键字 static
  8. 【云原生 | 31】Docker运行实时流计算框架Apache Storm
  9. 一机三屏台式计算机,如何组建三屏显示
  10. Android开发教程--第一个JNI程序