专栏首页FreeBuf利用Hook技术实现浏览器HTTPS劫持

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

现在很多网站都使用了 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被劫持,而浏览器却无法察觉,可见浏览器厂商对自身的安全性保障也是一个很重要的、值得他们去深思研究的问题。

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

本文分享自微信公众号 - FreeBuf(freebuf),作者:浪子_三少

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-04-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 任意密码重置的一个场景

    背景 做授权渗透的时候要求要写明文传输漏洞,这就导致很多没有上 HTTPS 的网站为了修这个明文传输的问题,用尽了各种奇葩的做法,其中见得比较多的就是使用 RS...

    FB客服
  • 在满补丁的Win10域主机上绕过图形接口依赖实现本地提权

    在最近一次的活动目录(Active Directory)评估期间,我们以低权限用户的身份访问了一个完全修补且安全的域工作站。在尝试了许多不同的方法来提升本地权限...

    FB客服
  • 西门子PLC的网络仿真搭建方法探讨

    在手上没有真实的西门子PLC设备情况的情况下,PLC本地仿真器可以为我们进行开关量和简单模拟量的程序仿真。但工控安全人员想在没有真实PLC的条件下获取S7通讯数...

    FB客服
  • 年前干货 | 数据工程师必备的学习资源(附链接)

    导读:本文首先详细介绍了数据工程的职责、与数据科学家之间的差别以及其不同的工作角色,然后重点列出了很多与核心技能相关的的优秀学习资源,最后介绍行业内认可度较高的...

    用户2769421
  • 研究人员使用更少的标记数据训练图像生成AI

    生成AI模型倾向于学习复杂的数据分布,这就是为什么它们擅长于生成类似人类的语言,以及以假乱真的汉堡和人脸图像。但是训练这些模型需要大量标记数据,并且根据手头的任...

    AiTechYun
  • iOS14 适配canOpenURL问题

    部分升级到iOS 14的用户,在点击链接跳转的时候,[[UIApplication sharedApplication]canOpenURL:url]返回fal...

    freesan44
  • 电工学PLC编程的入门建议

    十年前,刚开始使用PLC时,也是一头雾水。仗着自己对硬件、工程知识的熟悉,和对组态软件的粗浅了解,硬着头皮接下了任务。当时已经来不及接受培训,相关资料极其缺乏,...

    企鹅号小编
  • 超全的PLC选型总结

    在plc系统设计时,首先应确定系统方案,下一步工作就是PLC的设计选型。选择PLC,主要是确定PLC的生产厂家和PLC的具体型号。对于系统方案要求有分布式系统、...

    企鹅号小编
  • 西门子PLC的网络仿真搭建方法探讨

    在手上没有真实的西门子PLC设备情况的情况下,PLC本地仿真器可以为我们进行开关量和简单模拟量的程序仿真。但工控安全人员想在没有真实PLC的条件下获取S7通讯数...

    FB客服
  • 数据结构之哈希函数

    概念: 哈希(hash),也叫做散列、数据摘要等,是一种常见的数据结构。哈希的表的核心概念分为哈希表和哈希函数。 哈希表(hashTable) 哈希表之前讲过,...

    xiangzhihong

扫码关注云+社区

领取腾讯云代金券