超全球中的分号$ _COOKIE

时间:2016-06-03 19:38:59

标签: php inject superglobals

当写一个类来访问超全局时,我刚刚认识到php正在从超级全局中删除分号,这可能是出于安全原因。

e.g。将cookie值设置为<?php phpinfo(); ?>之类的值时 我可以看到一个看起来像Array ( [cookie] => <?php phpinfo() [?>] => )的变量转储,看到包含分号的字符串被拆分为两个或转发值,直到分号的第一个出现。

现在问题就在这里 如何才能通过完整的字符串?

因为我已经&#34;控制&#34;传递的变量我想记录一个例如使用unpack("H*",$booboostr)对任意有效负载进行十六进制转储。

所以这是问题二。
如何为输入创建十六进制表示?

提前感谢您提供任何提示。 问候

1 个答案:

答案 0 :(得分:0)

要完成@ Barmar的评论,如果某个部分包含&#34; =&#34;,则使用分号的任何$ _COOKIE值将被拆分为其他$ _COOKIE键,值对。否则数据将被省略。

简而言之,对于$ _COOKIE值,&#34;;&#34;会出现双重爆炸。和&#34; =&#34;调用

当客户端在(重新)以类似sg的方式发送之前修改cookie密钥firstval; foo=bar; omit-me; §$&%/&(/)=}][{ ¬½的cookie值时,它将导致$ _COOKIE数组,其中包含服务器上的以下数据而不是简单的&#34; Cookie键cookie的字符串:

$_COOKIE = Array (
  [cookie] = firstval,
  [foo] = bar,
  [§$&%/&(/)] = ][{ ¬½
);

正如您所看到的那样,omit-me将被忽略,然后考虑到上述条件,这导致一个人无法立即获得完整的字符串。

问候。