假想我们在局域网内有一台机器,然后通过Http透明代理做些事情吧......
我们的步骤是在局域网内通过DHCP欺骗,并将DNS服务器指定到我们自己内网机器的IP(这里被攻击机器和代理机器为同一台电脑),以http://www.skycn.com为例,当一台机器通过我们的DNS服务器请求解析skycn的IP时将其解析到127.0.0.1。等待目标机器Connect过来,故事就开始了.
一、IP与端口修正
为方便进行操作,我们使用LSP来充当DNS服务器的功能,在浏览器启动并加载我们的LSP模块之后修正百度下载站http://rj.baidu.com/soft/detail/35013.html?ald的网站IP地址为127.0.0.1以及修正其要connect端口为我们本地监听的端口。
虽然baidu的搜索主页面为Https但是百度下载站依旧是Http的,这就给了我们一些可操作的空间,而且实际生活中通过baidu来搜索和下载程序的占比应该也是最大的.
如下图。
二、本地Http透明代理服务器
1. 本地Http透明代理服务器监听端口准备等浏览器的连接
2. 接收浏览器发送的数据包
3. 因为浏览器并不知道它与服务器通信时流量会从我们的代理服务器走,而且我们也没有使用Socks4或者Socks5,所以浏览器要Connect的目标IP地址就需要我们自己从Http数据包中解析出的HOST中获取.
4. 解析Host得到浏览器原始要连接的Web服务器的IP,然后Http透明代理服务器connect到Web服务器。
这个时候整个通信的桥梁已经建好,现在我们只需要做好代理的功能就好了
5. Http透明代理服务器负责在浏览器和Web服务器之间做数据转发,并对我们感兴趣的数据进行修正替换等动作...
例如当前正在发送的Http数据中正在请求下载一个exe文件,我们就可以替换掉要下载的exe文件.
就可以自己构造一个下载文件的数据包,将原本浏览器发送给Web服务器的数据包替换掉,也就可以替换浏览器要下载的exe文件,原本要下载Baidu_Setup.exe就被替换成BaiduWuBi.exe
6. 也可以提取其中的Cooike,或者是特定网站的明文账号和密码
7. 也可以插入一段JS代码,至于JS代码中要做什么就可以有很多了
由于Http数据包会使用压缩数据,为了更方便在Http数据包中寻找我们感兴趣的特征字符和插入数据,所以我们需要删除压缩字段,改成非压缩模式
因为插入了我们自己的JS代码,而浏览器又会根据Content– Length:来判断要接收数据的长度,所以在插入JS代码之后就必须修正Content – Length的值来保证Http数据包正常。
来看一看将百度拼音下载替换为百度五笔下载的Gif:
其中百度拼音为43M被替换为6.7M的百度五笔。
总结:
Http透明代理不仅仅是用在替换文件下载,也包括Cookie获取,插入JS代码,密码抓取,屏蔽特定图片及关键字等操作。
使用范围也不局限在局域网,当DNS被劫持之后,在DNS代理服务器中我们也可以将我们感兴趣网站的IP解析到我们架设的Http透明代理服务器下来完成以上操作。
至此,基本的代理就差不多了,若是你感兴趣也可以自己做一个http的服务器,与浏览器通信,将要下载的exe替换成任意exe。也可将Http包头中的Host修改为其他的网站看看效果。
谢谢阅读~
* 本文作者:SmilingCat,转载请注明来自FreeBuf.COM