CSA CCPTP模塊5- bWAPP靶機(jī)玩法總結(jié)

漏洞練習(xí)
測試漏洞是在虛擬機(jī)環(huán)境下進(jìn)行測試的。
1.HTML 注入—反射型 GET
漏洞類型:注入
影響范圍:主站
URL:http://localhost/bWAPP/htmli_get.php
描述:HTML 注入漏洞是指在用戶輸入的地方,輸入 HTML 文本,被當(dāng)作 GET 參數(shù)傳到服務(wù)器,服務(wù)器以原始格式存儲,未采用 HTML 編碼,導(dǎo)致 HTML 的特性被瀏覽器解析執(zhí)行。這種編碼必須在服務(wù)器端存儲參數(shù)的時候進(jìn)行。
威脅程度:嚴(yán)重
POC:
1、在瀏覽器界面登錄進(jìn)去,然后選擇 HTML INJECTION - REFLECTED GET。
2、在 First name 和 Last name 的文本框內(nèi)輸入 HTML 代碼:
<marquee><h2>You just got hacked!!</h2></marquee> and <img src="hacked.jpg">
3、點(diǎn)擊 Go,會得到如下效果。前提是 hacked.jpg 放在服務(wù)器端?/var/www/bWAPP
?目錄下。
4、結(jié)果顯示 HTML 文本被嵌入到頁面底部。
解決方案:
1、查看服務(wù)端響應(yīng)處理表格參數(shù)的腳本如下 ( htmli_get.php ):
2、在服務(wù)端對表格參數(shù)進(jìn)行檢查并進(jìn)行編碼然后輸出
3、設(shè)置安全等級為 high 后,在此測試,可以發(fā)現(xiàn)漏洞不復(fù)存在。
2.跨站腳本攻擊( XSS )—— IFRAME 注入
影響范圍:主站
URL:http://localhost/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
描述:網(wǎng)頁中包含 IFRAME 標(biāo)簽,并且暴露了 URL 中 IFRAME 的參數(shù),導(dǎo)致網(wǎng)頁中存在該漏洞。這使得攻擊者可以利用 XSS 在流行網(wǎng)站中注入惡意網(wǎng)站連接。注入的內(nèi)容可以從低危的廣告到高危的鍵盤記錄和惡意下載站點(diǎn)。
威脅程度:中危到高危
POC:
1、訪問 URL:http://localhost/bWAPP/iframei.php?ParamUrl=robots.txt&ParamWidth=250&ParamHeight=250
2、IFRAME 源 URL 是 robots.txt,并且作為參數(shù)暴露在 URL 中。
3、用其他鏈接替換掉地址欄中的 ParamUrl,就會展現(xiàn)其他地址的頁面。比如訪問
http://192.168.211.131/bWAPP/iframei.php?ParamUrl=http://www.baidu.com&ParamWidth=1000&ParamHeight=250
解決方案:
1、查看服務(wù)端響應(yīng)處理表格參數(shù)的腳本如下 ( iframei.php ):
2、通過抓包可以發(fā)現(xiàn) IFRAME 標(biāo)簽中的 URL 被當(dāng)作新的 http 請求頭發(fā)起請求,通過如下的 header 函數(shù)發(fā)送 http 請求頭:

3、在 IFRAME 標(biāo)簽中作如下圖所示的修改就能避免該問題,直接指定參數(shù)為固定值,不會接收用戶的輸入作為參數(shù),并且注銷掉 header 函數(shù)那段代碼,這就直接避免了這一問題。
3.系統(tǒng)命令注入
漏洞類型:注入
影響范圍:主站
URL:http://192.168.102.134/bWAPP/commandi.php
描述:漏洞產(chǎn)生的原因是 shell 命令能夠通過 ';'、'|'、'&&' 這些符號串聯(lián)起來執(zhí)行,操作系統(tǒng)本身就支持這種操作。這種漏洞導(dǎo)致惡意 shell 命令可以被執(zhí)行,比如后臺監(jiān)聽某端口或者導(dǎo)致系統(tǒng)崩潰的 fork 炸彈。
威脅程度:高危
POC:
1、訪問網(wǎng)址:http://192.168.102.134/bWAPP/commandi.php
2、發(fā)起正常的 DNS 請求,返回的結(jié)果如下:
3、在輸入框中輸入 'www.baidu.com;cat /eta/passwd',得到如下內(nèi)容:
4、從中可以看出返回了 shell 命令被執(zhí)行,并且返回了相應(yīng)的結(jié)果。從開發(fā)者的角度,明顯不希望這樣的 shell 命令被執(zhí)行。
解決方案:
1、查看服務(wù)器端響應(yīng)的腳本 ( commandi.php ):

