- List item
DVWA之XSS
XSS 又称CSS(Cross Site Scripting)或跨站脚本攻击,攻击者在网页中插入由JavaScript编写的恶意代码,当用户浏览被嵌入恶意代码的网页时,恶意代码将会在用户的浏览器上执行。
XSS攻击可分为三种:分别为反射型(Reflected),存储型(Stored)和DOM型。
Reflected XSS
反射型XSS又称非持久型XSS,攻击方式往往具有一次性。
Security Level: Low
查看源代码我们发现,直接引用了name参数,并没有任何的过滤与检查,存在明显的XSS漏洞。
<script>alert("yiqiiyihui")</script>
成功
Security Level: Medium
观察源代码我们发现,这里运用了黑名单的思想,使用str_replace函数将输入的<script>
删除,因此必须换一种方法,这种防护机制是可以被轻松绕过的,可以采用双写绕过或者大小写混淆绕过。
这里我们遇到了一个小问题,name一栏存在字数限制,我们按F12查看源码,修改最大长度限制,完事以后一切正常。
1.双写绕过
<sc<script>ript>alert(yiqiyihui)</script>script>
成功
2.大小写混淆绕过
<Script>alert("yiqiyihui")<scRIPt>
成功
Security Level: High
这里同样使用了黑名单过滤输入,preg_replace函数用于正则表达式的搜索和替换,上述双写和大小写混淆的方法将不再适用,虽无法使用<script>
标签注入XSS代码,但可以通过img,body等标签进行注入。
<img src=1 οnerrοr=alert("yiqiyihui")>
成功
Security Level: Impossible
impossible译为不可能的,查看源码可以发现,使用htmlspecialchars函数把预定义的字符转换为HTML实体,防止浏览器将其作为HTML元素,意味着我们输入的代码不会被当作JS去执行,因此也就不存在XSS漏洞。
Stored XSS
存储型XSS又称之为持久型XSS,与反射型XSS,DOM型XSS相比,具有更高的隐蔽性。存储型XSS是最危险的一种跨站脚本,与前两者相比最大的区别在于反射型XSS和DOM型XSS执行都必须依靠用户手动去触发,存储型XSS却不需要。
Security Level: Low
<script>alert("yiqiyihui")</script>
并且每次刷新该页面都会显示该弹窗
Security Level: Medium
我们观察又发现源代码,message字段使用了htmlspecialchars函数编码,也就是说同Reflected XSS的impossible等级一样无法注入XSS漏洞,但我们看name字段,仅仅简单过滤了<script>
标签,还是存在Stored XSS滴!
在name属性栏输入,发现存在限制,按照上述修改限制的方法操作
<sc<script>>alert("yiqiyihui")</script>
成功
Security Level: High
message依旧使用htmlspecialchars函数编码,name字段则利用正则表达式,用img绕过
成功
Security Level: Impossible
不看不知道,一看吓一跳。好家伙,俩htmlspecialchars函数,这是一点路都不给咱留。
DOM XSS
DOM全称为Document Object Model(文档对象模型),DOM型XSS其实是一种特殊类型的反射型XSS,并且不需要与服务器端交互的,它只发生在客户端处理数据阶段。
Security Level: Low
查看源代码,发现没有进行任何防护
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=<script>alert("yiqiyihui")</script>
Security Level: Medium
使用stripos对"<script
"进行过滤,并且不区分大小写,
够造payload:</select><img src=1 onerror=alert("yiqiyihui")>
Security Level: High
如果我们输入的是case后其中的一个则实行代码,所以我们使用#,绕过后端的过滤,注释的内容不会提交到服务器,而是在浏览器执行。
http://127.0.0.1/dvwa/vulnerabilities/xss_d/?default=English# <script>alert("yiqiyihui%")</script>
Security Level: Impossible
不需要做任何防护,保护在客户端
综上所述:等级的改变无非就是使用正则表达式,用img绕过;绕过<script>
标签;利用htmlspecialchars函数,我们对症下药即可.