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

OpenClaw 最新功能大揭秘!2026年最火开源AI Agent迎来史诗级升级,手机变身AI终端不是梦

OpenClaw 最新功能大揭秘!2026年最火开源AI Agent迎来史诗级升级,手机变身AI终端不是梦 大家好,我是Maynor。最近开源社区彻底炸锅了——OpenClaw(前身Clawdbot/Moltbot)又一次刷屏!这个能真正“干活”的本地AI助手,在3月2日刚刚发布v2026.3.1版本,紧接着2月底的v2026.2.26也是里程碑式更新。 从外部密钥管理、线程绑定Agent,到Android深度集成、WebSocket优先传输……OpenClaw正在把“AI常驻员工”从概念变成现实。 今天这篇图文并茂的干货,带你一口气看懂最新功能、安装上手和实战价值!

【OpenClaw从入门到精通】第41篇:2026年4月最新版——从零开始搭建你的第一个安全AI助理(保姆级实战教程)

【OpenClaw从入门到精通】第41篇:2026年4月最新版——从零开始搭建你的第一个安全AI助理(保姆级实战教程)

摘要:2026年3月CNCERT联合发布《OpenClaw安全使用实践指南》后,安全部署成为OpenClaw使用的核心前提。本文针对新手及进阶用户,基于官方安全指引,提供三套实战部署方案:阿里云一键部署(新手首选)、Docker容器隔离部署(进阶推荐)、本地安全安装(测试专用),并详解阿里云百炼Coding Plan API接入流程。全文涵盖环境准备、分步实操、安全加固、问题排查等全流程,所有命令可直接复制执行,无需依赖外部代码库。通过本文,读者可零基础搭建安全隔离的OpenClaw AI助理,兼顾实用性与安全性,最低成本仅38元/年即可实现7×24小时稳定运行。 优质专栏欢迎订阅! 【OpenClaw从入门到精通】【DeepSeek深度应用】【Python高阶开发:AI自动化与数据工程实战】 【YOLOv11工业级实战】【机器视觉:C# + HALCON】【大模型微调实战:平民级微调技术全解】 【人工智能之深度学习】【AI 赋能:Python 人工智能应用实战】【数字孪生与仿真技术实战指南】 【AI工程化落地与YOLOv8/v9实战】【C#

IDEA集成AI辅助工具推荐(好用不卡顿)

IDEA里集成AI工具,核心要满足上下文感知强、响应快、不卡顿、贴合编码流程。下面按「官方原生」「第三方爆款」「国产友好」分类,覆盖代码补全、生成、重构、调试全场景,附安装和使用要点。 一、官方原生:JetBrains AI Assistant(最省心,无适配问题) 核心定位:JetBrains官方出品,深度内嵌IDEA,和编码、重构、调试流程无缝贴合 核心亮点 * 上下文理解极强:读取项目代码结构、命名规范、依赖关系,生成代码更贴合项目风格 * 全流程AI辅助:代码补全/生成、解释代码、写注释、生成测试用例、优化提交信息、排查报错 * 无额外配置:登录JetBrains账号即可用,支持多语言,不占用过多内存 * 隐私友好:代码数据默认不上传,企业可本地化部署 适用人群

Claude Code + Figma:AI 画原型完整教程,从 PRD 到设计稿只要 5 分钟

Claude Code + Figma:AI 画原型完整教程,从 PRD 到设计稿只要 5 分钟

之前我一直用 Pencil MCP 来画原型,效果还不错。最近在社区看到有人说 Claude Code + Figma MCP 的出图效果也挺好,作为 AI 辅助设计的另一条路线,就想来实测对比一下。 刚好手头有个体脂秤 App(BodyMate)要改版,正好拿这个真实项目当测试场景——用 Claude Code 把 PRD 直接变成 Figma 原型,看看 Figma 这条线的 AI 画原型体验到底怎么样。 折腾了一圈,踩完所有坑,终于摸清了 2026 年 Claude Code + Figma 的正确工作流。 读完这篇你会得到: * 3 种 Claude Code 与 Figma 协作方式的完整对比(