2、進(jìn)一步能夠發(fā)現(xiàn)服務(wù)器在送去執(zhí)行前未對接收到的輸入內(nèi)容進(jìn)行檢測:
3、修復(fù)這個漏洞,通過 escapeshellcmd 函數(shù)對特殊字符進(jìn)行轉(zhuǎn)義,把輸入當(dāng)作一個字符串直接導(dǎo)入 shell 函數(shù),并且只當(dāng)作單個安全的命令。該函數(shù)用來轉(zhuǎn)義來自用戶輸入的針對 shell 函數(shù)的單個參數(shù),shell 函數(shù)包括 exec()、system() 和反引號操作符?;蛘咧苯尤サ糨斎胫械?';'、'|'、'&&'。
4.代碼注入( PHP 代碼注入)
漏洞類型:代碼注入
影響范圍:主站
URL:http://192.168.211.131/bWAPP/phpi.php
描述:代碼注入是一種常見的攻擊類型,主要是讓應(yīng)用程序識別為代碼并執(zhí)行。這類漏洞主要是由于未對不可信的輸入輸出數(shù)據(jù)進(jìn)行檢查所致。如果攻擊者能夠?qū)⒋a注入應(yīng)用程序并得到執(zhí)行,那就僅僅是被PHP代碼的能力限制,而未被應(yīng)用程序限制。此例中,可以添加PHP代碼在對URL的請求上,并得到執(zhí)行。
威脅程度:嚴(yán)重
POC:
1、訪問 URL:http://192.168.211.131/bWAPP/phpi.php
2、請求 URL 的頁面允許添加參數(shù),稱為 message,這里未進(jìn)行適當(dāng)?shù)臋z查,就可以被利用。

3、此例中,設(shè)置 message 參數(shù)為?message=a;$fp = fopen("/etc/ucf.conf","r");$result = fread($fp,1024); echo $result
。
這將列出?/etc/ucf.conf
?文件的內(nèi)容。(根據(jù)實(shí)際情況來選擇文件,有的文件為空,什么都沒有,就會導(dǎo)致沒有列出任何內(nèi)容,避免踩坑)
解決方案:
1、查看后臺服務(wù)器響應(yīng)的腳本 ( phpi.php )。
2、message 參數(shù)通過 eval 函數(shù)的時候未對其內(nèi)容進(jìn)行任何檢查,并且 eval 函數(shù)可以執(zhí)行任意 PHP 代碼。
3、為避免執(zhí)行 message 中的內(nèi)容,可以利用 htmlspecialchars 函數(shù)復(fù)寫可能被當(dāng)作代碼執(zhí)行的參數(shù),并且移除 eval 函數(shù),因?yàn)?eval 函數(shù)非常危險(xiǎn),能夠執(zhí)行任意代碼。
4、最終,攻擊者注入的代碼不會被執(zhí)行,這就修復(fù)了該漏洞。
5.SQL注入——GET/SEARCH AND GET/SELECT
漏洞類型:SQL 注入
影響范圍:主站
描述:SQL 注入 ( SQLi ) 是一種注入攻擊,惡意攻擊者可以執(zhí)行 SQL 語句以控制 web 應(yīng)用的數(shù)據(jù)服務(wù)器。許多 SQL 語句可以用來測試是否修復(fù)了非預(yù)期的結(jié)果。
威脅程度:嚴(yán)重
POC:
1、訪問 URL:http://192.168.211.131/bWAPP/sqli_1.php。

2、以下列出了幾種 sql 注入的命令,可以獲得非常有趣的結(jié)果。

