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

Llama-3.2-3B部署优化:Ollama配置context window与token限制详解

Llama-3.2-3B部署优化:Ollama配置context window与token限制详解 如果你正在使用Ollama运行Llama-3.2-3B,可能会遇到这样的问题:对话聊着聊着,模型好像“失忆”了,不记得之前说了什么;或者当你输入一段稍长的文本时,直接被截断,只处理了前面一小部分。 这通常不是模型本身的问题,而是默认的上下文长度(context window)和token限制设置不够用。今天,我就来手把手教你如何调整这些关键参数,让你的Llama-3.2-3B真正“火力全开”,处理更长的对话和文档。 1. 核心概念:为什么需要调整Context Window和Token限制? 在深入操作之前,我们先花两分钟搞懂两个关键名词,这能帮你更好地理解为什么要调整,以及调整到什么程度合适。 1.1 什么是Context Window(上下文窗口)? 你可以把Context Window想象成模型的工作记忆区或“短期记忆”。它决定了模型在生成下一个词时,能“看到”并参考之前多长的文本。 * 默认情况:很多模型,包括Ollama默认拉取的Llama-3.2-3B,

人工智能:什么是AIGC?什么是AI4S?人工智能四大核心领域全景解析

人工智能:什么是AIGC?什么是AI4S?人工智能四大核心领域全景解析

文章目录 * 引言:AI 领域 “四分天下” * 一、AIGC:生成式 AI,内容创作的 “全能造物主” * 二、AI for Science(AI4S):科学智能,加速人类认知边界 * 三、CV(计算机视觉):计算机的 “眼睛”,感知世界的核心 * 四、自然语言处理(NLP):人机沟通的 “翻译官”,语言理解的巅峰 * 不同领域的协同与区别 * 结合四大领域的案例——HealthGPT 引言:AI 领域 “四分天下” 斯坦福大学 2025 年《人工智能指数报告》指出,AI 已从实验室突破全面进入社会深度应用期,形成四大核心领域支撑的技术生态。这四大领域并非孤立存在,而是相互协同、共同推动 AI 从

通义万相 2.1 与蓝耘智算平台的深度协同,挖掘 AIGC 无限潜力并释放巨大未来价值

通义万相 2.1 与蓝耘智算平台的深度协同,挖掘 AIGC 无限潜力并释放巨大未来价值

我的个人主页我的专栏:人工智能领域、java-数据结构、Javase、C语言,希望能帮助到大家!!!点赞👍收藏❤ 引言:AIGC 浪潮下的新机遇 在当今数字化飞速发展的时代,人工智能生成内容(AIGC)已成为推动各行业变革的关键力量。从创意内容的快速产出到复杂场景的智能模拟,AIGC 正以前所未有的速度改变着我们的生活和工作方式。通义万相 2.1 作为多模态 AI 生成领域的佼佼者,与蓝耘智算平台这一强大的算力支撑平台深度协同,犹如一颗耀眼的新星,在 AIGC 的浩瀚星空中熠熠生辉,为挖掘 AIGC的无限潜力和释放巨大未来价值提供了坚实的基础和广阔的空间。 一:通义万相 2.1:多模态 AI 生成的卓越典范 ***通义万相 2.1 是阿里巴巴达摩院精心打造的多模态 AI 生成模型,在图像、视频等内容生成方面展现出了令人瞩目的实力。*** 1.1 创新架构引领技术突破 1.

【提升开发效率300%】:VSCode AI Copilot自定义指令配置秘籍

第一章:VSCode AI Copilot自定义指令概述 Visual Studio Code(VSCode)中的 GitHub Copilot 不仅能自动补全代码,还支持通过自定义指令增强开发效率。这些指令允许开发者根据项目需求或团队规范,定义 AI 行为的上下文和输出风格,从而让生成的代码更贴合实际应用场景。 自定义指令的作用 * 控制代码生成的风格,例如使用函数式还是面向对象编程 * 指定默认导入的库或框架,减少重复编写样板代码 * 遵循团队命名规范或注释标准 * 在特定项目中启用领域相关的提示词(prompts) 配置自定义指令的方法 在 VSCode 中,可通过设置文件添加 Copilot 自定义指令。打开项目根目录下的 .vscode/settings.json 文件,并添加如下配置: { // 设置 AI 生成代码时使用的默认语言风格 "github.copilot.advanced": { "promptPrefix"