声明:
由于笔者能力有限,难免出现各种错误和漏洞。全文仅作为个人笔记,仅供参考。
笔记内容来源于各类网课。
环境:
DVWA的XSS(low)
一、XSS漏洞定义
跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。
XSS可能存在的位置:
- GET,POST中的参数
- HTTP的头部
- JSON数据中
二、XSS漏洞的分类
1. 反射型XSS
又称为非持久性XSS,这种攻击往往具有一次性。
攻击者通过邮件等形式将包含XSS代码的链接发送给正常用户,当用户点击时,服务器接受该用户的请求并进行处理,然后把带有XSS的代码发送给用户。用户浏览器解析执行代码,触发XSS漏洞。
例如:
<?php
echo $_ GET["uname"];
?>
当用户访问url?uname=<script> alert("hello' );</script>时,触发代码,弹出对话框。
在DVWA的XSS(Reflected)中。
我们输入用户名jack。
会将用户名解析、展示出来,我们可以尝试构建JS语句,看是否有XSS存在。
?name=<img src=x onerror=alert(1);>#
可以成功被执行。我继续尝试获取Cookie。
?name=<img src=x onerror=alert(document.cookie);>#
2. 存储型XSS
存储型XSS又称持久型XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。
攻击者在论坛、博客、留言板中,发帖的过程中嵌入XSS攻击代码,帖子被目标服务器存储在数据库中。当用户进行正常访问时,触发XSS代码。
在DVWA的XSS(Stored)中:
我们输入一组正常的数据。是使用POST提交数据。
txtName=jack&mtxMessage=hi%2Cjack
分析发现,我们再次刷新页面,或者关闭浏览器重新打开这个页面,数据依然存在。
可以判断这里提交的数据会存储在服务器上。我们可以尝试构建JS语句,实现存储型XSS。
但是Name有输入限制,最多10个字符,我们打开F12,定位到Name后的输入框,将maxlength属性删除或置空即可。
这样就没有输入限制了。
txtName = <img src=x onerror=alert(document.cookie);>
mtxMessage = <img src=x onerror=alert(1);>
3. DOM型XSS
DOM型XSS全称Document Object Model,使用DOM动态访问更新文档的内容、结构及样式。
DOM结构图:
HTML标签都是节点,节点组成了节点树。通过HTML DOM可以对树上的所有节点进行修改。
服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应时,DOM对象就会处理XSS代码,触发XSS漏洞。
在DVWA的XSS(DOM)中:
正常使用,测试一下。
我们的选择,会被传人到default的参数中。我们修改default参数的值。
?default=test
输入的参数值会被反弹到DOM中。我们尝试将JS代码弹入DOM中。
?default=<script>alert(1);</script>
可以发现我们的js代码,插入到DOM中了并且被成功执行。