1、查看后臺響應(yīng)腳本 ( sqli_1.php )。
2、漏洞產(chǎn)生的原因是在輸入數(shù)據(jù)送入 mysql 查詢之前沒有進(jìn)行檢查。以下代碼反應(yīng)了沒有做任何檢查。
3、修復(fù)該漏洞需要對可解析的字符進(jìn)行檢測,比如引號、反斜杠等,避免這些字符被解析執(zhí)行。PHP 中的 mysqli_real_escape_string 函數(shù)對特殊字符進(jìn)行轉(zhuǎn)義,利用該函數(shù)能夠安全地進(jìn)行 sql 查詢。該函數(shù)預(yù)先考慮一下反斜杠字符:\x00 , \n , \r , \ ,' , " 和 \x1a。
4、升級到安全代碼之后,可以發(fā)現(xiàn)不再存在 sql 注入漏洞,因此修復(fù)了該漏洞。
6. XML/XPATH注入——登錄表單
漏洞類型:注入
影響范圍:主站
URL:http://192.168.211.131/bWAPP/xmli_1.php
描述:XPath 注入是利用了應(yīng)用支持用戶輸入,構(gòu)建相應(yīng)的語句查詢或者訪問 XML 文檔。XPath 的語法和 sql 查詢語法比較相似,構(gòu)造類似 sql 查詢語句能夠?qū)崿F(xiàn) XML 文檔的查詢。此處漏洞產(chǎn)生在用戶名和密碼輸入的地方,可以同時設(shè)置為 1' or '1' = '1,來獲得進(jìn)一步的信息。
威脅程度:嚴(yán)重
POC:
1、訪問 URL:http://192.168.211.131/bWAPP/xmli_1.php。
2、設(shè)置用戶名和密碼為1' or '1' = '1。
3、獲得了賬戶的權(quán)限。

解決方案:
1、查看服務(wù)器端響應(yīng)的腳本文件 ( xmli_1.php )。
2、數(shù)據(jù)在送入 xpath 函數(shù)之前未經(jīng)任何檢驗(yàn)。假設(shè)只有字母和數(shù)字才是正確的用戶名密碼格式,通過檢測輸入數(shù)據(jù)是否存在非字母數(shù)字的字符來正確避免這一問題。代碼中采用了簡單的 preg_match 函數(shù)對字符串進(jìn)行檢查。對任意刻意的字符串都返回空字符串,因此不會查詢?nèi)魏螖?shù)據(jù)。
3、這樣一來,網(wǎng)頁就能安全地避免了 xpath 注入攻擊。結(jié)果如下所示:
7.無效認(rèn)證——不安全的登錄表單
影響范圍:主站
URL:http://192.168.211.131/bWAPP/ba_insecure_login_1.php
描述:用戶名和密碼出現(xiàn)在HTML的源文件中,企圖通過設(shè)置字體為白色來隱藏,但是這樣無效。
威脅程度:低危(極低水平的開發(fā)人員才會出現(xiàn)這種情況)
POC:
1、訪問網(wǎng)址:http://192.168.211.131/bWAPP/ba_insecure_login_1.php。
2、查看 HTML 源代碼文件。

3、利用該用戶名和密碼能夠成功登錄。
解決方案:
1、查看服務(wù)器端的腳本文件 ( ba_insecure_login_1.php )。
2、從源文件中移除用戶名和密碼的標(biāo)簽,就能修復(fù)該問題。
8.會話管理——管理門戶
影響范圍:主站
URL:http://192.168.211.131/bWAPP/smgmt_admin_portal.php?admin=0
描述:管理門戶默認(rèn)是被鎖著的,但是僅僅簡單地修改URL請求中的一個參數(shù)(admin的值設(shè)為1),就能進(jìn)入管理門戶。在GET請求中發(fā)送重要參數(shù),這是嚴(yán)重的缺陷。
威脅程度:低(極低水平的開發(fā)人員才會出現(xiàn)這種情況)
POC:
1、訪問地址:http://192.168.211.131/bWAPP/smgmt_admin_portal.php?admin=0。
2、設(shè)置 admin 參數(shù)為 1, 并且發(fā)送請求,就能發(fā)現(xiàn)頁面解除鎖定。

