日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Web應(yīng)用手工滲透測試

 JP_Morgen 2014-05-11
Web應(yīng)用手工滲透測試——用SQLMap進(jìn)行SQL盲注測試
2014-04-11     我來說兩句      
收藏    我要投稿
簡介
本文主要關(guān)注SQL注入,假設(shè)讀者已經(jīng)了解一般的SQL注入技術(shù),在我之前的文章中有過介紹,即通過輸入不同的參數(shù),等待服務(wù)器的反應(yīng),之后通過不同的前綴和后綴(suffix and prefix )注入到數(shù)據(jù)庫。本文將更進(jìn)一步,討論SQL盲注,如果讀者沒有任何相關(guān)知識儲備,建議先去wikipedia學(xué)習(xí)一下。在繼續(xù)之前需要提醒一下,如果讀者也想要按本文的步驟進(jìn)行,需要在NOWASP Mutillidae環(huán)境搭建好之后先注冊一個(gè)NOWASP Mutillidae賬號。
SQL注入前言
本文演示從web界面注入SQL命令的方法,但不會(huì)直接連接到數(shù)據(jù)庫,而是想辦法使后端數(shù)據(jù)庫處理程序?qū)⑽覀兊牟樵冋Z句當(dāng)作SQL命令去執(zhí)行。本文先描述一些注入基礎(chǔ)知識,之后講解盲注的相關(guān)內(nèi)容。
Show Time
這里我以用戶名“jonnybravo”和密碼“momma”登錄,之后進(jìn)入用戶查看頁面,位于OWASP 2013 > A1 SQL Injection > Extract data > User Info。要查看用戶信息,需要輸入用戶ID與密碼登錄,之后就可以看到當(dāng)前用戶的信息了。
如我之前的文章所提到的那樣,這個(gè)頁面包含SQL注入漏洞,所以我會(huì)嘗試各種注入方法來操縱數(shù)據(jù)庫,需要使用我之前文章提到的后綴(suffix)與前綴(prefix)的混合。這里我使用的注入語句如下:
Username: jonnybravo’ or 1=1; –
該注入語句要做的就是從數(shù)據(jù)庫查詢用戶jonnybravo,獲取數(shù)據(jù)后立刻終止查詢(利用單引號),之后緊接著一條OR語句,由于這是一條“if狀態(tài)”查詢語句,而且這里給出  “or 1=1”,表示該查詢永遠(yuǎn)為真。1=1表示獲取數(shù)據(jù)庫中的所有記錄,之后的;–表示結(jié)束查詢,告訴數(shù)據(jù)庫當(dāng)前語句后面沒有其它查詢語句了。

圖1 正常方式查看用戶信息
將payload注入后,服務(wù)器泄露了數(shù)據(jù)庫中的所有用戶信息。如圖2所示:

圖2 注入payload導(dǎo)致數(shù)據(jù)庫中所有數(shù)據(jù)泄露
至此,本文向讀者演示了一種基本SQL注入,下面筆者用BackTrack和Samurai 等滲透測試發(fā)行版中自帶的SQLmap工具向讀者演示。要使用SQLmap,只需要打開終端,輸入SQLmap并回車,如下圖所示:

如果讀者首次使用SQLmap,不需要什么預(yù)先操作。如果已經(jīng)使用過該工具,需要使用—purge-output選項(xiàng)將之前的輸出文件刪除,如下圖所示:

圖3 將SQLmap output目錄中的原輸出文件刪除
本文會(huì)演示一些比較獨(dú)特的操作。通常人們使用SQLmap時(shí)會(huì)直接指定URL,筆者也是用該工具分析請求,但會(huì)先用Burp查看請求并將其保存到一個(gè)文本文件中,之后再用SQLmap工具調(diào)用該文本文件進(jìn)行掃描。以上就是一些準(zhǔn)備工作,下面首先就是先獲取一個(gè)請求,如下所示:
1
2
3
4
5
6
7
8
9
GET /chintan/index.php?page=user-info.php&username=jonnybravo&password=momma&user-info-php-submit-button=View+Account+Details HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:27.0) Gecko/20100101 Firefox/27.0
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://localhost/chintan/index.php?page=user-info.php
Cookie: showhints=0; username=jonnybravo; uid=19; PHPSESSID=f01sonmub2j9aushull1bvh8b5
Connection: keep-alive

