安全测试===sqlmap(零)转载
本文轉(zhuǎn)自:https://blog.werner.wiki/sqlmap-study-notes-0/
感謝作者的整理,如有侵權(quán),立刪
?
零、前言
這篇文章是我學(xué)習(xí)Sqlmap的用法時(shí)做的筆記,記錄了Sqlmap的常見、基礎(chǔ)用法。 學(xué)習(xí)的主要方法是閱讀官方手冊(cè)(sqlmap/doc/README.pdf)。
一、Sqlmap是什么
Sqlmap是開源的自動(dòng)化SQL注入工具,由Python寫成,具有如下特點(diǎn):
- 完全支持MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access、IBM DB2、SQLite、Firebird、Sybase、SAP MaxDB、HSQLDB和Informix等多種數(shù)據(jù)庫(kù)管理系統(tǒng)。
- 完全支持布爾型盲注、時(shí)間型盲注、基于錯(cuò)誤信息的注入、聯(lián)合查詢注入和堆查詢注入。
- 在數(shù)據(jù)庫(kù)證書、IP地址、端口和數(shù)據(jù)庫(kù)名等條件允許的情況下支持不通過(guò)SQL注入點(diǎn)而直接連接數(shù)據(jù)庫(kù)。
- 支持枚舉用戶、密碼、哈希、權(quán)限、角色、數(shù)據(jù)庫(kù)、數(shù)據(jù)表和列。
- 支持自動(dòng)識(shí)別密碼哈希格式并通過(guò)字典破解密碼哈希。
- 支持完全地下載某個(gè)數(shù)據(jù)庫(kù)中的某個(gè)表,也可以只下載某個(gè)表中的某幾列,甚至只下載某一列中的部分?jǐn)?shù)據(jù),這完全取決于用戶的選擇。
- 支持在數(shù)據(jù)庫(kù)管理系統(tǒng)中搜索指定的數(shù)據(jù)庫(kù)名、表名或列名
- 當(dāng)數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL、PostgreSQL或Microsoft SQL Server時(shí)支持下載或上傳文件。
- 當(dāng)數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL、PostgreSQL或Microsoft SQL Server時(shí)支持執(zhí)行任意命令并回現(xiàn)標(biāo)準(zhǔn)輸出。
二、安裝Sqlmap
Sqlmap的開源項(xiàng)目,托管在github,最簡(jiǎn)單的安裝方式便是使用git,執(zhí)行如下命令:
git clone https://github.com/sqlmapproject/sqlmap.git片刻后命令執(zhí)行完畢,可以看到當(dāng)前目錄中多了一個(gè)名為“sqlmap”的目錄, 該目錄中保存著Sqlmap的Python源碼、配置文件和文檔。 由于Python是解釋執(zhí)行的語(yǔ)言,不用編譯,所以至此最新版的Sqlmap已經(jīng)安裝完成。 cd到“sqlmap”目錄中,用命令“python sqlmap”啟動(dòng)Sqlmap,如下圖所示:
當(dāng)想要更新Sqlmap時(shí),進(jìn)入到“sqlmap”目錄中執(zhí)行命令“git pull”即可。
三、輸出級(jí)別(Output verbosity)
參數(shù):-v
Sqlmap的輸出信息按從簡(jiǎn)到繁共分為7個(gè)級(jí)別(和葫蘆娃一樣多),依次為0、1、2、3、4、5和6。使用參數(shù)“-v <級(jí)別>”來(lái)指定某個(gè)等級(jí),如使用參數(shù)“-v 6”來(lái)指定輸出級(jí)別為6。默認(rèn)輸出級(jí)別為1。各個(gè)輸出級(jí)別的描述如下:
- 0:只顯示Python的tracebacks信息、錯(cuò)誤信息[ERROR]和關(guān)鍵信息[CRITICAL];
- 1:同時(shí)顯示普通信息[INFO]和警告信息[WARNING];
- 2:同時(shí)顯示調(diào)試信息[DEBUG];
- 3:同時(shí)顯示注入使用的攻擊荷載;
- 4:同時(shí)顯示HTTP請(qǐng)求;
- 5:同時(shí)顯示HTTP響應(yīng)頭;
- 6:同時(shí)顯示HTTP響應(yīng)體。
各個(gè)級(jí)別輸出的信息詳細(xì)到什么程度,還需要自己嘗試下,親眼見到,才會(huì)有明確的認(rèn)識(shí)。
四、指定目標(biāo)
Sqlmap運(yùn)行時(shí)必須指定至少一個(gè)目標(biāo),支持一次指定多個(gè)目標(biāo)。有以下幾種指定目標(biāo)的方式:
1.直接連接數(shù)據(jù)庫(kù)
參數(shù):-d
使用參數(shù)“-d”直接連接數(shù)據(jù)庫(kù),該參數(shù)后跟一個(gè)表示數(shù)據(jù)庫(kù)的字符串,該字符串有以下兩種格式:
(1).當(dāng)數(shù)據(jù)庫(kù)管理系統(tǒng)是MySQL、Oracle、Microsoft SQL Server或PostgreSQL等時(shí)格式為:
DBMS://USER:PASSWORD@DBMS_IP:DBMS_PORT/DATABASE_NAME(2).當(dāng)數(shù)據(jù)庫(kù)管理系統(tǒng)是SQLite、Microsoft Access或Firebird等時(shí)格式為:
DBMS://DATABASE_FILEPATH我用如下命令連接裝在本機(jī)上的Mysql:
python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/DISSchool"卻出現(xiàn)了錯(cuò)誤,錯(cuò)誤為:
[CRITICAL] sqlmap requires 'python-pymysql' third-party library in order to directly connect to the DBMS 'MySQL'. You can download it from 'https://github.com/petehunt/PyMySQL/'. Alternative is to use a package 'python-sqlalchemy' with support for dialect 'mysql' installed意思是我沒(méi)有安裝Python連接Mysql用的第三方庫(kù)python-pymysql。雖然我安裝了python-mysqldb可以使Python連接Mysql,但顯然Sqlmap使用的是python-pymysql而不是python-mysqldb。使用如下命令安裝python-pymysql:
git clone https://github.com/petehunt/PyMySQL/cd PyMySQL/sudo python setup.py install安裝好python-pymysql后再執(zhí)行命令:
python sqlmap.py -d "mysql://root:root@127.0.0.1:3306/DISSchool"這次沒(méi)有報(bào)錯(cuò),成功的連接到了數(shù)據(jù)庫(kù)。只是除了檢測(cè)數(shù)據(jù)庫(kù)確實(shí)是Mysql版本號(hào)大于等于5.0.0之外便什么都沒(méi)有做。讓Sqlmap做點(diǎn)什么需要用其他參數(shù)指定,這些參數(shù)我們稍晚些再學(xué)習(xí)。
2.指定目標(biāo)URL
參數(shù):-u 或 --url
使用參數(shù)“-u”或“--url”指定一個(gè)URL作為目標(biāo),該參數(shù)后跟一個(gè)表示URL的字符串,可以是http協(xié)議也可以是https協(xié)議,還可以指定端口,如:
python sqlmap.py -u "http://192.168.56.102:8080/user.php?id=0"3.從Burp或WebScarab的代理日志中解析目標(biāo)
參數(shù):-l
使用參數(shù)“-l”指定一個(gè)Burp或WebScarab的代理日志文件,Sqlmap將從日志文件中解析出可能的攻擊目標(biāo),并逐個(gè)嘗試進(jìn)行注入。該參數(shù)后跟一個(gè)表示日志文件的路徑。
WebScarab我沒(méi)有用過(guò),Burp倒是常常會(huì)用。Burp默認(rèn)不記錄日志,想要記錄日志需要手動(dòng)開啟,設(shè)置方法如下圖所示:
只用勾選代理中的請(qǐng)求數(shù)據(jù)就足夠了,日志文件路徑可隨意設(shè)置,這里我設(shè)置日志文件名為proxy.log,放在用戶主目錄中。
設(shè)置瀏覽器的代理為Burp,隨便瀏覽幾個(gè)網(wǎng)頁(yè)后發(fā)現(xiàn)proxy.log竟然已經(jīng)有70多K大,查看其內(nèi)容,部分輸出如下:
werner@Yasser:~$ more proxy.log======================================================7:22:52 PM http://ocsp.digicert.com:80 [117.18.237.29]======================================================POST / HTTP/1.1Host: ocsp.digicert.comUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-SG,en-US;q=0.7,en;q=0.3Accept-Encoding: gzip, deflateContent-Length: 83Content-Type: application/ocsp-requestDNT: 1Connection: close0Q0O0M0K0I0 +�?��Pr�Tz�============================================================================================================7:23:00 PM http://blog.csdn.net:80 [47.95.49.160]======================================================GET /pyufftj/article/details/21469201 HTTP/1.1Host: blog.csdn.netUser-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8...可以看到該日志文件不僅記錄了GET參數(shù),還記錄了cookie和POST參數(shù)。現(xiàn)在使用如下命令讓Sqlmap解析該日志文件,自動(dòng)尋找目標(biāo),檢測(cè)注入漏洞:
python sqlmap.py -l ../proxy.log注意日志文件的路徑要寫正確。執(zhí)行該命令時(shí),每找到一個(gè)可能的攻擊目標(biāo),Sqlmap都會(huì)詢問(wèn)是否要檢測(cè)該目標(biāo)。,默認(rèn)回答為“Y”,想要測(cè)試該目標(biāo),直接按回車鍵就行。
當(dāng)日志較大時(shí)會(huì)有很多可能目標(biāo),雖然有詢問(wèn)機(jī)制但依舊麻煩,因?yàn)椴荒芤宦钒椿剀嚩M(jìn)行判斷。若是可以對(duì)日志進(jìn)行過(guò)濾就好了!確實(shí)是可以的,參數(shù)為“--scope”,詳情見“五.18”。
4.從站點(diǎn)地圖文件中解析目標(biāo)
參數(shù):-x
為便于搜索引擎收錄,許多網(wǎng)站專門為搜索引擎生成了xml格式的站點(diǎn)地圖,如百度Sitemap支持xml格式。Sqlmap可以直接解析xml格式的站點(diǎn)地圖,從中提取攻擊目標(biāo),對(duì)一個(gè)網(wǎng)站全方位無(wú)死角地進(jìn)行注入檢測(cè),此時(shí)使用的參數(shù)是“-x”,如:
python sqlmap.py -x http://www.6eat.com/sitemap.xml但執(zhí)行該命令的結(jié)果卻是:
[WARNING] no usable links found (with GET parameters)沒(méi)有找到有GET參數(shù)的可用鏈接。就我有限的經(jīng)驗(yàn)而言,站點(diǎn)地圖中的URL很少包含GET參數(shù),POST參數(shù)就更不用說(shuō)了。所以Sqlmap的這一功能似乎有些雞肋。
5.從文本文件中解析目標(biāo)
參數(shù):-m
參數(shù)“-u”一次只能指定一個(gè)URL,若有多個(gè)URL需要測(cè)試就顯得很不方便,我們可用將多個(gè)URL以一行一個(gè)的格式保存在文本文件中,然后使用參數(shù)“-m”,后跟該文本文件路徑,讓Sqlmap依次讀取文件中的URL作為攻擊目標(biāo)。
如我們有文件url.txt,內(nèi)容為:
www.target1.com/vuln1.php?q=foobarwww.target2.com/vuln2.asp?id=1www.target3.com/vuln3/id/1*然后可用使用如下命令讓Sqlmap測(cè)試這些URL是否存在注入漏洞:
python sqlmap.py -m url.txt同樣,執(zhí)行該命令時(shí),Sqlmap會(huì)很貼心地一個(gè)個(gè)詢問(wèn):“do you want to test this URL?”
6.從文件載入HTTP請(qǐng)求
參數(shù):-r
可以將一個(gè)HTTP請(qǐng)求保存在文件中,然后使用參數(shù)“-r”加載該文件,Sqlmap會(huì)解析該文件,從該文件分析目標(biāo)并進(jìn)行測(cè)試。
設(shè)有如下所示的HTTP請(qǐng)求保存在文件get.txt中:
GET /user.php?id=1 HTTP/1.1Host: 192.168.56.101:8080User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: zh-SG,en-US;q=0.7,en;q=0.3Accept-Encoding: gzip, deflateDNT: 1Connection: closeUpgrade-Insecure-Requests: 1則使用如下命令讓Sqlmap解析該文件,以該文件中HTTP請(qǐng)求目標(biāo)為攻擊目標(biāo)進(jìn)行測(cè)試:
python sqlmap.py -r get.txt7.將Google搜索結(jié)果作為攻擊目標(biāo)
參數(shù):-g
Sqlmap能自動(dòng)獲取Google搜索的前一百個(gè)結(jié)果,對(duì)其中有GET參數(shù)的URL進(jìn)行注入測(cè)試。當(dāng)然,所處的網(wǎng)絡(luò)環(huán)境要能訪問(wèn)Google才行。下面是Sqlmap手冊(cè)中“-g”參數(shù)的例子:
python sqlmap.py -g "inurl:\".php?id=1\""8.從配置文件中載入攻擊目標(biāo)
參數(shù):-c
使用參數(shù)“-c”指定一個(gè)配置文件(如:sqlmap.conf),Sqlmap會(huì)解析該配置文件,按照該配置文件的配置執(zhí)行動(dòng)作。配置文件中可以指定攻擊目標(biāo),實(shí)際上除了攻擊目標(biāo)外,配置文件還可以指定各種參數(shù)的值。
Sqlmap的按照目錄中有一個(gè)名為sqlmap.conf的文件,該文件是配置文件的模板,看看該文件內(nèi)容,就能明白配置文件是什么意思了。
五、請(qǐng)求
HTTP是一個(gè)復(fù)雜的協(xié)議。HTTP請(qǐng)求有很多種方法(method),可以在不同位置(GET、POST、cookie和User-Agent等)攜帶不同參數(shù)。往往只有在特定位置攜帶了特定參數(shù)以特定方法發(fā)起的請(qǐng)求才是合法有效的請(qǐng)求。Sqlmap運(yùn)行時(shí)除了需要指定目標(biāo),有時(shí)還需要指定HTTP請(qǐng)求的一些細(xì)節(jié)。下面這些參數(shù)都用于指定HTTP請(qǐng)求細(xì)節(jié)。
1.HTTP方法
參數(shù):--method
一般來(lái)說(shuō),Sqlmap能自動(dòng)判斷出是使用GET方法還是POST方法,但在某些情況下需要的可能是PUT等很少見的方法,此時(shí)就需要用參數(shù)“--method”來(lái)指定方法。如:“--method=PUT”。
2.POST數(shù)據(jù)
參數(shù):--data
該參數(shù)指定的數(shù)據(jù)會(huì)被作為POST數(shù)據(jù)提交,Sqlmap也會(huì)檢測(cè)該參數(shù)指定數(shù)據(jù)是否存在注入漏洞。如:
python sqlmap.py -u "http://192.168.56.102:8080/user.php" --data="id=0&name=werner"3.指定分隔符
參數(shù):--param-del
上一個(gè)例子中“--data”的數(shù)據(jù)“id=0&name=werner”其實(shí)由兩個(gè)部分組成:“id=0”和“name=werner”,默認(rèn)地以“&”作為分隔符。我們可以使用“--param-del”來(lái)指定分隔符,如:
python sqlmap.py -u "http://192.168.56.102:8080/user.php" --data="id=0;name=werner" --param-del=";"4.cookie
參數(shù):--cookie、--cookie-del、--drop-set-cookie和--load-cookies
有兩種情況會(huì)用到這些參數(shù):
- 要測(cè)試的頁(yè)面只有在登錄狀態(tài)下才能訪問(wèn),登錄狀態(tài)用cookie識(shí)別
- 想要檢測(cè)是否存在cookie注入
當(dāng)“--level”設(shè)置為2或更高時(shí),Sqlmap會(huì)檢測(cè)cookie是否存在注入漏洞,關(guān)于“--level”的更多信息見下文。
(1).“--cookie”和“--cookie-del”
在瀏覽器中登錄目標(biāo)網(wǎng)站后復(fù)制出維持登錄狀態(tài)的cookie,用參數(shù)“--cookie”來(lái)指定這些cookie,如:
python sqlmap.py -u "http://192.168.56.102:8080/user.php" --cookie "JSESSIONID=E5D6C8C81;NAME=werner;"與POST參數(shù)不同,cookie默認(rèn)的分隔符為“;”,想要指定cookie中的分隔符,使用參數(shù)“--cookie-del”。
(2).“--drop-set-cookie”
若HTTP響應(yīng)頭中有“Set-Cookie”,Sqlmap會(huì)自動(dòng)設(shè)置“Set-Cookie”設(shè)置的cookie,并對(duì)這些cookie進(jìn)行檢測(cè)。若不想讓Sqlmap這么做,添加參數(shù)“--drop-set-cookie”即可,這樣,Sqlmap會(huì)忽略“Set-Cookie”。
(3).“--load-cookies”
該參數(shù)用于從文件中載入Netscape或wget格式的cookie。
wget可以保存和載入cookie,示例如下:
# Log in to the server. This can be done only once.wget --save-cookies cookies.txt \--post-data 'user=foo&password=bar' \http://server.com/auth.php# Now grab the page or pages we care about.wget --load-cookies cookies.txt \-p http://server.com/interesting/article.php5.User-Agent
參數(shù):--user-agent和--random-agent
默認(rèn)情況下Sqlmap發(fā)送的HTTP請(qǐng)求中的User-Agent值為:
sqlmap/1.0-dev-xxxxxxx (http://sqlmap.org)使用參數(shù)“--user-agent”可以指定一個(gè)User-Agent值。但正常的User-Agent值長(zhǎng)什么樣我們可能并不記得,所以有了參數(shù)“--random-agent”,使用該參數(shù),Sqlmap會(huì)從文件./txt/user-agents.txt中隨機(jī)地取一個(gè)User-Agent。注意,在一次會(huì)話中只有使用同一個(gè)User-Agent,并不是每發(fā)一個(gè)HTTP請(qǐng)求包,都隨機(jī)一個(gè)User-Agent。
用如下命令統(tǒng)計(jì)user-agents.txt行數(shù):
cat sqlmap/txt/user-agents.txt | wc -l結(jié)果為4211,當(dāng)然其中還包含空行、注釋等,但總的來(lái)說(shuō)該文件中存儲(chǔ)的User-Agent也有4千多個(gè)。
當(dāng)“--level”設(shè)置為3或更高時(shí),Sqlmap會(huì)檢測(cè)User-Agent是否存在注入漏洞,關(guān)于“--level”的更多信息見下文。
6.Host
參數(shù):--host
使用該參數(shù)可以手動(dòng)指定HTTP頭中的Host值。
當(dāng)“--level”設(shè)置為5或更高時(shí),Sqlmap會(huì)檢測(cè)Host是否存在注入漏洞,關(guān)于“--level”的更多信息見下文。
7.Referer
參數(shù):--referer
使用該參數(shù)可以指定HTTP頭中的Referer值。Sqlmap發(fā)送的HTTP請(qǐng)求頭部默認(rèn)無(wú)Referer字段。
當(dāng)“--level”設(shè)置為3或更高時(shí),Sqlmap會(huì)檢測(cè)Referer是否存在注入漏洞,關(guān)于“--level”的更多信息見下文。
8.額外的HTTP頭
參數(shù):--headers
使用該參數(shù)可以在Sqlmap發(fā)送的HTTP請(qǐng)求報(bào)文頭部添加字段,若添加多個(gè)字段,用“\n”分隔。如命令:
python sqlmap.py -u "http://192.168.56.101:8080/" -v 5 --headers "X-A:A\nX-B: B"發(fā)送的HTTP請(qǐng)求包為:
GET / HTTP/1.1X-B: BHost: 192.168.56.101:8080Accept-encoding: gzip,deflateX-A: AAccept: */*User-agent: sqlmap/1.1.10#stable (http://sqlmap.org)Connection: close加參數(shù)“-v 5”是為了讓Sqlamp輸出發(fā)送的HTTP請(qǐng)求包,便于我們觀察。
9.身份認(rèn)證
參數(shù):--auth-type和--auth-cred
這些參數(shù)用于進(jìn)行身份認(rèn)證。“--auth-type”用于指定認(rèn)證方式,支持以下三種身份認(rèn)證方式:
- Basic
- Digest
- NTLM
“--auth-cred”用于給出身份認(rèn)證的憑證,格式是“username:password”。
如:
python sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/basic/get_int.php?id=1" --auth-type Basic --auth-cred "testuser:testpass"10.基于證書的身份認(rèn)證
參數(shù):--auth-file
若Web服務(wù)器要求客戶端提供證書則可以使用此參數(shù)指定一個(gè)PEM格式的證書文件。我們知道SSL協(xié)議的客戶端認(rèn)證是可選的,實(shí)踐中一般都只用服務(wù)器端提供自己的證書供客戶端驗(yàn)證,很少要求客戶端提供自己的證書。
11.忽略401
參數(shù):--ignore-401
使用該參數(shù)忽略401錯(cuò)誤(未認(rèn)證)。
12.HTTP(S)代理
參數(shù):--proxy、--proxy-cred、--proxy-file和--ignore-proxy
使用參數(shù)“--proxy”來(lái)設(shè)置一個(gè)HTTP(S)代理,格式是“http(s)://url:port”。若代理需要認(rèn)證,使用參數(shù)“--proxy-cred”來(lái)提供認(rèn)證憑證,格式是“username:password”。
使用參數(shù)“--proxy-file”指定一個(gè)存儲(chǔ)著代理列表的文件,Sqlmap會(huì)依次使用文件中的代理,當(dāng)某個(gè)代理有任何連接問(wèn)題時(shí)就會(huì)被棄用而換下一個(gè)代理。
使用參數(shù)“--ignore-proxy”忽略本地代理設(shè)置。
13.Tor匿名網(wǎng)絡(luò)
參數(shù):--tor、--tor-type、--tor-port和--check-tor
不管出于什么原因,如果想要保持匿名狀態(tài)與其使用單個(gè)的HTTP(S)代理,不如安裝類似Privoxy這樣的軟件按照Tor的安裝指導(dǎo)配置一個(gè)Tor客戶端。設(shè)置好后使用參數(shù)“--tor”讓Sqlmap自動(dòng)設(shè)置使用Tor代理。
如果想要手動(dòng)指定Tor的類型和端口可以使用參數(shù)“--tor-type”和“--tor-port”,如:
--tor-type=SOCKS5 --tor-port 9050如果要求高度的匿名性可以使用參數(shù)“--check-tor”,加上該參數(shù)后Sqlmap會(huì)確保所有流量都走Tor代理,若Tor代理失效,Sqlmap會(huì)發(fā)出警告并退出。檢測(cè)方法是訪問(wèn)Are you using Tor?。
14.HTTP請(qǐng)求之間添加延遲
參數(shù):--delay
過(guò)于頻繁地發(fā)送請(qǐng)求可能會(huì)被網(wǎng)站察覺(jué)或有其他不良后果。使用參數(shù)“--delay”來(lái)指定HTTP請(qǐng)求之間的延遲,單位為秒,類型是浮點(diǎn)數(shù),如“--delay 1.5”表示延遲1.5秒。默認(rèn)是沒(méi)有延遲的。
15.超時(shí)
參數(shù):--timeout
超時(shí)時(shí)間默認(rèn)為30秒,可以用參數(shù)“--timeout”指定超時(shí)時(shí)間,如“--timeout 44.5”表示設(shè)置超時(shí)時(shí)間為44.5秒。
16.超時(shí)后最大重試次數(shù)
參數(shù):--retries
超時(shí)后Sqlmap會(huì)進(jìn)行重試,最大重試次數(shù)默認(rèn)為3,可以用參數(shù)“--retries”指定最大重試次數(shù)。
17.隨機(jī)化參數(shù)值
參數(shù):--randomize
使用該參數(shù),Sqlmap會(huì)隨機(jī)生成每次HTTP請(qǐng)求中參數(shù)的值,值的類型和長(zhǎng)度依照于原始值。
18.用正則表達(dá)式過(guò)濾代理日志
參數(shù):--scope
指定一個(gè)Python正則表達(dá)式對(duì)代理日志進(jìn)行過(guò)濾,只測(cè)試符合正則表達(dá)式的目標(biāo),如:
python sqlmap.py -l burp.log --scope="(www)?\.target\.(com|net|org)"19.避免錯(cuò)誤請(qǐng)求過(guò)多而被屏蔽
參數(shù):--safe-url、--safe-post、--safe-req和--safe-freq
有時(shí)服務(wù)器檢測(cè)到某個(gè)客戶端錯(cuò)誤請(qǐng)求過(guò)多會(huì)對(duì)其進(jìn)行屏蔽,而Sqlmap的測(cè)試往往會(huì)產(chǎn)生大量錯(cuò)誤請(qǐng)求,為避免被屏蔽,可以時(shí)不時(shí)的產(chǎn)生幾個(gè)正常請(qǐng)求以迷惑服務(wù)器。有以下四個(gè)參數(shù)與這一機(jī)制有關(guān):
- --safe-url: 隔一會(huì)就訪問(wèn)一下的安全URL
- --safe-post: 訪問(wèn)安全URL時(shí)攜帶的POST數(shù)據(jù)
- --safe-req: 從文件中載入安全HTTP請(qǐng)求
- --safe-freq: 每次測(cè)試請(qǐng)求之后都會(huì)訪問(wèn)一下的安全URL
這里所謂的安全URL是指訪問(wèn)會(huì)返回200、沒(méi)有任何報(bào)錯(cuò)的URL。相應(yīng)地,Sqlmap也不會(huì)對(duì)安全URL進(jìn)行任何注入測(cè)試。
20.關(guān)閉URL編碼
參數(shù):--skip-urlencode
Sqlmap默認(rèn)會(huì)對(duì)URL進(jìn)行URL編碼,可以使用該參數(shù)關(guān)閉URL編碼。
21.繞過(guò)CSRF保護(hù)
參數(shù):--csrf-token和--csrf-url
現(xiàn)在有很多網(wǎng)站通過(guò)在表單中添加值為隨機(jī)生成的token的隱藏字段來(lái)防止CSRF攻擊,Sqlmap會(huì)自動(dòng)識(shí)別出這種保護(hù)方式并繞過(guò)。但自動(dòng)識(shí)別有可能失效,此時(shí)就要用到這兩個(gè)參數(shù)。
“--csrf-token”用于指定包含token的隱藏字段名,若這個(gè)字段名不是常見的防止CSRF攻擊的字段名Sqlmap可能不能自動(dòng)識(shí)別出,需要手動(dòng)指定。如Django中該字段名為“csrfmiddlewaretoken”,明顯與CSRF攻擊有關(guān)。
“--csrf-url”用于從任意的URL中回收token值。若最初有漏洞的目標(biāo)URL中沒(méi)有包含token值而又要求在其他地址提取token值時(shí)該參數(shù)就很有用。
22.強(qiáng)制使用SSL
參數(shù):--force-ssl
23.在每次請(qǐng)求前執(zhí)行特定Python代碼
參數(shù):--eval
直接看例子:
python sqlmap.py -u "http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b" --eval="import hashlib;hash=hashlib.md5(id).hexdigest()"每次返送請(qǐng)求前,Sqlmap都會(huì)依據(jù)id值重新計(jì)算hash值并更新GET請(qǐng)求中的hash值
轉(zhuǎn)載于:https://www.cnblogs.com/botoo/p/8446137.html
總結(jié)
以上是生活随笔為你收集整理的安全测试===sqlmap(零)转载的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: centos7无GUI情况安装Xvfb、
- 下一篇: geoServer的安装