解決方案:
1、查看服務(wù)器端的腳本文件 ( smgmt_admin_portal.php )。
2、改變通過 GET 接收參數(shù)的方式,采用 POST 或者 cookie 的方式才足夠安全。會話參數(shù)需要完全在服務(wù)端的掌控之下。
3、admin 參數(shù)不在暴露出來并且能夠任意改變,服務(wù)端會在確認(rèn)用戶登錄前檢驗(yàn)用戶的狀態(tài)。
9.跨站腳本攻擊(XSS)——反射型GET
影響范圍:主站
URL:http://192.168.211.131/bWAPP/xss_get.php
描述:XSS 的危害在于允許攻擊者注入代碼到 web 站點(diǎn)中,加載網(wǎng)頁時就會在受害者瀏覽器上得到執(zhí)行。用戶輸入?yún)?shù)從客戶端上傳至服務(wù)器,由于缺乏對用戶輸入?yún)?shù)的檢查,導(dǎo)致可以植入 javascript 代碼,并在服務(wù)器下次返回網(wǎng)頁結(jié)果至客戶端的時候觸發(fā)執(zhí)行。
威脅程度:高危
POC:
1、訪問網(wǎng)址:http://192.168.211.131/bWAPP/xss_get.php

2、在 firstname 和 lastname 的文本框內(nèi)輸入如下語句:<script>alert(document.cookie)</script>
?和?You just got hacked!

3、javascript 代碼被執(zhí)行,在當(dāng)前頁面返回了 cookie 的值,更進(jìn)一步能夠輕易發(fā)送 cookie 的值給攻擊者。
解決方案:
1、查看服務(wù)器端處理響應(yīng)的腳本文件 ( xss_get.php )。
2、對用戶輸入的內(nèi)容通過 htmlentities 函數(shù)轉(zhuǎn)換,把程序可解釋執(zhí)行的字符串轉(zhuǎn)換成不可執(zhí)行的。
3、漏洞被修復(fù)。
10.跨站腳本——反射型JSON
影響范圍:主站
URL:http://192.168.211.131/bWAPP/xss_json.php
描述:在搜索電影的文本框中輸入的值被提交到服務(wù)器,服務(wù)器不檢查輸入的內(nèi)容,這就導(dǎo)致當(dāng)服務(wù)器返回 json 對象到客戶端的時候產(chǎn)生嚴(yán)重的問題,為了解析 json 內(nèi)容并適當(dāng)展示,就會執(zhí)行 javascript 代碼,如果原始內(nèi)容中本身就包含 javascript 代碼,那就很有可能得到執(zhí)行。
威脅程度:高危
POC:
1、訪問 URL:http://192.168.211.131/bWAPP/xss_json.php
2、查看源代碼,發(fā)現(xiàn)從服務(wù)器返回的文本框內(nèi)容是通過 javascript 解析的 json 對象。
3、json 字符串可以通過在電影名稱后面添加 ‘'}]}’ 來閉合,然后再添加 javascript 代碼,最后添加 // 字符。輸入內(nèi)容如下:
watchmen"}]}' ;prompt("Enter password to continue:"); alert("Password received with thanks");//
4、通過提交上面的輸入內(nèi)容,導(dǎo)致額外的 javascript 代碼被執(zhí)行。
5、比如可以在用戶不知情的情況下偷取用戶信息。( 自己在火狐和 chrome 上沒有實(shí)驗(yàn)成功,感覺是被瀏覽器處理了 )
解決方案:
1、查看服務(wù)器端處理響應(yīng)的腳本 ( xss_json.php )。

2、用戶端提交的電影名稱在未做任何檢查的情況下被存儲,這就帶來了所見到的不安性。
3、修復(fù)這個漏洞,需要過濾掉可以被瀏覽器解析的特殊字符,因此利用 htmlspecialchars 函數(shù)對特殊字符進(jìn)行轉(zhuǎn)換,比如單引號、雙引號等。
4、修改服務(wù)端腳本后,提交同樣的請求,返回的不再是特殊字符,而是轉(zhuǎn)換成了 html 格式輸出,因此漏洞被修復(fù)。
11.不安全的直接對象引用——改變密碼
影響范圍:主站
URL:http://192.168.211.131/bWAPP/insecure_direct_object_ref_1.php
描述:不安全的直接對象引用發(fā)生于應(yīng)用提供對用戶相關(guān)的對象的直接接入。漏洞導(dǎo)致攻擊者可以繞過認(rèn)證并直接接觸到系統(tǒng)資源,比如數(shù)據(jù)庫記錄或者文件。此例中,用戶提供的login ID被用來在后臺直接接入和更新數(shù)據(jù)庫,沒有檢查當(dāng)前會話的login ID是否匹配。
威脅程度:高危
POC:
1、訪問 URL:http://192.168.211.131/bWAPP/insecure_direct_object_ref_1.php
2、利用 burpsuite 攔截客戶端和服務(wù)器交互的信息。攔截信息后,修改 POST 信息的 body 部分,修改 login ID 為其他內(nèi)容,比如 “ned”。

