ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-03-21 18:59:32  阅读:297  来源: 互联网

标签:谈一谈 下划线 mo 参数 中括号 名传参 PHP 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中这种转换错误被修复了,传入的参数名中非法字符一律全部转换为了下划线

标签:谈一谈,下划线,mo,参数,中括号,名传参,PHP,php
来源: https://blog.csdn.net/mochu7777777/article/details/115050295

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有