ctfhub——文件上传(无验证,前端验证,.htaccess,MIME绕过,00截断,双写后缀,文件头检测)

ctfhub 文件上传

无验证

上传一句话木马

在这里插入图片描述


在这里插入图片描述


在这里插入图片描述


访问成功显示666

在这里插入图片描述


连接蚁剑

在这里插入图片描述


得到flag
ctfhub{149641ca197038f11067df1a}

前端验证

不能直接上传

在这里插入图片描述


js前端验证,过滤在前端
所以我们可以通过直接修改前端js文件或BP改包的方式绕过
这里我们用BP
打开BP上传图片文件

在这里插入图片描述


改包并上穿

在这里插入图片描述


尝试访问成功

在这里插入图片描述


连接蚁剑

在这里插入图片描述


得到flag
ctfhub{1856388f624ce5d680835d50}

.htaccess

1.知识点
(1)先简单介绍一下.htaccess文件:

.htaccess文件 (或者"分布式配置文件"),全称是Hypertext Access(超文本入口)。
它提供了针对目录改变配置的方法, 即,在一个特定的文档目录中放置一个包含一个或多个指令的文件, 以作用于此目录及其所有子目录。
作为用户,所能使用的命令受到限制。
管理员可以通过Apache的AllowOverride指令来设置。
.htaccess文件是用于apache服务器下的控制文件访问的配置文件,因此Nginx下是不会生效的
.htaccess可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档、文件的跳转等功能。

(2).htaccess 文件上传漏洞原理:

一般.htaccess可以用来留后门和针对黑名单绕过
创建一个txt写入
AddType application/x-httpd-php .png
打开另存为
保存类型为所有文件
让 png 解析为 php
还可以把png改成其他图片格式~例如jpeg、gif等等…(不写png等格式就是把所有文件都当作php文件运行下文用的就是没加的)

另外,还有一个知识~(此题没用到这部分知识)
可以在.htaccess 加入php解析规则
类似于把文件名包含10的解析成php

<FilesMatch “10”>
SetHandler application/x-httpd-php


10.png 就会以php执行

2.解题过程
上传.htaccess文件

SetHandler application/x-httpd-php 
在这里插入图片描述


在这里插入图片描述


改名10.php为10.png(后缀随便改,甚至可以不要)
上传10.png

在这里插入图片描述


尝试访问

在这里插入图片描述


连接蚁剑

在这里插入图片描述


ctfhub{50b77605fedde0a1ea0176f7}

MIME绕过

1.知识点

