Detection探測
這些選項可用於自定義探測階段
探測級別
--level= 要執行的測試級別(1-5,默認爲1),數值越大,探測越詳細
檢查cookie當中的注入點level >=2
檢查user-agent,Referer的注入點Level >= 3
檢查host的注入點 Level =5
/usr/share/sqlmap/data/xml/payloads
這個目錄下面有詳細的payload
--risk= 要執行的測試的風險(1-3,默認爲1)
risk升高可能造成數據的纂改
人爲標識真假
--string= 當查詢計算爲真時匹配的字符串
--not-string= 當查詢被計算爲False時匹配的字符串
--text-only 僅根據文本內容比較頁面
--titles 僅根據標題比較頁面
--code= 當查詢被計算爲True時匹配的HTTP代碼
--regexp= 正則表達式在查詢評估爲True時匹配,這個可能會出現在比如說true返回的內容可能有幾種,通過正則匹配
--smart 只有在積極啓發式的情況下才執行徹底的測試,當有大量檢測目標時,只選擇基於錯誤的檢測結果
Techniques技巧
這些選項可用於調整特定SQL注入技術的測試
--technique= 使用的SQL注入技術(默認爲“BEUSTQ”)
B:bool基於布爾,E:error基於錯誤,U:union聯合查詢,S:Stacked堆疊查詢,T:time基於時間,Q:inline_query內聯查詢
--time-sec= 基於時間的注入檢測,延遲數據庫響應的秒數(默認爲5)
--union-cols= 測試聯合查詢SQL注入的列的範圍,默認是1-10列,隨着level提高可以到50列,如果我們只想查6-9,就用--union-cols 6-9
--union-char= 用於強制列數的字符,union查詢默認使用null,有時候null會失敗,可以手動指定比如說123這些無關緊要
--union-from= 表中使用的UNION查詢的SQL注入
有些情況下在聯合查詢中必須指定一個有效和可訪問的表名,否則聯合查詢會執行失敗,如在微軟的Access中,也就是說,某些DBMS不支持“SELECT 1,2;”這樣的語句,SELECT必須有FROM)用此參數指定這個表名,如:“–union-from=users”
下面這三種用的會少一點,瞭解一下,如果在特殊情況下可能會用上
--second-url= 結果頁面URL搜索二階響應,有些情況下可能注入的結果會在另一個頁面顯示,這時就需要指定其他的頁面
-second-req= 從文件加載二級HTTP請求
--dns-domain= 域名用於DNS泄露攻擊,攻擊者控制了某個dns服務器,可以提高榨取數據的速度
Brute force暴力
這些選項可用於運行強制檢查
--common-tables 檢查常見表的存在性
--common-columns 檢查常見索引的存在性
--common-files 檢查常見文件的存在性
Optimization優化
這些選項可用於優化sqlmap的性能
--predict-output 預測常見查詢輸出,根據檢測方法,比較返回值和統計表內容,不斷縮小檢測範圍,提高檢測效率,與--threads參數不兼容,比如說我們通過查詢結果可以判斷出數據庫是mysql,那麼就不會繼續去檢測其他類型了(依據是/usr/share/sqlmap/data/txt/common-outputs.txt)
--keep-alive 使用持續HTTP(s)連接,性能好,與proxy不兼容
--null-connection 檢索頁面長度,而不需要實際的HTTP響應體,可以降低網絡帶寬消耗
--threads= 最大併發HTTP請求數(默認爲1)
-o 打開所有優化開關
個人比較推薦使用predict這個參數,其他的可以看情況使用
Enumeration枚舉類型
這類選項可用於枚舉表中包含的後端數據庫管理系統信息、結構和數據
-b --banner 檢索數據庫管理系統的版本
--current-user 檢索數據庫管理系統的當前用戶,比如說root,這個用戶是指root@localhost裏面的這個root
--current-db 當前使用的數據庫,比如說library什麼的
--hostname 主機名,比如說我們的metaspolitable2
--is-dba dba(database administrator)判斷當前的用戶是不是管理員=
--users 枚舉數據庫的所有用戶
--passwords 枚舉數據庫用戶的密碼hash
--privileges 枚舉數據庫用戶的權限,也可以針對一個用戶進行枚舉 --privileges -U username
--roles 枚舉數據庫用戶的角色(這個如果學過數據庫應該可以理解,權限和角色的分配)
--dbs 枚舉所有的數據庫
--tables 枚舉數據庫下面的表
--columns 枚舉表裏面的索引
-D 指定數據庫的枚舉
-T 指定表的枚舉
-C 指定索引的枚舉
-U 指定用戶枚舉
--exclude-sysdbs 枚舉表時要排除DBMS系統數據庫
--count 檢索表的項數
--dump 爆DBMS數據庫表項
--dump-all 爆所有DBMS數據庫表項
--search 搜索列,表和/或數據庫名稱
--comments 在枚舉期間檢查DBMS註釋
--statements 檢索在DBMS上運行的SQL語句
-X 不枚舉的DBMS數據庫標識符
--pivot-column= 主列名稱
--schema 列舉DBMSschema
--where= 在條件下,dump表裏面的數據
--start= 首先轉儲要檢索的表條目
--stop= 要檢索的最後一個轉儲表條目
--first= 首先查詢輸出要檢索的字元
--last= 最後一個查詢輸出要檢索的字元
--sql-query= 要執行的SQL語句
--sql-shell 交互式SQL shell的提示符
--sql-file= 執行給定文件中的SQL語句
-a, --all 檢索所有
Injection注入
這些選項可用於指定要測試的參數、提供自定義注入負載和可選的篡改腳本
-p 可測試的參數,這個可以手動指定我們要測試的注入點,有的web可能在host,cookie,user-agent等存在注入點,我們可以通過這個選型進行手動指定
比如說
-p "user-agent", 這樣可以避免在level爲1下檢測不到這些注入點
--skip= 跳過給定參數的測試,跟上面的剛好是相反的,用法相同
--skip-static 跳過看起來不是動態的測試參數
--dbms= 手動指定DBMS類型,比如說--dbms="mysql"
--os= 手動指定操作系統的類型,比如說--os="linux"
--dbms-cred= DBMS身份驗證憑證(user:password)
--invalid-bignum 使用大的數字使值無效
--invalid-logical 使用邏輯操作使值無效
--invalid-string 使用隨機字符串使值無效
通常sqlmap使用負值比如說id=-13使參數取值失效,當然也可以修改爲以上幾種方式
--no-cast 在檢索結果時Sqlmap會將所有輸入轉換爲字符串類型,若遇到空值(NULL)則將其替換爲空白字符
但是在老版本的Mysql中這樣做會導致數據檢索出現問題,因此添加了“–no-cast”來告訴Sqlmap不要這樣做
--no-escape 關閉字符串轉義機制
--prefix=PREFIX 注入有效載荷前綴字符串
--suffix=SUFFIX 注入有效負載後綴字符串
這兩個主要是應對一些個別的應用,有時候可能查詢語句特別奇怪,sqlmap可能注入的payload無法正常使用,需要我們添加一些內容來使payload正常執行
--tamper= 使用給定的腳本篡改注入數據
/usr/share/sqlmap/tamper這個目錄下有一系列混淆腳本,可以自行選擇使用
下面這兩個參數我也不是很理解…網上也沒有詳細的說明
--param-exclude= RRegexp從測試中排除參數(例如。“ses”)
--param-filter= 按位置選擇可測試參數(例如:"POST")