XSS
全称 Cross Site Scripting,即跨站脚本攻击。
指攻击者在页面注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上执行。
破解思路
[cc lang = “javascript” escaped = “true”]
[/cc]
Low Level:由于服务器端未做任何防御措施,所以直接进行 JS 脚本注入即可。
[cc lang = “javascript” escaped = “true”]
// 双写示例
<sc
// 大小写示例
[/cc]
Medium Level:提交用户输入之后,服务器会通过 str_replace() 函数将 <script> 消除,因此,我们可以通过双写或大小写的方式进行绕过。
[cc lang = “javascript” escaped = “true”]
<img src=’1′ onerror=alert(“Hacked by feifei !!!”) />
[/cc]
High Level:这个级别使用正则表达式对用户的输入进行过滤,因此,<script> 标签是不能用了,只能通过其它标签来进行绕过。
Impossible Level:该级别的代码通过 htmlspecialchars() 函数将预定义的字符转换为 HTML 实体,从而防止浏览器将其作为 HTML 元素。
补充
上一章所述为 DVWA 中反射型 XSS 的破解思路,除此之外,还有存储型和 DOM型。
存储型XSS 只是会将用户的输入存储在数据库中,并在页面上显示。当新开或刷新页面时,此类漏洞就会被反复利用,攻击性更强。因此,这类漏洞的破解思路和反射型XSS 的思路是一致的;
而 DOM型XSS 是通过修改 HTML 页面 DOM树的结构而达到利用漏洞的目的。因此,这类漏洞的破解思路有些不一样。基于 DVWA:
[cc lang = “vim” escaped = “true”]
// 修改 URL 中的参数即可
// Low Level
?default=English
// Medium Level
?default=English<img src=’1′ onerror=alert(“Hacked by feifei !!!”) />
// High Level
?default=English #
[/cc]
Low 中没有防御措施,所以直接进行代码注入即可;
Medium 中会过滤 <script> 标签,所以不能直接注入代码。因此,需要通过审查元素查看选项所处的标签,并将其注释掉,再通过 <img> 标签注入代码;
High 基于白名单,但代码是由 PHP 写成的,PHP 中会将 # 号之后的一行字符串认为是注释,而 JS 中不会将该字符串当作注释,所以思路就显而易见咯!此外,Medium 中也可以使用此方法进行漏洞利用。