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

Kiro 安装与上手:两种方法快速拥抱AWS新世代AI IDE

Kiro 安装与上手:两种方法快速拥抱AWS新世代AI IDE

Kiro是亚马逊 AWS 近期推出的一款备受关注的AI集成开发环境(IDE),它在竞争激烈的AI编码工具市场中,选择了一条差异化的道路。与市面上主流的、强调“即兴发挥”(Vibe Coding)的工具如Cursor不同,Kiro的核心是面向企业和专业开发者的“规范驱动开发”(Spec-Driven Development)。它的目标不仅仅是帮助开发者更快地编写代码,更是希望通过结构化的流程,引导团队产出更健壮、更易于维护的生产级软件。 以下是对Kiro的详细介绍: 📝 核心哲学:从“即兴创作”到“规范驱动” Kiro的诞生源于对当前“即兴编码”潮流的反思。许多AI工具虽然能快速生成代码,但也带来了缺乏文档、逻辑混乱、难以维护的“技术债务”问题 。Kiro的解决方案是在AI生成代码之前,引入一个严谨的规划阶段 。 其核心工作流围绕三个动态的“规范文件”展开,形成了一个“需求-设计-任务”的闭环: * requirements.md (需求):Kiro会将你的自然语言描述(无论是口头禅式的还是正式的)转化为结构化的用户故事和验收标准,通常会使用易于理解的EARS(

2026年3月18日人工智能早间新闻

各位读者,早上好。今天是2026年3月18日,星期三。欢迎收看人工智能早间新闻。昨日,从英伟达GTC大会到国内产业一线,人工智能领域释放出密集信号——算力竞赛正从地面延伸至太空,智能体加速从概念走向实干,而AI与实体经济的深度融合正在催生“超级团队”与“一人公司”的新范式。 一、国内产业纵深:“人工智能+”催生“超级团队”,智能体从概念走向实干 今年的政府工作报告首次提出打造智能经济新形态,并提出“促进新一代智能终端和智能体加快推广”“支持人工智能开源社区建设”等具体路径。在3月6日举行的经济主题记者会上,国家发改委主任郑栅洁表示,将深化“人工智能+”行动,“十五五”末人工智能相关产业规模将增长到10万亿元以上。 1. AI正从根本上释放个体能力:科大讯飞董事长刘庆峰代表指出,AI正从根本上释放个体能力,带来生产力的跃升。科大讯飞内部已涌现出一批“超级团队”,团队仅凭1名产品经理加2名前端开发人员,就完成了专家评估需15人开发3个月的任务,日产10万行高质量代码。“AI能够让一个人完成过去一个团队才能做到的事。” 刘庆峰认为,未来3至5年,AI将在数字内容、科研创新等领域持续催

Windows 使用 Codex 一直“正在思考”?一招解决 AI 工具代理问题(附一键切换脚本)

📚 目录 一、问题背景:Codex 一直“正在思考”却没有回答 二、第一步:查看本机代理端口 三、第二步:测试代理是否可用 四、第三步:给 Codex App 配置代理 五、让 Codex 代理配置生效 六、验证代理是否生效 七、如何取消代理配置 八、代理配置是否会影响国内软件 九、开发者推荐的代理配置方式 十、完整流程总结 一、问题背景 最近在 Windows 上使用 Codex 时遇到了一个很奇怪的问题: 输入问题后,界面一直显示: 正在思考 但是 没有任何回答。 最开始以为是: * Codex Bug * API Key

OpenClaw 浏览器控制终极方案 - 让 AI 助手随时控制你的浏览器:

OpenClaw 浏览器控制终极方案 - 让 AI 助手随时控制你的浏览器:

🚀 懒人版:你可能都不用看这篇文章 直接把这篇文章发给 Claude Code,让它帮你执行就行了。它会:创建一个 Chrome Debug 浏览器实例配置好所有参数 然后去 OpenClaw 的 bot 里告诉它: "更新下身份信息:当前你需要去查询信息资料、联网之类的,优先使用已经可以打开的可调试浏览器实例去控制打开搜索等。比如: 使用 --browser-profile mydebug 来控制已打开的浏览器实例。" 搞定!🎉 一个被忽视的痛点 你有没有遇到过这样的场景: 你让 AI 助手帮你搜索信息,它打开了一个全新的浏览器窗口。 然后你发现: * 推特要重新登录 * GitHub 要重新登录 * Google 要重新登录 * 甚至有些网站直接把你当成机器人,拒绝访问 为什么? 因为 AI 助手用的是一个"干净"的浏览器环境,