將該請求保存到一個(gè)文本文件中,之后發(fā)送到KALI linux中,用如下命令將該請求頭部傳給SQLmap:
SQLmap –r ~/root/Desktop/header.txt
Self-Critical Evaluation
命令中-r選項(xiàng)表示要讀取一個(gè)包含請求的文件,~/root/Desktop/header.txt表示文件的位置。如果讀者用VMware,例如在Windows上用虛擬機(jī)跑KALI,執(zhí)行命令時(shí)可能產(chǎn)生如下圖所示的錯(cuò)誤提示:

這里必須在請求頭中指定一個(gè)IP地址,使KALI linux能與XP正常通信,修改如下圖所示:

之后命令就能正常執(zhí)行了,顯示結(jié)果如下圖所示:

基本上該工具做的就是分析請求并確定請求中的第一個(gè)參數(shù),之后對該參數(shù)進(jìn)行各種測試,以確定服務(wù)器上運(yùn)行的數(shù)據(jù)庫類型。對每個(gè)請求,SQLmap都會(huì)對請求中的第一個(gè)參數(shù)進(jìn)行各種測試。
GET /chintan/index.php?page=user-info.php&username=jonnybravo&password=momma&user-info-php-submit-button=View+Account+Details HTTP/1.1
SQLmap可以檢測多種數(shù)據(jù)庫,如MySQL、Oracle SQL、PostgreSQL、Microsoft SQL Server等。
下圖是筆者系統(tǒng)中SQLmap正在對指定的請求進(jìn)行檢測時(shí)顯示的數(shù)據(jù)庫列表:

首先它會(huì)確定給定的參數(shù)是否可注入。根據(jù)本文演示的情況,我們已經(jīng)設(shè)置OWASP mutillidae的安全性為0,因此這里是可注入的,同時(shí)SQLmap也檢測到后臺數(shù)據(jù)庫DBMS可能為MYSQL。

如上圖所示,工具識別后臺數(shù)據(jù)庫可能為MYSQL,因此提示用戶是否跳過其它類型數(shù)據(jù)庫的檢測。
“由于本文在演示之前已經(jīng)知道被檢測數(shù)據(jù)庫是MYSQL,因此這里選擇跳過對其它類型數(shù)據(jù)庫的檢測?!?br> 之后詢問用戶是否引入(include)測試MYSQL相關(guān)的所有payload,這里選擇“yes”選項(xiàng):

測試過一些payloads之后,工具已經(jīng)識別出GET參數(shù)上一個(gè)由錯(cuò)誤引起的注入問題和一個(gè)Boolean類型引起的盲注問題。

<img src=http://www./uploadfile/2014/0411/20140411100656979.png!small" title="11.png"/></p>
之后顯示該GET參數(shù)username是一個(gè)基于MYSQL union(union-based)類型的查詢注入點(diǎn),因此這里跳過其它測試,深入挖掘已經(jīng)找出的漏洞。

至此,工具已經(jīng)識別出應(yīng)該深入挖掘的可能的注入點(diǎn):

接下來,我把參數(shù)username傳遞給SQLmap工具,以對其進(jìn)行深入挖掘。通過上文描述的所有注入點(diǎn)和payloads,我們將對username參數(shù)使用基于Boolean的SQL盲注技術(shù),通過SQLmap中的–technique選項(xiàng)實(shí)現(xiàn)。其中選擇如下列表中不同的選項(xiàng)表示選用不同的技術(shù):
B : 基于Boolean的盲注(Boolean based blind)
Q : 內(nèi)聯(lián)查詢(Inline queries)
T : 基于時(shí)間的盲注(time based blind)
U : 基于聯(lián)合查詢(Union query based)
E : 基于錯(cuò)誤(error based)
S : 棧查詢(stack queries)
本例中也給出了參數(shù)名“username”,因此最后構(gòu)造的命令如下:
SQLmap –r ~root/Desktop/header.txt – -technique B – -p username – -current-user
這里-p選項(xiàng)表示要注入的參數(shù),“–current-user“選項(xiàng)表示強(qiáng)制SQLmap查詢并顯示登錄MYSQL數(shù)據(jù)庫系統(tǒng)的當(dāng)前用戶。命令得到輸出如下圖所示:

