当写一个类来访问超全局时,我刚刚认识到php正在从超级全局中删除分号,这可能是出于安全原因。
e.g。将cookie值设置为<?php phpinfo(); ?>
之类的值时
我可以看到一个看起来像Array ( [cookie] => <?php phpinfo() [?>] => )
的变量转储,看到包含分号的字符串被拆分为两个或转发值,直到分号的第一个出现。
现在问题就在这里
如何才能通过完整的字符串?
因为我已经&#34;控制&#34;传递的变量我想记录一个例如使用unpack("H*",$booboostr)
对任意有效负载进行十六进制转储。
所以这是问题二。
如何为输入创建十六进制表示?
提前感谢您提供任何提示。 问候
答案 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
将被忽略,然后考虑到上述条件,这导致一个人无法立即获得完整的字符串。
问候。