本文记录使用DVWA进行XSS漏洞实战的过程
跨站脚本(Cross-Site Scripting,XSS)是一种经常出现在 WEB 应用程序中的计算机安全漏洞,是由于 WEB 应用程序对用户的输入过滤不足而产生的。攻击者利用网站漏洞把恶意的脚本代码注入到网页中,当其他用户浏览这些网页时,就会执行其中的恶意代码,对受害用户可能采取 Cookies 资料窃取、会话劫持、钓鱼欺骗等各种攻击。
反射型跨站脚本(Reflected Cross-Site Scripting)是最常见,也是使用最广的一种,可将恶意脚本附加到 URL 地址的参数中。
反射型 XSS 的利用一般是攻击者通过特定手法(如电子邮件),诱使用户去访问一个包含恶意代码的 URL,当受害者点击这些专门设计的链接的时候,恶意代码会直接在受害者主机上的浏览器执行。此类 XSS 通常出现在网站的搜索栏、用户登录口等地方,常用来窃取客户端 Cookies 或进行钓鱼欺骗。
输入xss,点击Submit,显示正常的xss;
输入
通过查看网页源代码元素发现Hello之后出现了
接着,进行弹窗测试:
输入,点击Submit,成功弹窗;
通过查看网页源代码发现Hello之后出现了标签,成功注入JavaScript,证明漏洞存在
那么,JavaScript弹窗函数还有哪些呢?alert(),confirm(),prompt()
因此,如果alert()被过滤掉的话,可以尝试其他两个函数。
尝试输入
未弹窗,显示Hello alert(/xss/),说明过滤起了作用
那么,是如何被过滤的呢?----------服务器将
发现是可以成功弹窗的
那么,还有什么方法吗?
尝试输入
发现是可以成功弹窗的。说明,只过滤小写,大小写混合测试成功。
尝试low方法,输入
显示Hello >,说明过滤起了作用
尝试medium方法,输入
显示Hello >,说明过滤起了作用
尝试medium方法,输入
还是显示Hello >,说明过滤起了作用
那么,有什么别的方法吗?
尝试img标签,输入
成功的弹窗。通过查看网页源代码,成功注入img标签,说明不过滤img标签
接着看看iframe标签:
输入
成功的弹窗。通过查看网页源代码,成功注入iframe标签。
对这些特殊符号&" ’ <>做了过滤,输入特殊字符后,可以通过F12查看源码。
那么,是什么函数干的呢?
是$name=htmlspecialchars($_GET[‘name’]);
&----&
"-----"
'------'
<-----<
>----->
此类 XSS 不需要用户单击特定 URL 就能执行跨站脚本,攻击者事先将恶意代码上传或储存到漏洞服务器中,只要受害者浏览包含此恶意代码的页面就会执行恶意代码。持久型 XSS 一般出现在网站留言、评论、博客日志等交互处,恶意脚本存储到客户端或者服务端的数据库中。
先通过查看源代码修改maxlength
输入
成功弹窗。通过查看源代码,name和message均成功注入]
再次刷新后,弹窗依旧会出现。因为,存储型的XSS会存在数据库,弹窗会一直存在,所以,建议使用Setup/Reset DB重置
尝试输入
发现是可以成功弹窗的。通过查看源代码,name成功注入
检测元素,可以看到是通过JS在本地动态执行嵌入了script标签:
若要尝试使用其他XSS payload,如img、svg等标签,因为select标签内只允许内嵌option标签,而option标签中能内嵌script标签但不能内嵌img等标签,因此需要在注入时先闭合option和select标签从而使注入的标签逃逸出来执行XSS:
因此,default中传入
最后查看源码,没有做任何防御:
先尝试payload:
发现会重定向到English选项页面。
推测可能是对script字符串进行了过滤,因此进行重复内嵌或大小写组合等方式尝试绕过:
然而发现也是会重定向到English选项页面。
应该是对script标签进行了比较严格的过滤,
换个标签类型的payload(注意要闭合前面的标签如low级所说):
发现不会重定向到English选项页面,但不知道为什么没有弹框?
因此可以推测,后台代码只是对script标签进行了有效的过滤,而对于其他标签则未进行过滤。
最后查看源码,发现只对script标签进行了过滤,过滤方式是调用stripos()函数获取“