谈一谈PHP中关于非法参数名传参问题

在CTF中有些时候GETPOST等方法传参中参数名可能存在一些非法字符导致传参问题。下面讲述的也算是CTF比赛中常见的一种Trick

注意:这种Trick只能在PHP版本小于8时有效,当PHP版本大于等于8并不会出现这种转换错误

在PHP官方文档中有解释当变量名中出现空格时,PHP的处理方式
https://www.php.net/manual/zh/language.variables.external.php
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里的参数名为:$_REQUEST['mo chu.']
参数名中含有空格,可以看到当我们传入?mo chu.=xxx时,传入的参数名中点.空格都被替换为了下划线_,这样的参数名确实无法传参
在这里插入图片描述
在这里插入图片描述

$var = $_REQUEST['mo_chu.7'];

这里就有条件可以利用一个PHP8被修复的转换错误进行传参:https://github.com/php/php-src/commit//fc4d462e947828fdbeac6020ac8f34704a218834?branch=fc4d462e947828fdbeac6020ac8f34704a218834&diff=unified
PHP版本小于8时,如果参数中出现中括号[,中括号会被转换成下划线_,但是会出现转换错误导致接下来如果该参数名中还有非法字符并不会继续转换成下划线_,也就是说如果中括号[出现在前面,那么中括号[还是会被转换成下划线_,但是因为出错导致接下来的非法字符并不会被转换成下划线_

Payload如下:

?mo[chu.7=xxx

利用了如果传入的参数名出现了中括号[只替换一次的原理,使得传入的参数为:mo_chu.7
在这里插入图片描述

多做几组测试来验证参数名从左到右如果先出现中括号[会导致之后的非法字符无法替换为下划线_
在这里插入图片描述
接下来看看PHP8是否修复了这个转换错误
在这里插入图片描述
在这里插入图片描述
很明显在PHP8中这种转换错误被修复了,传入的参数名中非法字符一律全部转换为了下划线

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

末 初

谢谢老板!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值