是否可以使用 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
.
相对应的一般错误
我目前正在研究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
.