跨站脚本攻击XSS
0x00 XSS
XSS,跨站脚本攻击(Cross Site Scripting),恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。比如获取用户Cookie,会话劫持,钓鱼欺骗等多种攻击。
0x01 XSS的原理
XSS的原理其实也就是上面所说,恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
HTML的script元素标记中间包含JavaScript,当浏览器遇到这一标记时,它不会将其内容处理成HTML或者XHTML,而是把对于其内容的控制权移交给另一个内置的浏览器代理——脚本处理引擎。又,Web浏览器本身的设计是不安全的,它只负责解释和执行JavaScript等脚本语言,而不会判断代码是否有害。
0x02 XSS的危害
XSS在OWASP中一直占据着前十的地位,虽然表面上XSS不像sql注入、文件上传之类的漏洞一样直接可以获得很高的权限,但是因为xss漏洞广泛存在于各类网站之中,运用起来灵活多变,所以深受黑客偏爱。
它的常见危害有:
- (1)网络钓鱼,盗取各类用户的账号
- (2)窃取用户Cookie,获取用户隐私,或者利用用户身份进一步执行操作
- (3)劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账、强制发表日志等
- (4)强制弹出广告页面,刷流量等
- (5)传播木马
0x03 漏洞复现
首先我们要搭建漏洞环境,这里我们可以选用之前博客中提到的的LAMP环境,也可以搭建一个wamp环境,这里为了方便,我就在windows下搭建环境测试了,首先我们在wamp的www/xss文件夹下新建test.php,然后输入如下内容:
1 |
|
然后保存并打开wamp服务
通过浏览器访问127.0.0.1/xss/test.php来访问刚才创建的页面,
我们在输入框输入,点击提交,发现出现有如下图的xss的弹窗,此时环境搭建完成。
0x04 漏洞利用
如果只是控制弹窗,我们并不能直观的看到它的危害,下来我们尝试利用xss漏洞,看看能做到什么程度。
XSS最经常使用的就是获取Cookie了,攻击者通常利用网站的xss漏洞向页面写入窃取Cookie信息的代码,在用户浏览网页时,攻击者就会获取受害者当前浏览器中的Cookie信息。此时攻击者可以将Cookie信息向服务器提交,然后以受害者的身份登陆网站。
我们尝试一个最简单的反射型xss获取用户cookie。
我们先在自己的远程服务器上写一个php页面和一个js脚本来接收Cookie并保存:
hk.php:
1 |
|
这段代码的作用是读取q的值,然后以增加的方式打开cookie.txt,然后将读取到的值写入cookie.txt。
然后我们在漏洞页面构造如下xss:
1 |
|
然后我们发现,cookie.txt中,已经有我们刚才页面的cookie了
并且查看源代码,发现源代码中有这样一句javascript
这个时候,如果把下面链接发送给别人,别人点到就可以获取它的cookie了
1 |
|
虽然这样可以达成效果,但是我们发现,恶意代码都明明显显的写到url中了,很少会有人上当,而且url长度太长,遇到某些不能输入这么长js脚本的输入框怎么办?
所以就有了一个更好的解决办法,那就是将js脚本写到自己的服务器中,在搜索框中只需要调用咱们自己服务器上面的脚本就可以了。
我们在自己服务器中和刚才的hk.php同路径创建一个hk.js
hk.js:
1 |
|
然后在漏洞界面写入如下xss:
1 |
|
发现结果cookie.txt多了一行
并且源码中的javascript如下
然后我们构造一个链接来欺骗用户
1 |
|
只要用户点击此链接,cookie就会被记录到我们服务器上的cookie.txt里面。
以上就是一次反射性xss最简单的利用方式。
0x05 总结
xss漏洞因为其危害不直观,往往不受到重视,但是它的运用十分灵活,绕过方式也和sql注入一样十分丰富,在有些时候可以达到意想不到的效果。
这次暂时就写到这里,下一篇关于xss的博客会详细的介绍xss的一些绕过检测和限制的方式,还有利用xss进行网络钓鱼以及网页挂马的方法。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!