3、盡管消息顯示成功,但是該用戶不會意識到自身的密碼被修改。
解決方案:
1、查看服務(wù)器端處理響應(yīng)的腳本文件 ( insecure_direct_object_ref_1.php )。
2、腳本文件接收用戶輸入的 login ID,但是并沒有檢查這是否是目前登陸的用戶(會話變量中的登陸的用戶)。
3、修復(fù)這個漏洞,需要檢查用戶提供的 login ID 和會話存儲的 login ID。只有它們匹配了才進(jìn)一步提供查詢數(shù)據(jù)庫操作。
4、現(xiàn)在如果攻擊者采用上面的方式修改密碼,服務(wù)器就會返回如下的錯誤信息。
5、注意這種方式并不能阻止密碼被修改,在實(shí)施這種措施之前,需要實(shí)施應(yīng)對重放攻擊的機(jī)制。
12.敏感數(shù)據(jù)泄露——base64編碼密碼
影響范圍:主站
需要解決的程度:高
URL:http://192.168.102.134/bWAPP/insecure_crypt_storage_3.php
描述:編碼或者加密的cookie存儲在客戶端瀏覽器上,并不足夠健壯以應(yīng)對解碼或者解密。SHA1和base64算法比較容易破解。
威脅程度:中危(并不常見)
POC:
1、訪問 URL:http://192.168.102.134/bWAPP/insecure_crypt_storage_3.php。
2、取出網(wǎng)站的 cookie,火狐瀏覽器上通過:F12 —— 存儲 —— cookie 查看。

3、對低安全性下的 base64 編碼和高安全性下的 sha1 加密的字符串進(jìn)行解密,可以獲得解密后的字符串 “sdf”。因此 cookie 可以被破解。
解決方案:
1、查看服務(wù)器處理響應(yīng)的腳本 ( insecure_crypt_storage_3.php )。
2、使用更安全的加密算法,比如 "sha512”。
3、最終加密出來的 cookie 就更難破解:
50fde99373b04363727473d00ae938a4f4debfd0afb1d428337d81905f6863b3cc303bb331ffb3361085c3a6a2ef4589ff9cd2014c90ce90010cd3805fa5fbc6。
13.缺少訪問功能控制——目錄遍歷之目錄
影響范圍:主站
URL:http://192.168.102.134/bWAPP/directory_traversal_2.php?directory=documents
描述:目標(biāo)用戶才能接觸的文件列表作為 GET 請求的參數(shù)傳遞,如果未對文件名進(jìn)行檢查,攻擊者可以修改文件名從而接觸到其他文件。
威脅程度:中危
POC:
1、訪問 URL:http://192.168.102.134/bWAPP/directory_traversal_2.php?directory=documents
2、改名目錄參數(shù) ”document” 為 ‘.’ ,列出當(dāng)前目錄下的文件。

