是否可以使用 mysql 浏览文件系统中的所有目录?

Is it possible to browse all directories in file system using mysql?

我目前正在研究SQL注入,我想知道是否可以在MySQL中使用SQL注入显示所有目录?我的意思是,我知道有一个 load_file() 函数可以显示文件,但是目录(它们的内容)呢?是否需要上传某种shell或者有更好的解决方案来显示所有内容?

LOAD_FILE() function 不会读取目录。它只读取常规文件。

这里有一个 link 特定的代码行,它检查您试图打开的文件是否是一个普通文件,如果不是,return 一个错误。 https://github.com/mysql/mysql-server/blob/8.0/sql/item_strfunc.cc#L3498

  if (!MY_S_ISREG(stat_info.st_mode)) {
    my_error(ER_TEXTFILE_NOT_READABLE, MYF(0), file_name->c_ptr());
    mysql_file_close(file, MYF(0));
    DBUG_ASSERT(maybe_null);
    return error_str();
  }

我们也可以演示。我创建了一个文件“/tmp/world”,并将 "hello" 一词放入其中。

我可以读取文件:

 MySQL  localhost:33060+ ssl  SQL > select load_file('/tmp/world');
+-------------------------+
| load_file('/tmp/world') |
+-------------------------+
| hello
                  |
+-------------------------+
1 row in set (0.0007 sec)

但是我无法读取目录:

 MySQL  localhost:33060+ ssl  SQL > select load_file('/tmp');
ERROR: 1085: The file '/tmp' must be in the database directory or be readable by all

这个错误并不清楚它无法读取文件的真正原因。它只是 return 与代码常量 ER_TEXTFILE_NOT_READABLE.

相对应的一般错误