第四章 漏洞發(fā)現(xiàn)
作者:Gilberto Najera-Gutierrez
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
簡(jiǎn)介
我們現(xiàn)在已經(jīng)完成了滲透測(cè)試的偵查階段毫玖,并且識(shí)別了應(yīng)用所使用的服務(wù)器和開(kāi)發(fā)框架的類型抹蚀,以及一些可能的弱點(diǎn)÷仍幔現(xiàn)在是實(shí)際測(cè)試應(yīng)用以及檢測(cè)它的漏洞的時(shí)候了。
這一章中恬叹,我們會(huì)涉及到檢測(cè)一些 Web 應(yīng)用中常見(jiàn)漏洞的過(guò)程,以及允許我們發(fā)現(xiàn)和利用它們的工具。
我們也會(huì)用到 vulnerable_vm 中的應(yīng)用执赡,我們會(huì)使用 OWASP Mantra 作為瀏覽來(lái)執(zhí)行這些測(cè)試。
4.1 使用 Hackbar 插件來(lái)簡(jiǎn)化參數(shù)分析
在測(cè)試 Web 應(yīng)用時(shí)函筋,我們需要和瀏覽器的地址欄交互沙合,添加或修改參數(shù),以及修改 URL跌帐。一些服務(wù)器的相應(yīng)會(huì)包含重定向首懈,刷新以及參數(shù)修改绊率。所有這些改動(dòng)都會(huì)使對(duì)相同變量嘗試不同值的操作非常費(fèi)時(shí)間。我們需要一些工具來(lái)使它們不那么混亂究履。
Hackbar 是 Firefox 插件滤否,它的行為就像地址欄,但是不受由服務(wù)器響應(yīng)造成的重定向或其它修改影響最仑,這就是我們需要測(cè)試 Web 應(yīng)用的原因藐俺。
這個(gè)秘籍中,我們會(huì)使用 Hackbar 來(lái)簡(jiǎn)化相同請(qǐng)求的不同版本的發(fā)送工作泥彤。
準(zhǔn)備
如果你沒(méi)有使用 OWASP Mantra欲芹,你需要在你的 Firefox 上安裝 Hackbar。
操作步驟
訪問(wèn) DVWA 并且登錄全景。默認(rèn)的用戶名/密碼組合是
admin/admin
耀石。-
在左側(cè)的菜單上選擇
SQL Injection
(SQL 注入)。 -
在
User ID
輸入框中輸入數(shù)字爸黄,并點(diǎn)擊Submit
(提交)滞伟。現(xiàn)在我們可以按下
F9
或者點(diǎn)擊圖標(biāo)來(lái)顯示 Hackbar。Hackbar 會(huì)賦值 URL 及其參數(shù)炕贵。我們也可以開(kāi)啟修改 POST 請(qǐng)求和 Referer 參數(shù)的選項(xiàng)梆奈。后者告訴服務(wù)器頁(yè)面從哪里被請(qǐng)求。
-
讓我們做個(gè)簡(jiǎn)單的改動(dòng)称开,將
id
參數(shù)值從1
改成2
亩钟,并點(diǎn)擊Execute
(執(zhí)行)或者使用Alt + X
快捷鍵。我們可以看到鳖轰,參數(shù)
id
對(duì)應(yīng)頁(yè)面上的文本框清酥,所以,我們可以使用 Hackbar 修改id
來(lái)嘗試任何值蕴侣,而不需要修改文本框中的User ID
并提交它焰轻。在測(cè)試擁有許多輸入的表單,或者取決于輸入重定向到其它頁(yè)面的表單時(shí)昆雀,這非常便利辱志。 -
我們可以將一個(gè)有效值替換為另一個(gè),但是如果我們輸入了一個(gè)無(wú)效值作為
id
狞膘,會(huì)發(fā)生什么呢揩懒?嘗試將單引號(hào)作為id
:通過(guò)輸入應(yīng)用非預(yù)期的字符,我們觸發(fā)了一個(gè)錯(cuò)誤挽封,這在之后測(cè)試一些漏洞的時(shí)候非常有用已球。
工作原理
Hackbar 是帶有一些實(shí)用特性的第二個(gè)地址欄,比如不受 URL 重定向影響,并且允許我們修改 POST 參數(shù)和悦。
此外退疫,Hackbar 可用于向我們的請(qǐng)求中添加 SQL 注入或跨站腳本代碼段,以及哈希鸽素、加密和編碼我們的輸入褒繁。我們會(huì)在這一章后面的秘籍中深入探索 SQL 注入、跨站腳本馍忽,以及其他漏洞棒坏。
4.2 使用 Tamper Data 插件攔截或修改請(qǐng)求
有時(shí)候,應(yīng)用擁有客戶端的輸入校驗(yàn)機(jī)制遭笋,它們通過(guò) JavaScript坝冕,隱藏表單或者 POST 數(shù)據(jù),并不能直接在地址欄中了解或看到瓦呼。為了測(cè)試這些以及其它類型的變量喂窟,我們需要攔截瀏覽器發(fā)送的請(qǐng)求并且在它們到達(dá)服務(wù)器之前修改它們。這個(gè)秘籍中央串,我們會(huì)使用叫做 Tamper Data 的 Firefox 插件來(lái)攔截表單提交并且在它離開(kāi)計(jì)算機(jī)之前修改一些值磨澡。
操作步驟
-
從 Mantra 的菜單中訪問(wèn)
Tools | Application Auditing | Tamper Data
。 -
會(huì)出現(xiàn) Tamper Data 的窗口≈屎停現(xiàn)在稳摄,讓我們?yōu)g覽 < http://192.168.56.102/dvwa/login.php>。我們可以在插件中看到請(qǐng)求會(huì)話饲宿。
每個(gè)瀏覽器產(chǎn)生的請(qǐng)求都會(huì)在活動(dòng)時(shí)經(jīng)過(guò) Tamper Data厦酬。
為了攔截請(qǐng)求并修改它的值,我們需要通過(guò)點(diǎn)擊
Start Tamper
來(lái)啟動(dòng) Tamper√毕耄現(xiàn)在啟動(dòng) Tamper仗阅。輸入一些偽造的用戶名密碼組合。例如国夜,
test/password
减噪,之后點(diǎn)擊Login
。在確認(rèn)框中支竹,取消勾選
Continue Tampering?
并點(diǎn)擊Tamper
。Tamper Popup
窗口會(huì)出現(xiàn)鸠按。-
在彈出窗口中礼搁,我們可以修改發(fā)送給服務(wù)器的信息,包括請(qǐng)求頭和 POST 參數(shù)目尖。將
username
和password
改為正確的(admin/admin
)馒吴,之后點(diǎn)擊OK
。這應(yīng)該在本書中使用,而不是 DVWA:在最后一步中饮戳,我們?cè)诒韱沃械闹涤蔀g覽器發(fā)送給服務(wù)器之前修改了它們豪治。因此,我們可以以正確的憑證而不是錯(cuò)誤的憑證登錄服務(wù)器扯罐。
工作原理
Tamper Data 會(huì)在請(qǐng)求離開(kāi)瀏覽器之前捕獲請(qǐng)求负拟,并提供給我們時(shí)間來(lái)修改它包含的任何變量。但是歹河,它也有一些限制掩浙,例如不能編輯 URL 或 GET 參數(shù)。
4.3 使用 ZAP 來(lái)查看和修改請(qǐng)求
雖然 Tamper Data 有助于測(cè)試過(guò)程秸歧,有時(shí)我們需要更靈活的方法來(lái)修改請(qǐng)求以及更多特性厨姚,例如修改用于發(fā)送它們的方法(即從 GET 改為 POST),或者使用其它工具為進(jìn)一步的目的保存請(qǐng)求/響應(yīng)對(duì)键菱。
OWASP ZAP 不僅僅是 Web 代碼谬墙,它不僅僅能夠攔截流量,也擁有許多在上一章所使用的经备,類似于爬蟲(chóng)的特性拭抬,還有漏洞掃描器,模糊測(cè)試器弄喘,爆破器玖喘,以及其它。它也擁有腳本引擎蘑志,可以用于自動(dòng)化操作或者創(chuàng)建新的功能累奈。
這個(gè)秘籍中,我們會(huì)開(kāi)始將 OWASP ZAP 用作代理急但,攔截請(qǐng)求澎媒,并在修改一些值之后將它發(fā)送給服務(wù)器。
準(zhǔn)備
啟動(dòng) ZAP 并配置瀏覽器在通過(guò)它發(fā)送信息波桩。
操作步驟
訪問(wèn) http://192.168.56.102/mutillidae/戒努。
現(xiàn)在,訪問(wèn)菜單欄中的
OWASP Top 10 | A1 – SQL Injection | SQLi – Extract Data | User Info
镐躲。下一步是提升應(yīng)用的安全等級(jí)储玫。點(diǎn)擊
Toggle Security
。現(xiàn)在Security Level
應(yīng)該是1 (Arrogant)
萤皂。-
將
test'
(包含單引號(hào))作為Name
撒穷,以及password'
作為Password
,并且點(diǎn)擊View Account Details
裆熙。我們得到了警告消息端礼,告訴我們輸入中的一些字符不合法禽笑。這里,單引號(hào)被檢測(cè)到了蛤奥,并被應(yīng)用的安全手段中止佳镜。
-
點(diǎn)擊
OK
來(lái)關(guān)閉警告。如果我們?cè)?ZAP 中檢查歷史凡桥,我們可以看到?jīng)]有發(fā)給服務(wù)器的請(qǐng)求蟀伸,這是由于客戶端校驗(yàn)機(jī)制。我們會(huì)使用請(qǐng)求攔截來(lái)繞過(guò)這個(gè)保護(hù)唬血。
-
現(xiàn)在我們開(kāi)啟請(qǐng)求攔截(在 ZAP 叫做斷點(diǎn))望蜡,通過(guò)點(diǎn)擊
"break on all requests
(中斷所有請(qǐng)求)按鈕。 -
下面拷恨,我們輸入了有效值
Name
和Password
脖律,就像test
和password
,并再次檢查細(xì)節(jié)腕侄。ZAP 會(huì)轉(zhuǎn)移焦點(diǎn)小泉,并打開(kāi)叫做
Break
的新標(biāo)簽頁(yè)。這里是剛剛在頁(yè)面上產(chǎn)生的請(qǐng)求冕杠,我們可以看到一個(gè) GET 請(qǐng)求微姊,帶有在 URL 中發(fā)送的username
和password
參數(shù)。我們可以添加上一次嘗試中不允許的單引號(hào)分预。 -
為了繼續(xù)而不會(huì)被 ZAP 打斷兢交,我們通過(guò)點(diǎn)擊
Unset Break
按鈕來(lái)禁用斷點(diǎn)。 -
通過(guò)播放按鈕來(lái)提交修改后的請(qǐng)求笼痹。
我們可以看到配喳,應(yīng)用在頂部提供給我們錯(cuò)誤信息,所以這是它的保護(hù)機(jī)制凳干,它在客戶端檢查用戶輸入晴裹,但是在服務(wù)端并沒(méi)有準(zhǔn)備好處理非預(yù)期的請(qǐng)求。
工作原理
這個(gè)秘籍中救赐,我們使用 ZAP 代理來(lái)攔截有效的請(qǐng)求涧团,將它修改為無(wú)效或而已請(qǐng)求,之后把它發(fā)給服務(wù)器并且觸發(fā)非預(yù)期的行為经磅。
前三步用于開(kāi)啟安全保護(hù)泌绣,便于應(yīng)用可以將單引號(hào)檢測(cè)為無(wú)效字符。
之后预厌,我們產(chǎn)生測(cè)試請(qǐng)求阿迈,并證實(shí)了會(huì)執(zhí)行一些校驗(yàn)。提示警告的時(shí)候配乓,沒(méi)有請(qǐng)求通過(guò)代理仿滔,這告訴了我們檢驗(yàn)是在客戶端進(jìn)行的,可能使用 JavaScript犹芹。知道了這個(gè)之后崎页,我們產(chǎn)生了合法的請(qǐng)求,并使用代理來(lái)攔截它腰埂,這讓我們能夠繞過(guò)客戶端的保護(hù)飒焦。我們將該請(qǐng)求轉(zhuǎn)換為惡意請(qǐng)求,并把它發(fā)給服務(wù)器屿笼,這使它不能被正確處理牺荠,并返回錯(cuò)誤。
4.4 使用 Burp Suite 查看和修改請(qǐng)求
Burp Suite 和 OWASP ZAP 一樣驴一,也不僅僅是個(gè)簡(jiǎn)單的 Web 代理休雌。它是功能完整的 Web 應(yīng)用測(cè)試包。它擁有代理肝断、請(qǐng)求重放器杈曲、請(qǐng)求自動(dòng)化工具、字符串編碼器和解碼器胸懈,漏洞掃描器(Pro 版本中)担扑,以及其它實(shí)用的功能。
這個(gè)秘籍中趣钱,我們會(huì)執(zhí)行上一個(gè)練習(xí)涌献,但是這次使用 Burp Suite 的代理功能來(lái)攔截和修改請(qǐng)求。
準(zhǔn)備
啟動(dòng) Burp Suite 并讓瀏覽器使用它的代理首有。
操作步驟
-
默認(rèn)情況下,Burp 代理中的攔截器是開(kāi)著的绞灼,所以他會(huì)捕獲第一個(gè)請(qǐng)求利术。我們需要打開(kāi) Burp Suite 并點(diǎn)擊
Proxy
標(biāo)簽頁(yè)中的Intercept is on
按鈕。 瀏覽器會(huì)繼續(xù)加載頁(yè)面低矮。當(dāng)它完成時(shí)印叁,我們通過(guò)
Toggle Security
將當(dāng)前的應(yīng)用安全級(jí)別設(shè)置為1 (Arrogant)
。從菜單欄中訪問(wèn)
OWASP Top 10 | A1 – SQL Injection | SQLi – Extract Data | User Info
军掂。-
在
Name
輸入框中轮蜕,對(duì)Username
輸入user<>
(包括符號(hào))。在Password
輸入框中蝗锥,對(duì)Password
輸入secret<>
跃洛。之后點(diǎn)擊View Account Details
。我們會(huì)得到警告终议,告訴我們我們可能向應(yīng)用輸入了一些危險(xiǎn)字
符汇竭。 -
現(xiàn)在我們直到這些符號(hào)在表單中并不允許葱蝗,我們也知道了它是客戶端的校驗(yàn),因?yàn)榇淼?code>HTTP history標(biāo)簽頁(yè)中沒(méi)有任何請(qǐng)求出現(xiàn)细燎。讓我們嘗試?yán)@過(guò)這個(gè)保護(hù)两曼。通過(guò)點(diǎn)擊 Burp Suite 中的
Intercept is off
來(lái)開(kāi)啟消息攔截。 下一步是發(fā)送有效數(shù)據(jù)玻驻,例如
user
和secret
悼凑。-
代理會(huì)攔截該請(qǐng)求。現(xiàn)在我們修改
username
和password
的值璧瞬,通過(guò)添加禁止的字符<>
户辫。 -
我們可以發(fā)送編輯后的信息,并通過(guò)點(diǎn)擊
Intercept is on
來(lái)禁用攔截嗤锉,或者我們可能發(fā)酸發(fā)送他并保持消息攔截渔欢,通過(guò)點(diǎn)擊Forward
。對(duì)于這個(gè)練習(xí)瘟忱,我們禁用攔截并檢查結(jié)果膘茎。
工作原理
就像在上個(gè)秘籍中看到的那樣,在請(qǐng)求經(jīng)過(guò)由應(yīng)用建立在客戶端的驗(yàn)證機(jī)制之前酷誓,我們使用代理來(lái)捕獲請(qǐng)求披坏,并通過(guò)添加一些在檢驗(yàn)中不允許的字符,修改了它的內(nèi)容盐数。
能夠攔截和修改請(qǐng)求棒拂,對(duì)任何 Web 應(yīng)用滲透測(cè)試來(lái)說(shuō)都非常重要,不僅僅用于繞過(guò)一些客戶端檢驗(yàn)玫氢,就像我們?cè)诋?dāng)前和上一個(gè)秘籍中所做的那樣帚屉,也能夠用于了解發(fā)送了哪個(gè)信息,以及嘗試?yán)斫鈶?yīng)用的內(nèi)部原理漾峡。我們可能也需要基于我們的理解來(lái)添加攻旦、移除或替換一些值。
4.5 識(shí)別跨站腳本(XSS)漏洞
跨站腳本(XSS)是 Web 應(yīng)用中最常見(jiàn)的漏洞之一生逸。實(shí)際上牢屋,它位于 2013 年 OWASP Top 10 的第三名(<https://www.owasp.org/ index.php/Top_10_2013-Top_10>)。
這個(gè)秘籍中槽袄,我們會(huì)看到一些識(shí)別 Web 應(yīng)用中跨站腳本漏洞的關(guān)鍵點(diǎn)烙无。
操作步驟
登錄 DVWA 并訪問(wèn)反射型 XSS。
-
測(cè)試漏洞的第一步是觀察應(yīng)用的正常響應(yīng)遍尺。在文本框中輸入名稱并點(diǎn)擊
Submit
按鈕截酷。我們使用Bob
。 -
應(yīng)用會(huì)使用我們提供的名稱來(lái)拼接代碼乾戏。如果我們不輸入有效名稱迂苛,而是輸入一些特殊字符或數(shù)字會(huì)怎么樣呢三热?讓我們嘗試
<'this is the 1st test'>
。 -
現(xiàn)在我們可以看到三幻,我們輸入在文本框匯總的任何東西都會(huì)反射到響應(yīng)中康铭,也就是說(shuō),它成為了響應(yīng)中 HTML 頁(yè)面的一部分赌髓。讓我們檢查頁(yè)面源代碼來(lái)分析它如何展示信息兢哭,就像下面截圖中那樣:
源碼表明了輸出中沒(méi)有對(duì)任何特殊字符做編碼岸霹。我們發(fā)送的特殊字符被反射回了頁(yè)面慈俯,沒(méi)有任何預(yù)處理强品。
<
和>
符號(hào)適用于定義 HTML 標(biāo)簽的符號(hào)检碗,我們可能能夠在這里輸入一些腳本代碼瘩缆。 -
嘗試輸入一個(gè)名稱疤估,后面帶有非常簡(jiǎn)單的腳本代碼思灌。
Bob<script>alert('XSS')</script>
頁(yè)面會(huì)執(zhí)行腳本骑丸,并彈出提示框舌仍,表明這個(gè)頁(yè)面上存在跨站腳本漏洞。
-
現(xiàn)在檢查源碼來(lái)觀察輸入中發(fā)生了什么通危。
我們的輸入看起來(lái)作為 HTML 的一部分來(lái)處理铸豁。瀏覽器解釋了
<script>
標(biāo)簽并執(zhí)行了其中的代碼,彈出了我們?cè)O(shè)置的提示框菊碟。
工作原理
跨站腳本漏洞在服務(wù)端和客戶端中沒(méi)有輸入校驗(yàn)节芥,并且輸出沒(méi)有合理編碼時(shí)發(fā)生。這意味著應(yīng)用允許我們輸入用于 HTML 代碼中的字符逆害。一旦它被決定發(fā)送到頁(yè)面中头镊,并沒(méi)有執(zhí)行任何編碼措施(例如使用 HTML 轉(zhuǎn)義代碼<
和 >
)來(lái)防止他們被解釋為源代碼。
這些漏洞可被攻擊者利用來(lái)改變客戶端的頁(yè)面行為魄幕,并欺騙用戶來(lái)執(zhí)行它們不知道的操作相艇,或偷取隱私信息。
為了發(fā)現(xiàn) XSS 漏洞纯陨,我們需要遵循以下原則:
我們?cè)谳斎肟蛑休斎氲奶逞浚瑴?zhǔn)確來(lái)說(shuō)是被發(fā)送的文本,用于形成在頁(yè)面中展示的信息翼抠,這是反射型漏洞靡馁。
特殊的字符沒(méi)有編碼或轉(zhuǎn)義。
源代碼表明机久,我們的輸入被集成到某個(gè)位置臭墨,其中它變成了 HTML 代碼的一部分,并且會(huì)被瀏覽器解釋膘盖。
更多
這個(gè)秘籍中胧弛,我們發(fā)現(xiàn)了反射型 XSS尤误,也就是說(shuō)這個(gè)腳本在每次我們發(fā)送請(qǐng)求時(shí),并且服務(wù)器響應(yīng)我們的惡意請(qǐng)求時(shí)都會(huì)執(zhí)行结缚。有另外一種 XSS 類型叫做“存儲(chǔ)型”损晤。存儲(chǔ)型 XSS 可能會(huì)在輸入提交之后立即展示,也可能不會(huì)红竭。但是這種輸入會(huì)儲(chǔ)存在服務(wù)器(也可能是數(shù)據(jù)庫(kù))中尤勋,它會(huì)在用戶每次訪問(wèn)儲(chǔ)存數(shù)據(jù)時(shí)執(zhí)行。
4.6 基于錯(cuò)誤的 SQL 注入識(shí)別
注入在 OWASP top 10 列表中位列第一茵宪。這包含最冰,我們會(huì)在這個(gè)秘籍中測(cè)試的漏洞:SQL 注入(SQLI),以及其它稀火。
多數(shù)現(xiàn)代 Web 應(yīng)用實(shí)現(xiàn)了某種類型的數(shù)據(jù)庫(kù)暖哨,要么本地要么遠(yuǎn)程。SQL 是最流行的語(yǔ)言凰狞,在 SQLI 攻擊中篇裁,攻擊者向表單輸入或請(qǐng)求中的其它參數(shù)注入 SQL 命令,使應(yīng)用發(fā)送修改后的請(qǐng)求赡若,來(lái)試圖不正當(dāng)使用應(yīng)用和數(shù)據(jù)庫(kù)通信达布。其中請(qǐng)求用于構(gòu)建服務(wù)器中的 SQL 語(yǔ)句。
這個(gè)秘籍中逾冬,我們會(huì)測(cè)試 Web 應(yīng)用的輸入往枣,來(lái)觀察是否含有 SQL注入漏洞。
操作步驟
登錄 DWVA 并執(zhí)行下列步驟:
訪問(wèn)
SQL Injection
粉渠。-
類似于上一章分冈,我們通過(guò)輸入數(shù)字來(lái)測(cè)試應(yīng)用的正常行為。將
User ID
設(shè)置為1霸株,并點(diǎn)擊Submit
雕沉。我們可以通過(guò)解釋結(jié)果來(lái)得出,應(yīng)用首先查詢數(shù)據(jù)庫(kù)去件,是否有 ID 等于 1 的用戶坡椒,之后返回結(jié)果。
-
下面尤溜,我們必須測(cè)試倔叼,如果我們發(fā)送一些應(yīng)用的非預(yù)期結(jié)果,會(huì)發(fā)生什么宫莱。在輸入框中輸入
1'
并提交該 ID丈攒。這個(gè)錯(cuò)誤信息告訴我們,我們修改了生成好的查詢。這并不意味著這里確實(shí)有 SQL 注入巡验,但是我們可以更進(jìn)一步际插。
返回 DWVA/SQL 注入頁(yè)面。
-
為了驗(yàn)證是否有基于錯(cuò)誤的 SQL 輸入显设,我們嘗試另一個(gè)輸入:
1''
(兩個(gè)單引號(hào))框弛。
-
現(xiàn)在,我們要執(zhí)行基本的 SQL 注入攻擊捕捂,在輸入框中輸入
' or '1'='1
并提交瑟枫。看起來(lái)我們獲取了所有數(shù)據(jù)庫(kù)中的注冊(cè)用戶。
工作原理
SQL 注入發(fā)生在輸入在用于組成數(shù)據(jù)庫(kù)查詢之前沒(méi)有校驗(yàn)的時(shí)候指攒。讓我們假設(shè)服務(wù)端的代碼(PHP)拼裝了一個(gè)請(qǐng)求慷妙,例如:
$query = "SELECT * FROM users WHERE id='".$_GET['id']. "'";
這意味著,id
參數(shù)中發(fā)送的數(shù)據(jù)會(huì)被集成進(jìn)來(lái)幽七,因?yàn)樗诓樵兝锩妗?shù)的引用替換為它的值溅呢,我們能得到:
$query = "SELECT * FROM users WHERE id='"."1". "'";
所以澡屡,當(dāng)我們發(fā)送惡意輸入,就像之前那樣咐旧,代碼行會(huì)由 PHP 解釋器讀取驶鹉,就像:
$query = "SELECT * FROM users WHERE id='"."' or '1'='1"."'";
拼接為:
$query = "SELECT * FROM users WHERE id='' or '1'='1'";
這意味著“選擇users
表中的任何條目,只要用戶id
等于空或者 1 等于 1”铣墨。然而 1 永遠(yuǎn)等于 1室埋,這就意味著所有用戶都復(fù)合條件。我們發(fā)送的第一個(gè)引號(hào)閉合了原始代碼中的做引號(hào)伊约,之后我們輸入了一些 SQL 代碼姚淆,不帶有閉合的單引號(hào),而是使用已經(jīng)在服務(wù)端代碼中該設(shè)置好的單引號(hào)屡律。
更多
SQL 攻擊比起顯式應(yīng)用的用戶名腌逢,可能導(dǎo)致更嚴(yán)重的破壞。通過(guò)利用這些漏洞超埋,攻擊者可能會(huì)通過(guò)執(zhí)行命令和提權(quán)來(lái)控制整個(gè)服務(wù)器搏讶。它也能夠提取數(shù)據(jù)庫(kù)中的所有信息,包括系統(tǒng)用戶名稱和密碼霍殴。取決于服務(wù)器和內(nèi)部網(wǎng)絡(luò)的配置媒惕,SQL 注入漏洞可能是整個(gè)網(wǎng)絡(luò)和內(nèi)部設(shè)施入侵的入口。
4.7 識(shí)別 SQL 盲注
我們已經(jīng)看到了 SQL 注入漏洞如何工作来庭。這個(gè)秘籍中妒蔚,我們會(huì)涉及到相同類型漏洞的不同變體,它不顯式任何能夠引導(dǎo)我們利用的錯(cuò)誤信息或提示。我們會(huì)學(xué)習(xí)如何識(shí)別 SQL 盲注面睛。
操作步驟
登錄 DVWA 并訪問(wèn)
SQL Injection (Blind)
絮蒿。它看起來(lái)像是我們上一章了解的 SQL 注入。在輸入框中輸入
1
并點(diǎn)擊Submit
叁鉴。-
現(xiàn)在我們首次測(cè)試
1'
土涝。我們沒(méi)有得到任何錯(cuò)誤信息,但是也沒(méi)有結(jié)果幌墓,這里可能會(huì)發(fā)生一些有趣的事情但壮。
-
我們第二次測(cè)試
1''
。ID=1
的結(jié)果顯示了常侣,這意味著上一個(gè)結(jié)果1'
產(chǎn)生了錯(cuò)誤蜡饵,并被應(yīng)用捕獲和處理掉了。很可能這里有個(gè) SQL 注入漏洞胳施,但是它是盲注溯祸,沒(méi)有顯示關(guān)于數(shù)據(jù)庫(kù)的信息,所以我們需要猜測(cè)舞肆。 -
讓我們嘗試識(shí)別焦辅,當(dāng)用戶注入永遠(yuǎn)為假的代碼會(huì)發(fā)生什么。將
1' and '1'='2
設(shè)置為用戶的 ID椿胯。'1'
永遠(yuǎn)不會(huì)等于'2'
筷登,所以沒(méi)有任何記錄符合查詢中的條件,并且沒(méi)有人惡化結(jié)果哩盲。 -
現(xiàn)在前方,嘗試當(dāng) ID 存在時(shí)永遠(yuǎn)為真的請(qǐng)求:
1' and '1'='1
。這演示了頁(yè)面上的盲注廉油。如果我們的永遠(yuǎn)為假的 SQL 注入得到了不同的響應(yīng)惠险,并且永遠(yuǎn)為真的結(jié)果得到了另一個(gè)響應(yīng),這里就存在漏洞抒线,因?yàn)榉?wù)器會(huì)執(zhí)行代碼莺匠,即使它不顯示在響應(yīng)中。
工作原理
基于錯(cuò)誤的 SQL 輸入和盲注都存在于服務(wù)端十兢,也就是漏洞的那一段趣竣。應(yīng)用在使用輸入生成數(shù)據(jù)庫(kù)查詢之前并不過(guò)濾輸入。二者的不同存在于檢測(cè)和利用上旱物。
在基于錯(cuò)誤的 SQL 注入中遥缕,我們使用由服務(wù)器發(fā)送的錯(cuò)誤來(lái)識(shí)別查詢類型,表和列的名稱宵呛。
另一方面单匣,當(dāng)我們視圖利用盲注時(shí),我們需要通過(guò)問(wèn)問(wèn)題來(lái)得到信息。例如户秤,"' and name like 'a%"
的意思是码秉,“是否存在以'a'
開(kāi)頭的用戶?”如果我們得到了負(fù)面響應(yīng)鸡号,我們會(huì)詢問(wèn)是否有以'b'
開(kāi)頭的名稱转砖。在得到正面結(jié)果之后,我們會(huì)就會(huì)移動(dòng)到第二個(gè)字符:"' and name like 'ba%"
鲸伴。所以我們會(huì)花費(fèi)很多時(shí)間來(lái)檢測(cè)和利用府蔗。
另見(jiàn)
下面的信息可能有助于更好的了解 SQL 盲注:
- https://www.owasp.org/index.php/Blind_SQL_Injection
- https://www.exploit-db.com/papers/13696/
- https://www.sans.org/reading-room/whitepapers/securecode/sqlinjection-modes-attack-defence-matters-23
4.8 識(shí)別 Cookie 中的漏洞
Cookie 是從網(wǎng)站發(fā)送的小型數(shù)據(jù)片段,它儲(chǔ)存于用戶的瀏覽器中汞窗。它們包含有關(guān)于這種瀏覽器或一些特定 Web 應(yīng)用用戶的信息姓赤。在現(xiàn)代 Web 應(yīng)用匯總,Cookie 用于跟蹤用戶的會(huì)話仲吏。通過(guò)在服務(wù)端和客戶端保存 Session ID不铆,服務(wù)器能夠同時(shí)識(shí)別由不同客戶端產(chǎn)生的不同請(qǐng)求。當(dāng)任何請(qǐng)求發(fā)送到服務(wù)器的時(shí)候裹唆,瀏覽器添加 Cookie并之后發(fā)送請(qǐng)求誓斥,服務(wù)器可以基于這個(gè) COokie 來(lái)識(shí)別會(huì)話。
這個(gè)秘籍中品腹,我們會(huì)學(xué)到如何識(shí)別一些漏洞岖食,它們?cè)试S攻擊者劫持有效用戶的會(huì)話红碑。
操作步驟
訪問(wèn) http://192.168.56.102/mutillidae/舞吭。
打開(kāi) Cookie Manager+ 并且刪除所有 Cookie。這可以防止與之前的 Cookie 產(chǎn)生混亂析珊。
現(xiàn)在羡鸥,在 Mutillidae II中,訪問(wèn)
OWASP Top 10 | A3 – Broken Authentication and Session Management | Cookies
忠寻。-
在
Cookies Manager+
中惧浴,我們會(huì)看到出現(xiàn)了兩個(gè)新的 Cookie。PHPSESSID
和showhints
奕剃。選項(xiàng)前者并點(diǎn)擊Edit
來(lái)查看所有參數(shù)衷旅。PHPSESSID
是基于 PHP 的 Web 應(yīng)用的會(huì)話默認(rèn)名稱。通過(guò)查看 Cookie 中參數(shù)值纵朋,我們可以看到它可以經(jīng)過(guò)安全和不安全的頻道(HTTP 和 HTTPS)發(fā)送柿顶。同樣,它可以被服務(wù)器讀取操软,以及被客戶端用過(guò)腳本代碼讀取嘁锯,因?yàn)樗](méi)有開(kāi)啟 HTTPOnly 標(biāo)識(shí)。這就是說(shuō),這個(gè)應(yīng)用的會(huì)話可以被劫持家乘。
工作原理
這個(gè)秘籍中蝗羊,我們檢查了 Cookie 的某些之,雖然并不像上一個(gè)那么明顯仁锯。在每次滲透測(cè)試中檢查 Cookie 的配置非常重要耀找,不正確的會(huì)話 Cookie 設(shè)置會(huì)打開(kāi)會(huì)話劫持攻擊的大門,以及錯(cuò)誤使用受信任的用戶賬戶扑馁。
如果 Cookie 沒(méi)開(kāi)啟HTTPOnly
標(biāo)識(shí)涯呻,他就可以被腳本讀取。因此腻要,如果存在跨站腳本攻擊漏洞复罐,攻擊者就能夠得到有效會(huì)話的 ID,并且使用它來(lái)模擬應(yīng)用中的真實(shí)用戶雄家。
Cookies Manager+ 中的安全屬性效诅,或者Send For Encrypted Connections Only
選項(xiàng)告訴瀏覽器只通過(guò)加密的頻道發(fā)送或接受該 Cookie(也就是說(shuō),只通過(guò) HTTPS)趟济。如果這個(gè)標(biāo)志沒(méi)有設(shè)置乱投,攻擊者可以執(zhí)行中間人攻擊(MITM),并且通過(guò) HTTP 來(lái)得到會(huì)話 Cookie顷编,這會(huì)使它顯示為純文本戚炫,因?yàn)?HTTP 是個(gè)純文本的協(xié)議。這就再次產(chǎn)生了攻擊者能夠通過(guò)持有會(huì)話 ID 來(lái)模擬有效用戶的場(chǎng)景媳纬。
更多
就像PHPSESSID
是 PHP 會(huì)話 Cookie 的默認(rèn)名稱那樣双肤,其它平臺(tái)也擁有名稱,例如:
ASP.NET_SessionId
是 ASP.NET 會(huì)話 Cookie 的名稱钮惠。JSESSIONID
是 JSP 實(shí)現(xiàn)的會(huì)話 Cookie茅糜。
OWASP 有一篇非常透徹的文章,關(guān)于保護(hù)會(huì)話 ID 和會(huì)話 Cookie素挽。
https://www.owasp.org/index.php/Session_Management_Cheat_Sheet
4.9 使用 SSLScan 獲取 SSL 和 TLS 信息
我們?cè)谀撤N程度上蔑赘,假設(shè)當(dāng)一個(gè)連接使用帶有 SSL 或 TLS 加密的 HTTPS 時(shí),它是安全的预明,而且任何試圖攔截它的攻擊者都只會(huì)得到一些無(wú)意義的數(shù)字缩赛。但是,這并不絕對(duì)正確:HTTPS 服務(wù)器需要正確配置來(lái)提供有效的加密層撰糠,并保護(hù)用戶不受 MITM 攻擊或密碼分析酥馍。一些 SSL 協(xié)議的實(shí)現(xiàn)和設(shè)計(jì)上的漏洞已經(jīng)被發(fā)現(xiàn)了,所以窗慎,我們?cè)谌魏?Web 應(yīng)用滲透測(cè)試中都要測(cè)試安全連接的強(qiáng)制性物喷。
這個(gè)秘籍中卤材,我們會(huì)使用 SSLScan,它是 Kali Linux 所包含的工具峦失,基于服務(wù)器的安全通信來(lái)分析服務(wù)器的配置文件(從客戶端的角度)扇丛。
操作步驟
OWASP BWA 虛擬機(jī)已經(jīng)配置好了 HTTPS 服務(wù)器,為了確保它正常工作尉辑,訪問(wèn) https://192.168.56.102/帆精,如果頁(yè)面沒(méi)有正常加載,你可能需要在繼續(xù)之前檢查你的配置文件隧魄。
SSLScan 是個(gè)命令行工具(內(nèi)建于 Kali)卓练,所以我們需要打開(kāi)終端。
-
基本的
sslscan
命令會(huì)提供給我們服務(wù)器的足夠信息购啄。sslscan 192.168.56.102
輸出的第一部分告訴我們服務(wù)器的配置襟企,包含常見(jiàn)的安全錯(cuò)誤配置:重協(xié)商、壓縮和 Heartbleed狮含,它是最近在一些 TLS 實(shí)現(xiàn)中發(fā)現(xiàn)的漏洞顽悼。這里,一切看起來(lái)都很好几迄。
在第二部分中蔚龙,SSLScan 會(huì)展示服務(wù)器接受的加密方式。正如我們看到的那樣映胁,它支持 SSLv3 和一些例如 DES 的方式木羹,它現(xiàn)在是不安全的。它們以紅色文字展示解孙,黃色文字代表中等強(qiáng)度的加密坑填。
最后,我們看到了首選的加密方式妆距,如果客戶端支持它穷遂,服務(wù)器會(huì)嘗試用于通信函匕。最終娱据,服務(wù)器會(huì)使用有關(guān)證書的信息。我們可以看到盅惜,它將中等強(qiáng)度的算法用于簽名中剩,并使用 RSA 弱密鑰。密鑰是弱的抒寂,因?yàn)樗挥?1024 位的長(zhǎng)度结啼,安全標(biāo)準(zhǔn)推薦至少 2048 位。
工作原理
SSLScan 通過(guò)創(chuàng)建多個(gè)到 HTTPS 的鏈接來(lái)工作屈芜,并嘗試不同的加密方式和客戶端配置來(lái)測(cè)試它接受什么郊愧。
當(dāng)瀏覽器鏈接到使用 HTTPS 的服務(wù)器時(shí)朴译,它們交換有關(guān)瀏覽器可以使用什么以及服務(wù)器支持什么的信息。之后它們?cè)谑褂酶叨葟?fù)雜的算法上達(dá)成一致属铁。如果配置不當(dāng)?shù)?HTTPS 服務(wù)器上出現(xiàn)了 MITM 攻擊眠寿,攻擊者就可以通過(guò)聲稱客戶端值支持弱加密算法來(lái)欺騙服務(wù)器,假如是 SSLv2 上的 56 位 DES焦蘑。之后攻擊者會(huì)攔截使用該算法加密的通信盯拱,通信可能會(huì)在幾天或幾小時(shí)之內(nèi)使用現(xiàn)代計(jì)算機(jī)破解。
更多
就像我們之前提到的那樣例嘱,SSLScan 能夠檢測(cè) Heartbleed狡逢,這是一個(gè)最近在 OpenSSL 實(shí)現(xiàn)中發(fā)現(xiàn)的有趣漏洞。
Heartbleed 在 2014 年四月被發(fā)現(xiàn)拼卵。它由一個(gè)緩沖區(qū)導(dǎo)致奢浑,多于允許的數(shù)據(jù)可以從內(nèi)存中讀出,這是 OpenSSL TLS 中的情況腋腮。
實(shí)際上殷费,Heartbleed 可以在任何未裝補(bǔ)丁的支持 TLS 的 OpenSSL (1.0.1 到 1.0.1f 之間)服務(wù)器上利用。它從服務(wù)器內(nèi)存中讀取 64 KB 的純文本數(shù)據(jù)低葫,這能夠重復(fù)執(zhí)行详羡,服務(wù)器上不會(huì)留下任何蹤跡或日志。這意味著攻擊者可以從服務(wù)器讀取純文本信息嘿悬,包括服務(wù)器的的私鑰或者加密正是实柠,會(huì)話 Cookie 或 HTTPS 請(qǐng)求會(huì)包含用戶的密碼或其它敏感信息。更多 Heartbleed 的信息請(qǐng)見(jiàn)維基百科:<https://en.wikipedia.org/wiki/ Heartbleed>善涨。
另見(jiàn)
SSLScan 并不是唯一從 SSL/TLS 獲取加密信息的攻擊窒盐。Kali 中也有另一個(gè)工具叫做 SSLyze 可以用作替代,并且有時(shí)候會(huì)提供額外信息給攻擊者钢拧。
sslyze --regular www.example.com
SSL/TLS 信息也可以通過(guò) OpenSSL 命令獲得:
openssl s_client -connect www2.example.com:443
4.10 查找文件包含
文件包含漏洞出現(xiàn)在開(kāi)發(fā)者使用請(qǐng)求參數(shù)的時(shí)候蟹漓,在服務(wù)端的代碼中,參數(shù)可以被用戶修改來(lái)動(dòng)態(tài)選擇加載或包含哪個(gè)頁(yè)面源内。如果服務(wù)器執(zhí)行了所包含的文件葡粒,這種漏洞可能導(dǎo)致整個(gè)系統(tǒng)的淪陷。
這個(gè)秘籍中膜钓,我們會(huì)測(cè)試 Web 應(yīng)用來(lái)發(fā)現(xiàn)是否含有文件包含漏洞嗽交。
操作步驟
登錄 DVWA 并訪問(wèn)
File Inclusion
。-
我們需要編輯 GET 參數(shù)來(lái)測(cè)試包含颂斜。讓我們嘗試
index.php
夫壁。看起來(lái)目錄中沒(méi)有
index.php
文件(或者它為空),也可能這意味著本地文件包含(LFI)可能出現(xiàn)沃疮。 -
為了嘗試 LFI盒让,我們需要了解本地真正存在的文件名稱梅肤。我們知道了 DVWA 根目錄下存在
index.php
,所以我們對(duì)文件包含嘗試目錄遍歷邑茄,將頁(yè)面遍歷設(shè)置為../../index.php
凭语。這樣我們就演示了 LFI 可能出現(xiàn),并且路徑遍歷也可能出現(xiàn)(使用
../../
撩扒,我們就遍歷了目錄樹(shù))似扔。 -
下一步是嘗試遠(yuǎn)程文件包含,包括儲(chǔ)存在另一個(gè)服務(wù)器的我呢間搓谆,而不是本地文件炒辉,由于我們的測(cè)試虛擬機(jī)并沒(méi)有連接互聯(lián)網(wǎng)(或者它不應(yīng)該聯(lián)網(wǎng),出于安全因素)泉手。我們嘗試帶有完整 URL 的本地文件黔寇,就像它來(lái)自另一個(gè)服務(wù)器那樣。我們也會(huì)嘗試包含 Vicnum 的主頁(yè)
?page=http://192.168.56.102/vicnum/index.html
斩萌,通過(guò)提供頁(yè)面的 URL 作為參數(shù)缝裤,就像下面這樣:我們能夠通過(guò)提供完整 URL 使應(yīng)用加載頁(yè)面,這意味著我們可以包含遠(yuǎn)程文件颊郎,因此憋飞,存在遠(yuǎn)程文件包含(RFI)。如果被包含文件含有服務(wù)端可執(zhí)行代碼(例如 PHP)姆吭,這種代碼會(huì)被服務(wù)端執(zhí)行榛做。因此,攻擊者可以執(zhí)行遠(yuǎn)程命令内狸,這樣的話检眯,整個(gè)系統(tǒng)很可能淪陷。
工作原理
如果我們使用 DVWA 的View Source
按鈕昆淡,我們可以看到服務(wù)端代碼是:
<?php
$file = $_GET['page']; //The page we wish to display
?>
這意味著page
變量的值直接傳給了文件名稱锰瘸,之后它被包含在代碼中。這樣昂灵,我們可以在服務(wù)端包含和執(zhí)行任何我們想要的 PHP 或 HTML 文件避凝,只要它可以通過(guò)互聯(lián)網(wǎng)訪問(wèn)。存在 RFI 漏洞的情況下倔既,服務(wù)器一定會(huì)在配置文件中打開(kāi)allow_url_fopen
和allow_url_include
恕曲。否則它只能含有本地文件包含鹏氧,如果文件包含漏洞存在的話渤涌。
更多
我們也可以使用本地文件包含來(lái)顯示主機(jī)操作系統(tǒng)的相關(guān)文件。例如把还,試著包含../../../../../../etc/passwd
实蓬,之后你就會(huì)得到系統(tǒng)用戶和它們的主目錄茸俭,以及默認(rèn) shell 的列表。
4.11 識(shí)別 POODLE 漏洞
就像上一章提到的那樣安皱,使用 SSLScan 獲得 HTTPS 參數(shù)在一些條件下是可能的调鬓,尤其是中間人攻擊者降級(jí)用于加密通信的安全協(xié)議和加密算法的時(shí)候。
POODLE 攻擊使用這種條件來(lái)將 TLS 通信降級(jí)為 SSLv3 并強(qiáng)制使用易于被攻破的加密算法(CBC)酌伊。
這個(gè)秘籍中腾窝,我們會(huì)使用 Nmap 腳本來(lái)檢測(cè)這種漏洞在測(cè)試服務(wù)器上是否存在。
準(zhǔn)備
我們需要安裝 Nmap 并下載特定為檢測(cè)此漏洞而編寫的腳本居砖。
訪問(wèn)
http://nmap.org/nsedoc/scripts/ssl-poodle.html
虹脯。下載
ssl-poodle.nse
文件。-
假設(shè)它下載到了你的 Kali 中的
/root/Downloads
中奏候。下載打開(kāi)終端并將它復(fù)制到 Nmap 的腳本目錄中:cp /root/Downloads/ssl-poodle.nse /usr/share/nmap/scripts/
操作步驟
一旦你安裝了腳本循集,執(zhí)行下列步驟:
-
打開(kāi)終端并運(yùn)行:
nmap --script ssl-poodle -sV -p 443 192.168.56.102
我們告訴了 Nmap 要掃描
192.168.56.102
(我們的 vulnerable_vm)的 443 端口,識(shí)別服務(wù)版本并在它上面執(zhí)行 ssl-poodle 腳本蔗草。一次你咒彤,我們可以斷定,服務(wù)器有漏洞咒精,因?yàn)樗试S 使用TLS_RSA_WITH_ AES_128_CBC_SHA
加密算法的 SSLv3 镶柱。
工作原理
我們下載的 Nmap 腳本和測(cè)試服務(wù)器建立了安全通信,并判斷他是否支持 SSLv3 上的 CBC 加密算法模叙。如果支持奸例,它就存在漏洞。漏洞會(huì)導(dǎo)致任何攔截的信息都能被攻擊者在很短的時(shí)間內(nèi)解密向楼。
另見(jiàn)
為了更好理解這個(gè)攻擊查吊,你可以查看一些這個(gè)加密實(shí)現(xiàn)最基本的解釋。
- M?ller, Duong, and Kotowicz, This POODLE Bites: Exploiting the SSL 3.0 Fallback, https://www.openssl.org/~bodo/ssl-poodle.pdf
- https://en.wikipedia.org/wiki/Padding_oracle_attack
- https://en.wikipedia.org/wiki/Padding_%28cryptography%29#Block_cipher_mode_of_operation