SQL注入基础

基于本地搭建的phpMyAdmin和sql-labs来对sql进一步学习
1、如何判断是字符型注入还是数字型注入

方法一:

        字符型:提交and 1=1和提交 and1=2有回显(提交and 1=2时如果是字符型注入,则不能将1=2解析,就会默认为是对的,从而回显id=id的值;

如:在less-1中输入

?id=2 and 1=2

 可以看到还是返回了id=2的信息,说明1=2这个条件没有被当作数字来解释,从而可以判断less-1是字符型注入

        数字型:提交and 1=1和提交 and1=2没有回显

如:在less-2中输入

?id=2 and 1=2

 可以看到没有任何回显,这是因为将1=2解释为数字,这个条件本身是错误的,不能进行正确的回显,于是返回值为空

方法二:通过减法来判断

        id=2-1

        如果是数字型注入,则结果是2-1的结果

        如果是字符型注入,字符不能进行运算,则会输出id=2的结果

同样分别在less-1和less-2中输入

?id=2-1

 对于less-1:

其返回值为id=2的结果,可见其为字符型注入,与上面的判断结果一致

 对于less-2:

返回值为less-1的结果,说明为数字型注入

 利用phpMyadmin也可以查询到该数据库的具体内容:

2、关于闭合符

字符型需要闭合符,如下:

        $sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1"

        提交 1 and 1=1

          $sql="SELECT * FROM users WHERE id='1 and 1=1' LIMIT 0,1"

        id传入的1 and 1=1被引号包围,不能当作命令来执行

数字型则不需要闭合符来闭合:

        $sql="SELECT * FROM users WHERE id=$id LIMIT 0,1"

        提交 and 1=2

        $sql="SELECT * FROM users WHERE id=$id and 1=2 LIMIT 0,1"

        输入的内容能被当作命令来执行

字符型常见闭合方式:

 闭合方式: '        "        ')        ")         

 注释符:

--+        #        %23

 利用注释符暂时将某段程序脱离运行,让他暂时不运行

3、union联合注入

如在less-1中,尝试进行union联合注入,结果显示行数不匹配

这是因为不知道到底有前面有多少列,我们注入的列数应该与前面的列数相同才不会报错,有两个命令可以用来查询,在union命令查询前,需要先判断前面的列数是多少

group by  + 要查询的列数(不易被防火墙发现)

order by   + 要查询的列数

 如在less-1中,查询group by 10,结果显示

说明无法找到第十的列名,即没有第十列,我们逐步缩小范围,可以看到,当查询到4时依旧报错,但是查询到3时有正常的回显,即可得到,前面查询的列数为3

得到了三列,尝试查询:?id=1' union select 1,2,3--+

结果显示:

可以看到页面并没有改变,这是因为我们的命令有两行显示,第一行应显示id=1的结果,第二行显示联合查询union select 1,2,3的结果,但是我们的页面只能显示一行的结果。

如果要想页面显示联合查询的结果,那么就让第一行的显示结果不存在,即可输出第二行的显示结果。我们尝试将id改为0或者-1,可得:

就可以看到我们的回显位了,即2和3都可以回显,我们尝试查询3的回显,在3的位置上修改为database(),即可看到在password上面显示了3的回显:security

 同理2也可用来显示,如我们在2的位置查询php的版本,修改为:version(),也可得到回显

回显出来php的版本为5.7.26

但是1就没有回显,那是因为回显位只有2和3,1不能回显

4、小结:注入的顺序

(1)查找注入点

(2)判断是字符型注入还是数字型注入 and 1=1 1=2/ 3-1

(3)如果是字符型,要找到他的闭合方式 '        "        ')        ")

(4)查询列数,group by     order by

(5)查询回显位置,将id改为0或者-1

5、

查询语句:

select 列名 +from表名 +where限定语句

 拿到表名和列名:

表名集合表:tables

列名集合表:columns

所需要的表名信息:数据库information_schema——>数据表tables——>数据列table_name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值