MIME((Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。
它是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问的时候,浏览器会自动使用指定应用程序来打开。
多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式每个MIME类型由两部分组成,前面是数据的大类别,例如声音 audio、图象 Image等,后面定义具体的种类。

常见的MME类型,例如:
超文本标记语言文本 .html,html text/htm
普通文本 .txt text/plain
RTF文本. rtf application/rtf
GIF图形 .gif image/gif
JPEG图形 . jpg image/jpeg

2.解题过程
打开BP上传10.png并抓包修改filename=“10.php”

filename="10.php"


原理:用Content-Type: image/png绕过了验证

连接蚁剑

在这里插入图片描述


ctfhub{ee4df7119c41310a9af2d9fe}

00截断

知识点
1.00截断(php 版本 <5.3.4 ,5.3.4 以上版本已修复该漏洞)
例如:我们上传 1.php%00.jpg 时,首先后缀名是合法的jpg格式,可以绕过前端的检测。上传到后端后,后端判断文件名后缀的函数会认为其是一个.jpg格式的文件,可以躲过白名单检测。但是在保存文件时,保存文件时C语言处理文件名的函数在遇到**%00**字符认为这是终止符,于是丢弃后面的 .jpg,于是我们上传的 1.php%00.jpg 文件最终会被写入 1.php 文件中并存储在服务端。

2.view-source:【网址】可以查看部分网站页面的源代码

访问view-source:http://challenge-0469f0291060dbe1.sandbox.ctfhub.com:10800/

在这里插入图片描述


代码解析
if (!empty($_POST[‘submit’])) { // 第1行:检查表单是否通过POST方法提交,并且submit按钮有值
name=basename(name = basename(name=basename(_FILES[‘file’][‘name’]); // 第2行:获取上传文件的原始文件名,使用basename()防止路径攻击
info=pathinfo(info = pathinfo(info=pathinfo(name); // 第3行:解析文件路径信息,返回包含扩展名、文件名等的数组
$ext = $info[‘extension’]; // 第4行:从数组中获取文件扩展名(如:jpg、png等)
whitelist=array("jpg","png","gif");//第5行:定义允许上传的文件类型白名单if(inarray(whitelist = array("jpg", "png", "gif"); // 第5行:定义允许上传的文件类型白名单 if (in_array(whitelist=array("jpg","png","gif");//第5行:定义允许上传的文件类型白名单if(ina​rray(ext, $whitelist)) { // 第6行:检查文件扩展名是否在白名单中
$des = $_GET[‘road’] . “/” . rand(10, 99) . date(“YmdHis”) . “.” . ext;//第7行:构造目标文件路径和文件名if(moveuploadedfile(ext; // 第7行:构造目标文件路径和文件名 if (move_uploaded_file(ext;//第7行:构造目标文件路径和文件名if(moveu​ploadedf​ile(_FILES[‘file’][‘tmp_name’], $des)) { // 第8行:将临时文件移动到目标位置
echo “”; // 第10行:上传失败提示
}
} else {
echo “文件类型不匹配”; // 第12行:文件类型不符合要求的提示
}
}

php知识点:
1.basename():移除路径信息,防止路径遍历攻击
2.pathinfo():PHP中用于解析文件路径信息的核心函数,处理文件时解析文件路径信息,返回包含扩展名、文件名等的数组
3.in_array($要搜索的值, $数组, $严格模式=false/true):PHP中检查值是否存在于数组中的核心函数,主要用于数组搜索和验证(白名单)
4.move_uploaded_file(string $临时文件名, string $目标路径)【00截断漏洞点】:PHP中专门用于移动上传文件的安全函数,它会验证文件是否通过 HTTP POST 上传,目标路径中含有00截断符导致php语言转换为c语言后目标路径的读取提前停止则不会读取截断符后面的内容,从而达到生成php文件的目的
5.

$des=$_GET['road']."/".rand(10,99).date("YmdHis").".".$ext;

详细解析
rand(10, 99):生成10-99之间的随机两位数
date(“YmdHis”):添加当前日期时间(年月日时分秒)
组合结果示例:
原始文件名:myphoto.jpg
重命名后:uploads/7820250105123456.jpg
其中:78是随机数,20250105123456是日期时间

要让一句话木马正常连接,首先要成功上传,其次要知道访问路径
这里我们发现,要成功上传,我们必须绕过if (in_array($ext, $whitelist))白名单的验证,因此上传文件的filename后缀必须是.png,.jpg或.gif(这里我们用.png)
然后我们还要能访问可运行的木马文件,所以我们要在move_uploaded_file(string $临时文件名, string $目标路径)上下功夫(因为它决定了上传文件的路径及名称),上传get参数road=/var/www/html/upload/10.php%00,变量des最终拼接为/var/www/html/upload/10.php%00/【随机两位数】【日期时间】.png
但是由于00截断C语言只读取到/var/www/html/upload/10.php,因此决定了文件生成路径为/var/www/html/upload/10.php,且文件名为10.php

做题过程:
打开BP将10.php改名为10.php%00.png然后上传并改包(这里是我一开始做的,理解不深刻,其实只要保证文件名后缀为.png就ok,文件名随便取)

ctfhub{0938059e9697d74c59e5b066}

修改get传参的road变量为/var/www/html/upload/10.php%00.png(这里是我一开始做的,理解不深刻,其实只要保证最后是%00就ok,%00后面有什么都不影响,空着都行)
这是最关键步骤,看不懂请仔细看本文php知识点
尝试访问10.php

在这里插入图片描述


连接蚁剑

在这里插入图片描述


得到flag

双写后缀

查看提示

在这里插入图片描述


后端会识别php并清除
因此如果我们上传10.php,那么php会被清除,则上传的文件名为10.

在这里插入图片描述

但是如果我们上传10.pphphp,那么清除php,上传的文件为10.php反而符合要求
上传10.pphphp

在这里插入图片描述


访问10.php

在这里插入图片描述


连接蚁剑

在这里插入图片描述


在这里插入图片描述


ctfhub{9917d39dece53262fea66d35}

文件头检测

文件头检测会检查文件的文件头签名(也称之为魔术数字,Magic Number),即文件开头的特定字节序列,还会检查报文的MIME值,用来判断文件的真实类型。为了成功上传PHP Webshell,我们需要在文件内容前添加图片格式的文件头,从而欺骗服务器的检查机制。
由于它检测文件头,因此我们要制作合适的文件头
这里我们用010制作含png或gif的文件头的一句话木马
PNG文件的文件头89 50 4E 47
GIF: 文件头标识为0X47 0X49 0X46 0X38 0X39 0X61(GIF89a)或0X47 0X49 0X46 0X38 0X37 0X61(GIF87a)

在这里插入图片描述
在这里插入图片描述


BP抓包上传含png或gif的文件头的一句话木马,
改包的Content-Type以及filename

在这里插入图片描述


连接蚁剑

在这里插入图片描述


ctfhub{23c12d2fe705cbc160bd6b9b}

当然你也可以找一个正常的图片
用txt方式编辑,在后面写入一句话木马,然后改包上传,也可以成功

在这里插入图片描述

Read more

Flutter 组件 flutter_cache_cleaner 适配鸿蒙 HarmonyOS 实战:磁盘空间治理,构建高性能缓存生命周期管理与自动清理架构

Flutter 组件 flutter_cache_cleaner 适配鸿蒙 HarmonyOS 实战:磁盘空间治理,构建高性能缓存生命周期管理与自动清理架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 flutter_cache_cleaner 适配鸿蒙 HarmonyOS 实战:磁盘空间治理,构建高性能缓存生命周期管理与自动清理架构 前言 在鸿蒙(OpenHarmony)生态迈向多端轻量化运行、涉及海量多媒体缓存及持久化数据治理的背景下,如何实现存储空间的“敏捷回收”,已成为决定应用长效运行稳定性与系统流畅度的核心架构命题。在鸿蒙设备这类强调“超级终端”高效协同、但部分边缘设备(如智能穿戴、车载传感器)存储资源受限的环境下,如果应用依然无节制地堆积网络图片缓存、临时日志及离线数据库快照,由于由于磁盘配额的紧张,极易由于由于“存储空间不足(Disk Low)”导致系统的写保护异常。 我们需要一种能够深度扫描应用沙箱、支持全量/差异化清理且具备“零样板代码”调用的存储治理方案。 flutter_cache_cleaner 为 Flutter 开发者引入了“自动化空间管理”

By Ne0inhk
Flutter 三方库 google_maps_flutter 的鸿蒙化适配指南 - 实现全球化地图能力集成、支持多样化标记与多模式渲染逻辑

Flutter 三方库 google_maps_flutter 的鸿蒙化适配指南 - 实现全球化地图能力集成、支持多样化标记与多模式渲染逻辑

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 google_maps_flutter 的鸿蒙化适配指南 - 实现全球化地图能力集成、支持多样化标记与多模式渲染逻辑 前言 在进行 Flutter for OpenHarmony 的全球化(Global)应用开发时,google_maps_flutter 是集成地理位置服务的首选。虽然在中国大陆市场,高德、百度地图更为常用,但对于需要出海、面向全球鸿蒙用户的开发者来说,适配 Google Maps 至关重要。本文将探讨如何在鸿蒙系统下利用该库的核心能力构建强大的地图应用。 一、原理解析 / 概念介绍 1.1 基础原理 google_maps_flutter 采用了典型的“外置渲染(External Rendering)”模式。

By Ne0inhk
【AIGC】ChatGPT保护指令:高效提升GPTs提示词与知识库文件的安全性

【AIGC】ChatGPT保护指令:高效提升GPTs提示词与知识库文件的安全性

博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳]本文专栏: AIGC |GPTs应用实例 文章目录 * 💯前言 * 💯新建未加保护指令的GPTs * 测试获取GPTs的提示词Prompt指令与知识库文件 * 💯给GPTs添加保护指令 * 方法一 * 方法二 * 方法三 * 方法四 * 💯增强GPTs安全性的其他建议 * 💯小结 * 关于GPTs指令如何在ChatGPT上使用,请看这篇文章: 【AIGC】如何在ChatGPT中制作个性化GPTs应用详解     https://blog.ZEEKLOG.net/2201_75539691?type=blog * 关于如何使用国内AI工具复现类似GPTs效果,请看这篇文章: 【AIGC】国内AI工具复现GPTs效果详解     https://blog.ZEEKLOG.net/2201_75539691?type=blog 💯前言 在 人工智能技术快速发展 的今天,ChatGPT 以其强大的对话能力和广泛的应用场景深受关注。然而,随着其功能的广泛使用,安全性问题也逐渐浮

By Ne0inhk

从零到一:Stable Diffusion 本地部署与云端体验的终极对比

从零到一:Stable Diffusion 本地部署与云端体验的终极对比 当AI绘画从科幻概念变成触手可及的生产力工具,Stable Diffusion无疑站在了这场变革的最前沿。不同于传统设计软件对专业技能的严苛要求,也不同于Midjourney等闭源产品的"黑箱"体验,SD以开源姿态降低了创意表达的门槛。但面对本地部署的硬件挑战与云端服务的便利性,创作者们该如何选择?本文将深入拆解两种路径的实战差异,帮你找到最适合自己的AI绘画解决方案。 1. 硬件与环境的博弈:本地部署的真实成本 在理想状态下,本地部署能提供最自由的创作环境。但现实中的硬件门槛往往成为第一道拦路虎。不同于普通图形软件对CPU的依赖,Stable Diffusion的核心算力来自GPU的CUDA核心,这直接决定了生成速度与图像质量的上限。 显存容量与生成效率的量化关系: 显卡型号显存容量512x512图像生成时间支持最高分辨率GTX 10606GB45-60秒768x768RTX 306012GB8-12秒1024x1024RTX 308010GB5-8秒1536x1536RTX 409024GB2

By Ne0inhk