sqlmap使用手冊

關於sqlmap

sqlmap支援包括mysql、Oracle、SQL Server、MariaDB、DB2、Sql Lite、Access等諸多主流的DBMS,可用於五種不同類型的SQL注入,分別是:1.布爾型盲注(boolean-based blind)、2.時間型盲注(time-based blind)、3.報錯型注入(error-based)、4.聯合查詢注入(UNION query)、5.堆疊查詢注入。前面寫過一篇sqli-labs1-38關手注的文章,提到過這幾種注入類型。

用法

探測指定的url是否存在注入點

sqlmap -u "//sqlilabs.com/Less-1/?id=1"

如圖是sqli-labs第一關的測試結果,可以看到參數id存在注入漏洞,id為GET型,一共存在4種類型的注入,有boolean-based blind,error-based,time-based blind,UNION query,並且把payload也顯示了出來。另外識別出我們的DBMS為MySQL且版本大於5.0,作業系統為Windows,web容器為Apache2.4.23 ,PHP版本為5.2.17。

在獲得注入點後,可以進一步獲取有關資料庫的敏感資訊

獲取資料庫相關的敏感資訊

常用:
當前資料庫:--current-db
查看所有資料庫:--dbs
資料庫當前用戶:--current-user
查看資料庫所有用戶:--users
查看資料庫所有角色:--roles
查看當前用戶是否是管理員:--is-dba
指定資料庫爆出所有表:-D <database> --tables
指定資料庫的表爆出所有的列:-D <database> -T <table> --columns
指定資料庫的表的列爆出該列所有數據:-D <database> -T <table> -C <column> --dump
獲取全部數據:--all(通常不建議,會產生大量請求獲取有用和無用的數據)
獲取DBMS詳細版本:--banner
獲取伺服器主機名:--hostname
列出和破解DBMS用戶密碼哈希:--passwords
列出DBMS所有用戶許可權:--privileges

其他開關和選項

指定輸出詳細程度:-v (0~6,3為最佳選擇,可以知道payload)
直連資料庫:-d
指定url:-u
從文件中載入http請求:-r(POST型通常抓包保存到txt中)
匿名注入:--tor

指定腳本進行繞過:--tamper=<腳本名>--tamper="腳本1,腳本2,..."
設置檢測級別:--level(1~5等級越高,檢測注入點的範圍越大;大於2會測試http cookie頭部,大於3會測試http UserAgent/Refer頭部)
設置風險等級:--risk(1~3,默認1對大多數注入點測試沒有風險,級別2會添加大量基於時間盲注測試語句,級別3會添加or類型的布爾型盲注測試)
指定sql注入技術:--technique <x>(b、e、u、s、t、q分別代表:布爾盲注、報錯注入、聯合查詢注入、堆疊注入、時間型盲注、內聯查詢注入)
設置時間盲注延遲相應秒數:--time-sec <time> (默認為5)
指紋識別:--fingerprint-f(獲取更精準的識別結果使用-b即–banner)

讀取伺服器文件系統的文件:--file-read <伺服器文件路徑>
想伺服器上傳文件:--file-write--file-dest<本地文件路徑>(可以是文本文件或二進位文件,例如上傳一個一句話木馬或nc.exe)
接管作業系統:--os-cmd--os-shell(可以在伺服器上運行命令)
嘗試識別後端waf/ips(如果有):--identify-waf
使用http參數污染:--hpp(一種繞過waf/ips防護的方法)
跳過檢測waf/ips:--skip-waf
偽裝成移動設備:--mobile
啟動互動式的sqlmap shell:--shell
使用短助記符:-z 後跟以雙引號包圍的以逗號分隔的每個選項和開關的短助記符的形式,從而可以避免寫一長串的選項和開關

主要參考了sqlmap的用戶手冊中文版,用戶手冊真的好,寫的很清晰很詳細,學到了很多選項的用法,感謝作者、感謝譯者!