前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用Hook技术实现浏览器HTTPS劫持

利用Hook技术实现浏览器HTTPS劫持

作者头像
FB客服
发布2018-02-24 10:53:51
2.3K0
发布2018-02-24 10:53:51
举报
文章被收录于专栏:FreeBuf

现在很多网站都使用了 https 的方案,保证了传输中的数据不被修改或者被第三方封包软件看见,但是由于https有一些隐含的缺陷或者服务器验证的不严格,https被劫持的可能性存在,就像之前出现了”净广大师”病毒劫持https,往百度搜索里插入广告id,他使用的方法就是中间人攻击,强行插入自己的证书实现解密https,今天我们介绍一种浏览器劫持的方法实现https劫持,现在我们就开始分析去找到浏览器中https加密的入口。

一)分析方法

首先我们打开浏览器(注意:这里涉及的浏览器的名字都会被隐去),输入baidu.com,在baidu里输入666666

我们可以看到baidu搜索时浏览器地址栏里,baidu的网站使用的是https链接地址。

接下来使用调试器ollydbg去附加浏览器,然后在命令输入bp WSASend

然后重新点击百度里的搜索按钮,这是调试器会断在WSASend地方:

我们再看堆栈区域,往下翻堆栈会看到

有sha256相关的hash计算的,这里就是说在发送数据之前经过一些tls的计算的过程,下面我继续走掉返回到调用WSASend的地方: 0x66F20F20

这里并不是明文所在的地方,一般进入发包的地方时已经被加密了,我们继续走下去,返回到调用该函数区域的所在函数,因为这个函数没什么特征性,应该还没到达https加密前所在的地方,返回到一个调用比较特别的地方。

当我们返回到这里 CALL DWORD PTR DS:[EDX+8],我们要引起注意,可以大概这样假设,这里是调用 c++一个类的虚表函数。

我们直接下断点在CALL DWORD PTR DS:[EDX+8],然后F9,接下来浏览器就停在了这句代码上,我们具体分析下内存EDX 地址是: 0×68337724

发现此地址确实是个函数表

这时我们在翻堆栈信息时发现了明文的请求信息

按下快捷键: ctrl + G ,输入0x66FC422D,进入该函数地址区域:

发现这里并没有什么特殊地方我们可以继续F8 单步走下去,当我们走到地址67034AB0,知道我们之前调用有个特殊的函数,call [eax+0x30], 可以猜测这里的调用也是一个虚表里的函数。

接下来我们把之前的所有断点全部禁用

然后在这个函数地方下断点,重新开始baidu搜索,这时浏览器停在了这个函数call [eax+0x30]的地方 ,此时eax值为0x683A1908

查看eax的内存所在的地址确实是个函数表,是虚表没错了,edi地址也有明文。

在分析堆栈,该函数有三个参数

call [eax+0x30]前有三个

push [ebp+8] push edi push esi

说明该函数是三个参数,在上面堆栈中我们找到前三个值分别是

0x197D8EE8是第一个参数,这是一个c++类地址,因为0x197D8EE8里的值就是eax的值。 0x19F2A390 第二个参数为明文缓冲区地址 0x6BF 第三个参数为缓冲区的长度

下面我们验证下我们对以上三个参数的验证, 按F9,下次浏览器会继续停在该函数的地方。

查看堆栈,确实如上猜测 :

我们再继续回过头分析eax这个值,0x683A1980, 这个地址在当前这个程序的这个代码模块内,且在这个模块的”.rdata”程序段内,那这足以证明该地址就是一个https的加密类,而0×30 的偏移的函数就是加密函数入口。

二)代码实现

分析到了具体的地方,我们就可以写程序去挂钩这个虚表函数去获取浏览器每次发出去的明文请求。

我们可以定义一个c++ 虚类

其中pSSL_Crypt 这个地址就是0×30的偏移的函数指针,接着我就写一个hijack类去实现hook浏览器 (想研究代码的,还是阅读原文吧,三少的代码real长)

在以上代码我们获取了模块加密类的虚表地址后就替换刚才那个偏移地址,修改指针去实现hook,当我们在浏览器里百度搜索时,会停在我们的函数里

Buffer参数

Len值

结果和我们预想的一样,这样我们就通过hook实现了浏览器https明文的截获,在我们的hook函数中我们可以做任何事情,可以过滤数据,可以转发数据,甚至我们还能修改请求数据,如果我们再hook了浏览器的https的解密函数,也能过滤或者修改从服务器端接受的https数据回应信息,实现我们想要的各种功能。

总结

自此本文结束,综上所讲的hook技术能够破坏浏览器程序本身,导致https被劫持,而浏览器却无法察觉,可见浏览器厂商对自身的安全性保障也是一个很重要的、值得他们去深思研究的问题。

(注意:本文只是属于技术分享,请勿用于非正常途径,故而会隐去浏览器的名称)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一)分析方法
  • 二)代码实现
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档