XSS 跨站脚本攻击丨DVWA

XSS

全称 Cross Site Scripting,即跨站脚本攻击。
指攻击者在页面注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行。


破解思路

1
<script>alert("Hacked by feifei !!!")</script>

Low Level:由于服务器端未做任何防御措施,所以直接进行 JS 脚本注入即可。

1
2
3
4
// 双写示例
<sc<script>ript>alert("Hacked by feifei !!!")</script>
// 大小写示例
<scRipt>alert("Hacked by feifei !!!")</script>

Medium Level:提交用户输入之后,服务器会通过 str_replace() 函数将 <script> 消除,因此,我们可以通过双写大小写的方式进行绕过。

1
<img src='1' onerror=alert("Hacked by feifei !!!") />

High Level:这个级别使用正则表达式对用户的输入进行过滤,因此,<script> 标签是不能用了,只能通过其它标签来进行绕过。

Impossible Level:该级别的代码通过 htmlspecialchars() 函数将预定义的字符转换为 HTML 实体,从而防止浏览器将其作为 HTML 元素。


补充

上一章所述为 DVWA 中反射型 XSS 的破解思路,除此之外,还有存储型DOM型

存储型XSS 只是会将用户的输入存储在数据库中,并在页面上显示。当新开或刷新页面时,此类漏洞就会被反复利用,攻击性更强。因此,这类漏洞的破解思路和反射型XSS 的思路是一致的;

而 DOM型XSS 是通过修改 HTML 页面 DOM树的结构而达到利用漏洞的目的。因此,这类漏洞的破解思路有些不一样。基于 DVWA:

1
2
3
4
5
6
7
8
9
10
// 修改 URL 中的参数即可

// Low Level
?default=English<script>alert("Hacked by feifei !!!")</script>

// Medium Level
?default=English</option></select><img src='1' onerror=alert("Hacked by feifei !!!") />

// High Level
?default=English # <script>alert("Hacked by feifei !!!")</script>

Low 中没有防御措施,所以直接进行代码注入即可;
Medium 中会过滤 <script> 标签,所以不能直接注入代码。因此,需要通过审查元素查看选项所处的标签,并将其注释掉,再通过 <img> 标签注入代码;
High 基于白名单,但代码是由 PHP 写成的,PHP 中会将 # 号之后的一行字符串认为是注释,而 JS 中不会将该字符串当作注释,所以思路就显而易见咯!此外,Medium 中也可以使用此方法进行漏洞利用。



Leave a Reply

Your email address will not be published. Required fields are marked *