天天听SQL注入,SQL注入到底是怎么注入的?

天天说SQL注入,写程序的时候要如何如何避免SQL注入,有多少人根本都不知道SQL注入是怎么注入的?

下面是SQL注入的一个简单实现步骤

首先我自己简单写了一个有SQL注入漏洞的接口用来测试

 

第一步:判断接口是否存在数据库注入漏洞

使用and 1=1,使条件成立,看接口是不是还可以正常返回数据

 

使用and 1=2,使条件不成立,看接口是不是不返回数据了,或者报错

 

 上面两个步骤达到预期结果,就说明这个接口存在SQL注入漏洞

 第二步:判断字段数

虽然看起来是返回了两个字段数据,但是SQL不一定查了两个数据,可能在程序中处理过后才返回的两个数据,所以需要判断SQL到底查询了几个字段

使用order by (一个数字)来依次请求,判断接口的SQL查询了几个字段。

先使用order by 1来试试,结果没问题

再使用order by 2 后面3 4 5,直到接口报错或者不返回数据,就说明SQL查询的字段数是前一个不报错的数字,我这里是查询的三个字段,所以到4的时候就报错了

 现在知道了SQL查询的是字段数是3

 第三步:判断回显点

回显点可以将我们输入的SQL语句执行,并返回回来

先试用and 1=2 使原SQL的条件不成立,再使用union 加上自己的SQL

 我这里是用的Oracle,mysql可以直接select 1,2,3

可以看到报错提示数据类型不匹配,那就换成下面三个试一下,一般不是number就是varchar,看第几个字段可以返回回来1。

'1',null,null 

null,'1',null 

null,null,'1'

第一个字段可以返回,说明可以在第一个字段这里写我们想查询的东西

 

 可以查询实例名

 可以查询数据库版本

 


版权声明:本文为qq_41890624原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。