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

Posted FreeBuf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了利用Hook技术实现浏览器HTTPS劫持相关的知识,希望对你有一定的参考价值。

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


一)分析方法

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

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

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

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

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

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

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

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


 

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

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

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

call [eax+0x30]前有三个

push [ebp+8]

push edi

push esi

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

0x6BF 第三个参数为缓冲区的长度

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

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


二)代码实现

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

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

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

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

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

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

Buffer参数

Len值

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


总结

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

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

以上是关于利用Hook技术实现浏览器HTTPS劫持的主要内容,如果未能解决你的问题,请参考以下文章

挖洞经验 从XSS漏洞到四步CSRF利用实现账户劫持

利用BHO实现浏览器劫持

25.Detours劫持技术

--hook,某电商(bao)app签名实现数据采集,欢迎交流

利用C++编程,将hook(钩子)加到程序每一个函数,其中hook后跳转到自己自定义函数代码,实现函数打印功能

实现HTTPS,安装SSL证书真的能够保护网站不被劫持吗?