同時(shí)也可以看到工具也識別出了操作系統(tǒng)名,DBMS服務(wù)器以及程序使用的編程語言。
“”當(dāng)前我們所做的就是向服務(wù)器發(fā)送請求并接收來自服務(wù)器的響應(yīng),類似客戶端-服務(wù)器端模式的交互。我們沒有直接與數(shù)據(jù)庫管理系統(tǒng)DBMS交互,但SQLmap可以仍識別這些后臺信息。
同時(shí)本次與之前演示的SQL注入是不同的。在前一次演示SQL注入中,我們使用的是前綴與后綴,本文不再使用這種方法。之前我們往輸入框中輸入內(nèi)容并等待返回到客戶端的響應(yīng),這樣就可以根據(jù)這些信息得到切入點(diǎn)。本文我們往輸入框輸入永遠(yuǎn)為真的內(nèi)容,通過它判斷應(yīng)用程序的響應(yīng),當(dāng)作程序返回給我們的信息。“
結(jié)果分析
我們已經(jīng)給出當(dāng)前的用戶名,位于本機(jī),下面看看它在后臺做了什么。前文已經(jīng)說過,后臺是一個(gè)if判斷語句,它會(huì)分析該if查詢,檢查username為jonnybravo且7333=7333,之后SQLmap用不同的字符串代替7333,新的請求如下:
1
2
3
4
page=user-info.php?username=’jonnybravo’ AND ‘a(chǎn)’='a’ etc..FALSE
page=user-info.php?username=’jonnybravo’ AND ‘l’='l’ etc..TRUE
page=user-info.php?username=’jonnybravo’ AND ‘s’='s’ etc..TRUE
page=user-info.php?username=’jonnybravo’ AND ‘b’='b’ etc..FALSE

如上所示,第一個(gè)和最后一個(gè)查詢請求結(jié)果為假,另兩個(gè)查詢請求結(jié)果為真,因?yàn)楫?dāng)前的username是root@localhost,包含字母l和s,因此這兩次查詢在查詢字母表時(shí)會(huì)給出包含這兩個(gè)字母的用戶名。
“這就是用來與web服務(wù)器驗(yàn)證的SQL server用戶名,這種情況在任何針對客戶端的攻擊中都不應(yīng)該出現(xiàn),但我們讓它發(fā)生了。”
去掉了–current-user選項(xiàng),使用另外兩個(gè)選項(xiàng)-U和–password代替。-U用來指定要查詢的用戶名,–password表示讓SQLmap去獲取指定用戶名對應(yīng)的密碼,得到最后的命令如下:
SQLmap -r ~root/Desktop/header.txt --technique B -p username -U root@localhost --passwords
命令輸出如下圖所示:

Self-Critical Evaluation
有時(shí)可能沒有成功獲取到密碼,只得到一個(gè)NULL輸出,那是因?yàn)橄到y(tǒng)管理員可能沒有為指定的用戶設(shè)定認(rèn)證信息。如果用戶是在本機(jī)測試,默認(rèn)情況下用戶root@localhost是沒有密碼的,需要使用者自己為該用戶設(shè)置密碼,可以在MySQL的user數(shù)據(jù)表中看到用戶的列表,通過雙擊password區(qū)域來為其添加密碼。或者可以直接用下圖所示的命令直接更新指定用戶的密碼:


這里將密碼設(shè)置為“sysadmin“,這樣SQLmap就可以獲取到該密碼了,如果不設(shè)置的話,得到的就是NULL。
通過以上方法,我們不直接與數(shù)據(jù)庫服務(wù)器通信,通過SQL注入得到了管理員的登錄認(rèn)證信息。
總結(jié)
本文描述的注入方法就是所謂的SQL盲注,這種方法更繁瑣,很多情況下比較難以檢測和利用。相信讀者已經(jīng)了解傳統(tǒng)SQL注入與SQL盲注的不同。在本文所處的背景下,我們只是輸入?yún)?shù),看其是否以傳統(tǒng)方式響應(yīng),之后憑運(yùn)氣嘗試注入,與之前演示的注入完全是不同的方式。
References
1. http://en./wiki/SQL_injection
2. http://www.SQLmap.org/
3. https://github.com/SQLmapproject/SQLmap/wiki/usage
4. http://dev./doc/refman/5.6/en/examples.html
[via infosecinstitute]

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多