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 + 飞书打造 7x24 小时服务器运维机器人

【大模型应用篇】用 OpenClaw + 飞书打造 7x24 小时服务器运维机器人

前言 本文基于OpenClaw,也是最近超火的可在本地运行的AI Agent网关,记录从零搭建通过飞书对话管理服务器运维机器人的全过程。该机器人支持随时随地通过飞书查看服务器状态、检索日志、管理进程,其核心机制在于:由OpenClaw将聊天平台(飞书等)的消息路由至大模型,模型调用本地工具(如Shell、文件系统、浏览器)执行相应任务,最终将结果自动返回至飞书会话中,实现自动化运维交互。 架构概览 飞书 App (WebSocket 长连接)         ↕ OpenClaw Gateway (服务器上 systemd 常驻)         ↕ AI 模型 (DeepSeek v3.2/GLM 4.7)         ↕ 服务器 Shell (受白名单限制的命令执行) 核心组件: * OpenClaw Gateway:Agent 网关,管理会话、工具调用、渠道连接 * 飞书插件:通过

By Ne0inhk

OpenClaw 新手指南:从零开始的 AI 机器人搭建完全攻略

OpenClaw 新手指南:从零开始的 AI 机器人搭建完全攻略 想随时随地通过微信、飞书、Telegram 等平台与 AI 助手对话?OpenClaw 帮你实现。 为什么选择 OpenClaw? OpenClaw 是一个开源的自托管 AI 网关,让你可以在自己服务器上运行一个 central hub,连接所有聊天平台到强大的 AI 模型(如 Claude、GPT、Pi、Kimi 等)。 核心优势: * ✅ 数据完全掌控(自托管,隐私安全) * ✅ 多平台统一管理(一个网关服务所有渠道) * ✅ 无代码扩展(通过技能系统) * ✅ 24/7 可用(开机自启动) * ✅ 日志和记忆(支持长期对话) 10个核心技巧详解 技巧 1:快速安装与配置 适用场景:

By Ne0inhk
港大用AI视频生成技术让机器人拥有“透视眼“:首次实现超视野导航

港大用AI视频生成技术让机器人拥有“透视眼“:首次实现超视野导航

这项由香港大学研究团队主导的突破性研究于2026年2月发表在计算机视觉顶级期刊上,论文编号为arXiv:2602.05827v1。该研究首次将视频生成技术引入机器人导航领域,让机器人能够在看不见目标的情况下成功找到目的地,这在夜晚等复杂环境中表现尤为出色。 想象一下,当你在一个陌生的购物中心寻找洗手间时,即使看不到目标,你也能凭借经验和常识大概推断出它可能在哪个方向。现在,香港大学的研究团队成功让机器人也具备了这种"透视"能力。他们开发的SparseVideoNav系统,能让机器人仅凭简单的指令,就能在完全陌生的环境中找到远处看不见的目标。 传统的机器人导航就像让一个近视眼的人在没有眼镜的情况下找路,它们只能依靠当前看到的景象做决定,结果经常在死胡同里打转,或者在看不清远处目标时原地打圈。更麻烦的是,现有的机器人需要非常详细的步骤指令,比如"向前走三步,然后左转,再走两步,然后右转找到红色的椅子"。这种方式在实际生活中显然不现实,因为人类更习惯给出简单的指令,比如"去找个椅子坐下"。 研究团队发现,问题的根源在于现有的机器人"目光短浅"。它们在学习时只能看到未来4到8步的情况,

By Ne0inhk
飞书机器人与Claude Code交互:从手机指令到AI处理的全自动流程

飞书机器人与Claude Code交互:从手机指令到AI处理的全自动流程

飞书机器人与Claude Code交互:从手机指令到AI处理的全自动流程 * 一、背景 * 二、实现方案概览 * 三、操作步骤 * 前置准备 * 第一步:创建并进入Claude Code容器 * 配置Claude Code使用本地模型 * 测试Claude Code是否正常工作 * 第二步:安装Python依赖 * 第三步:获取飞书应用的凭证 * 第四步:编写并运行中间件脚本 * 脚本解释 * 运行脚本 * 第五步:在飞书中与机器人对话 * 常见问题 * 总结 一、背景 在日常开发中,我们经常需要快速查询代码问题、生成文档或执行简单的编程任务。如果有一款AI助手能随时响应,就像在电脑终端前一样,那该多方便!本教程将演示如何搭建一个飞书机器人,当你在手机飞书App上发送消息时,该消息会传递给运行在电脑上的Claude Code(一个智能编码助手),Claude Code处理后将结果回复到你的飞书会话中。 通过这个方案,你可以: * 在手机上随时向AI提问编程问题。 * 让AI帮你调试

By Ne0inhk