SQL注入-字符型注入
——鲁迅曾经说过:“有数据库的地方就有SQL注入”
字符型注入
原理:
执行数据库查询,并在回显点展示。
用户可以看到数据库查询出错时的错误语句,就可以观察报错语句分析出查询语句结构,从而构造特殊的payload进行注入,并从回显点中获取想要的信息。
(与报错注入不同在拥有回显点,报错注入没有回显点需要通过错误信息查看结果)
注入方法:
根据报错的sql语句信息,查看sql语句样子,继而构造注入语句
构造单引号‘、双引号“、括号)闭合查询语句,直到报错证明注入点存在
地址栏输入 # 这类的要用16进制编码(网页传输方便的编码)
如:’#’ %23 注释
‘- -‘注释 一般用 –+ 即 – 即 –%20
(空格) %20
当输入的参数为字符串时,称为字符型。字符型和数字型最大的一个区别在于,数字型不需要单引号来闭合,而字符串一般需要通过单引号来闭合的。
例如数字型语句:
select * from table where id =3
则字符型如下:
select * from table where name=’admin’
因此,在构造payload时通过闭合单引号可以成功执行语句:
测试步骤:
(1) 加单引号:
select * from table where name=’admin’’
由于加单引号后变成三个单引号,则无法执行,程序会报错;
(2) 加 ’and 1=1 此时sql 语句为:
select * from table where name=’admin’ and 1=1’
也无法进行注入,还需要通过注释符号将其绕过;
Mysql 有三种常用注释符:
– 注意,这种注释符后边有一个空格
#通过#进行注释
/* */ 注释掉符号内的内容
因此,构造语句为:
select * from table where name =’admin’ and 1=1—’
可成功执行返回结果正确;
(3) 加and 1=2— 此时sql语句为:
select * from table where name=’admin’ and 1=2 –’
则会报错
如果满足以上三点,可以判断该url为字符型注入。