這些選項可用於自定義探測階段
探測級別
--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 只有在積極啟發式的情況下才執行徹底的測試,當有大量檢測目標時,只選擇基於錯誤的檢測結果
這些選項可用於調整特定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伺服器,可以提高榨取資料的速度
這些選項可用於執行強制檢查
--common-tables 檢查常見表的存在性
--common-columns 檢查常見索引的存在性
--common-files 檢查常見檔案的存在性
這些選項可用於優化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這個引數,其他的可以看情況使用
這類選項可用於列舉表中包含的後端資料庫管理系統資訊、結構和資料
-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 檢索所有
這些選項可用於指定要測試的引數、提供自定義注入負載和可選的篡改指令碼
-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"
)
SQL注入學習筆記(2)
在做題時的一些總結 注釋 1.單行注釋 mysql中 也可以 注意 瀏覽器url中 有特殊作用,不一定能用 2.多行注釋 3.注 號在語句中變成了空格。用來和後面的單引號分隔開,將後面的語句注釋。了解原理後便知道了 無法使用的原因,是因為 與後面的單引號連線在一起,無法形成有效的mysql語句 後面...
SQL注入學習筆記
sql注入漏洞是由於sql語句的呼叫方法不完善而產生的安全隱患。一旦應用中存在sql注入漏洞,就可能造成如下影響。值得注意的是,以下影響中攻擊者都能夠直接對伺服器實施主動攻擊,而不需要使用者參與。根據資料庫引擎的不同,通過sql注入攻擊還可能會達到下列效果。sql注入攻擊能夠以開發者意想不到的方式改...
sql注入學習筆記
1.什麼是sql注入 sql注入就是指web應用程式對使用者輸入的資料的合法性沒有判斷,前端傳入後端的引數帶有資料庫查詢的語句,攻擊者可以構造不同的sql語句來實現對資料庫的操作。2.sql注入原理 sql注入漏洞產生需要滿足以下兩個條件。引數使用者可控,前端傳給後端的引數內容是使用者可以控制的 引...