3、同時也可以用相對路徑的方式獲取更多目錄信息,了解目錄架構(gòu)能夠讓惡意攻擊者獲取非常多的信息,比如?directory=../../../../
?能夠直接查看服務(wù)器根目錄的信息。
解決方案:
1、查看服務(wù)器端處理響應(yīng)的腳本 ( directory_traversal_2.php )。
2、可以看出目錄作為用戶輸入的參數(shù),在經(jīng)過 show_directory 函數(shù)前沒有檢查其合法性,導(dǎo)致相對路徑的請求也會通過,從而使得攻擊者可以遍歷整個目錄。
3、修復(fù)這個漏洞,必須對輸入進(jìn)行檢查,確保 "../” 這樣的字符串無論如何不會出現(xiàn)在目錄字符串中。使用 directory_traversal_check_2 函數(shù)對輸入進(jìn)行檢查,過濾掉特殊字符串。
3、這就修復(fù)了該漏洞,當(dāng)前目錄之前的目錄不能被遍歷,
14.缺少訪問功能控制——目錄遍歷之文件
影響范圍:主站
URL:http://192.168.102.134/bWAPP/directory_traversal_1.php?page=message.txt
描述:提供給用戶接入的參數(shù)作為GET請求的參數(shù),攻擊者可以修改該參數(shù)為當(dāng)前目錄下其他的文件。因?yàn)闆]有檢查相對路徑,因此攻擊者可以接入隱藏的和受保護(hù)的文件。
威脅等級:高危
POC:
1、訪問 URL:http://192.168.102.134/bWAPP/directory_traversal_1.php?page=message.txt
2、網(wǎng)頁參數(shù)暴露在外,攻擊者通過簡單的測試即可發(fā)現(xiàn)沒有對相對路徑進(jìn)行校驗(yàn)。
3、修改參數(shù) “message.txt” 為?page=../../../etc/passwd
,目錄路徑可以通過實(shí)驗(yàn)獲取錯誤信息來找到,比如通過遞歸方式遍歷目錄路徑。這樣就可以直接分析目錄結(jié)構(gòu)(比如利用某些目錄下的遍歷漏洞),找到需要的文件的相對路徑。一旦找到這樣的目錄,就能直接利用相應(yīng)的路徑打印出文件的內(nèi)容。

解決方案:
1、查看服務(wù)器端處理響應(yīng)的腳本 ( directory_traversal_1.php )。
2、任何用戶提交的 file 參數(shù)在通過 show_file 函數(shù)之前都沒有進(jìn)行檢查,沒有判斷其是否是相對路徑的格式,因此到來了該漏洞。
3、修復(fù)這個漏洞,必須在進(jìn)入 show_file 函數(shù)之前對 $file 變量進(jìn)行檢查,通過 directory_traversal_check_1 函數(shù)對輸入的參數(shù)進(jìn)行檢查,過濾掉相對路徑的格式,如下:
4、更新后,重新在瀏覽器上測試,就可發(fā)現(xiàn)不存在該漏洞了。
15.跨站請求偽造(轉(zhuǎn)移財(cái)產(chǎn))
影響范圍:主站
URL:http://192.168.102.134/bWAPP/csrf_2.php
描述:跨站請求偽造(CSRF)就是當(dāng)一個惡意站點(diǎn)、郵件、博客、緊急信息或者程序?qū)е掠脩舻臑g覽器利用用戶現(xiàn)在的憑證在另外一個受信任的站點(diǎn)做了非期望的操作。
威脅等級:嚴(yán)重
POC:
1、訪問 URL:http://192.168.102.134/bWAPP/csrf_2.php
2、在基金轉(zhuǎn)移的接口,通過 URL 傳遞參數(shù)是很糟糕的一種做法,在這種情況下容易犯相同的錯誤。鏈接可以被修改為攻擊者的銀行賬號,并且轉(zhuǎn)移的金額也可以被修改。

3、可修改指向攻擊者賬戶的鏈接為:
csrf_2.php?account=Nagaraj_Account&amount=1000&action=transfer
可以嵌入該鏈接到圖像中或者通過其他社會工程學(xué)手段讓某個人點(diǎn)擊該連接。點(diǎn)擊該連接將導(dǎo)致相應(yīng)金額被轉(zhuǎn)移。比如下面的圖片,包含上面的超鏈接,用戶粗心地點(diǎn)擊了該圖片。

解決方案:
1、查看服務(wù)器端處理響應(yīng)的腳本( csrf_2.php )。
2、第一步就是改版提交方式為 POST,確保該 url 不能獨(dú)自被用來轉(zhuǎn)移資產(chǎn),無法嵌入一個 post 請求在之前的對象中。
3、下圖展示的是需要要修改的原始代碼:
4、參照如下圖片修改后,就無法嵌入 url 進(jìn)行 csrf 攻擊。
5、最終完成了漏洞修復(fù)。
https://zhuanlan.zhihu.com/p/480133276?utm_id=0