sql注入讲解

1、输入1' 发现数据库报错,原因是我们的输入直接被代入到数据库查询语句里面。

2、有没有办法可以不让他报错呢?可以尝试一下构造正确的数据库语法,使之不报错。比如输入 1 and 1=1 试试

select * from wuser where id = 1 and 1=1; 1=1永远成立,id=1也是同样存在,所以这个查询不会报错,会输出正确信息。

然后尝试 id = 1 and 1=2 ,结果不显示,说明我们构造的语句成功在数据库中执行了。

3、成功执行后,仅仅是跟正常查询显示相同的内容,那有没有办法可以显示其他内容呢?我们在mysql中使用union select来实现。

union select的作用是拼接在正确数据库查询语句后面进行联合查询,union select查询的字段数一定跟主查询的字段数一致。

比如 select id ,user ,pass from wuser 这是主查询,查询的字段是3个,所以后面的union select的查询字段一定也是3个。

select * from wuser where id = 1 union select 1,2,3;

4、union select查询成功后显示的还是没有变,其原因是主查询也成功返回了结果,而页面上只显示了返回结果的第一行,因此要想看到union select的结果,需要令第一行也就是主查询的结果为空。常用的办法就是把主查询的1改成-1.

5、mysql中有几个默认自带的库和查询函数。我们就可以使用这些来查出数据库中所有的内容。

自带的函数有:database(),version(),user()

自带的库有:information_schema,此库只有mysql5.0以后的版本才有。

在之前union select显示的数字位置,将数字替换成查询

猜你喜欢

转载自www.cnblogs.com/gx991010/p/12980698.html