當前位置:
首頁 > 新聞 > 新手指南:DVWA-1.9全級別教程(完結篇,附實例)之XSS

新手指南:DVWA-1.9全級別教程(完結篇,附實例)之XSS

* 本文原創作者:lonehand,轉載請註明來自FreeBuf.COM


目前,最新的DVWA已經更新到1.9版本(http://www.dvwa.co.uk/

),

而網上的教程大多停留在舊版本,且沒有針對DVWA high級別的教程,因此萌發了一個撰寫新手教程的想法,錯誤的地方還請大家指正。

DVWA簡介

DVWA(Damn Vulnerable Web Application)是一個用來進行安全脆弱性鑒定的PHP/MySQL Web應用,旨在為安全專業人員測試自己的專業技能和工具提供合法的環境,幫助web開發者更好的理解web應用安全防範的過程。

DVWA共有十個模塊,分別是:


Brute Force(暴力(破解))

Command Injection(命令行注入)

CSRF(跨站請求偽造)

File Inclusion(文件包含)

File Upload(文件上傳)

Insecure CAPTCHA (不安全的驗證碼)

SQL Injection(SQL注入)

SQL Injection(Blind)(SQL盲注)

XSS(Reflected)(反射型跨站腳本)

XSS(Stored)(存儲型跨站腳本)

需要注意的是,DVWA 1.9的代碼分為四種安全級別:Low,Medium,High,Impossible。初學者可以通過比較四種級別的代碼,接觸到一些PHP代碼審計的內容。


DVWA的搭建

Freebuf上的文章《新手指南:手把手教你如何搭建自己的滲透測試環境》已經寫得非常好了,在這裡就不贅述了。

本篇為完結篇,介紹XSS模塊的相關內容,之前的教程包括

(點擊文末的閱讀原文,查看這些文章)


Brute Force

Command Injection

CSRF

File Inclusion

File Upload

Insecure CAPTCHA

SQL Injection

SQL Injection(Blind)

XSS

XSS,全稱Cross Site Scripting,即跨站腳本攻擊,某種意義上也是一種注入攻擊,是指攻擊者在頁面中注入惡意的腳本代碼,當受害者訪問該頁面時,惡意代碼會在其瀏覽器上執行,需要強調的是,XSS不僅僅限於JavaScript,還包括flash等其它腳本語言。根據惡意代碼是否存儲在伺服器中,XSS可以分為存儲型的XSS與反射型的XSS。

DOM型的XSS由於其特殊性,常常被分為第三種,這是一種基於DOM樹的XSS。例如伺服器端經常使用document.boby.innerHtml等函數動態生成html頁面,如果這些函數在引用某些變數時沒有進行過濾或檢查,就會產生DOM型的XSS。DOM型XSS可能是存儲型,也有可能是反射型。

(註:下面的實驗都是在Firefox瀏覽器下進行的,感謝火狐沒做XSS filter)


反射

XSS

下面對四種級別的代碼進行分析。


Low


伺服器端核心代碼




// Is there any input?


if( array_key_exists( "name", $_GET ) && $_GET[ "name" ] != NULL ) {


// Feedback for end user


echo "

Hello " . $_GET[ "name" ] . "

";


}


?>

可以看到,代碼直接引用了name參數,並沒有任何的過濾與檢查,存在明顯的XSS漏洞。

漏洞利用

輸入,成功彈框:

相應的XSS

鏈接:

http://192.168.153.130/dvwa/vulnerabilities/xss_r/?name=%3Cscript%3Ealert(/xss/)%3C%2Fscript%3E#


Medium


伺服器端核心代碼




// Get input $name = str_replace( ",成功彈框:

相應的XSS鏈接:

http://192.168.153.130/dvwa/vulnerabilities/xss_r/?name=%3Csc%3Cscript%3Eript%3Ealert%28%2Fxss%2F%29%3C%2Fscript%3E#

2.大小寫混淆繞過

輸入,成功彈框:

相應的XSS

鏈接:

http://192.168.153.130/dvwa/vulnerabilities/xss_r/?name=%3CScRipt%3Ealert(%2Fxss%2F)%3C%2Fscript%3E#


High


伺服器端核心代碼




// Get input $name = preg_replace( "/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i", "", $_GET[ "name" ] );


// Feedback for end user echo "

Hello ${name}

";


}


?>

可以看到,High級別的代碼同樣使用黑名單過濾輸入,preg_replace() 函數用於正則表達式的搜索和替換,這使得雙寫繞過、大小寫混淆繞過(正則表達式中i表示不區分大小寫)不再有效。

漏洞利用

雖然無法使用,成功彈框:

name

一欄前端有字數限制,抓包改為

成功彈框:


Medium


伺服器端核心代碼




// Get input $message = trim( $_POST[ "mtxMessage" ] );


$name = trim( $_POST[ "txtName" ] );


// Sanitize message input $message = strip_tags( addslashes( $message ) );


$message = mysql_real_escape_string( $message );


$message = htmlspecialchars( $message );


// Sanitize name input $name = str_replace( ":

成功彈框

2.大小寫混淆繞過

抓包改name參數為:

成功彈框:


High


伺服器端核心代碼




// Get input $message = trim( $_POST[ "mtxMessage" ] );


$name = trim( $_POST[ "txtName" ] );


// Sanitize message input $message = strip_tags( addslashes( $message ) );


$message = mysql_real_escape_string( $message );


$message = htmlspecialchars( $message );


// Sanitize name input $name = preg_replace( "/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i", "", $name );


$name = mysql_real_escape_string( $name );


// Update database $query = "INSERT INTO guestbook ( comment, name ) VALUES ( "$message", "$name" );";


$result = mysql_query( $query ) or die( "

" . mysql_error() . "

" );


//mysql_close(); }


?>

可以看到,這裡使用正則表達式過濾了