无字符数字字符串绕过

原理

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)();

无字母数字绕过脚本(异或,或构造脚本)

无字母数字绕过.php

无字母数字绕过.py

 

取反构造脚本

字符串取反.php

 

自增构造脚本

字符串自增构造.php

 

临时文件上传

临时文件上传.py

过滤引号的情况

我们可以这样用 ${%86%86%86%86^%d9%c1%c3%d2}{%86}();&%86=phpinfo 其中 “%86%86%86%86^%d9%c1%c3%d2” 为构造出的 _GET ,适合于过滤了引号的情况下使用。