type
Post
status
Published
date
slug
summary
tags
CTF
推荐
category
CTF-WP
category (1)
icon
password
comment

MISC

Baldur’s Gate 3 Complete Spell List

附件是json文件,里面全是法术名称
img
img
猜测先将法术名都提取出来,每一对{}为一行,不同的法术名用#分割
得到
img
img
将每个法术名都转化为对应的等级,这边用到了网页的爬虫
得到
img
img
可以看到是1-9的范围,想到可能是9进制,将每个数字都-1,然后转ascii
img
img
去将后面的base64解密
img
img
得到flag图片地址,去访问
Baldur’s Gate 3 Comlete Spell List
img
扫码得到flag
img
img
d3ctf{y0u_are_spells_m4ster}

WEB

d3pythonhttp

源代码审计,发现有后门,先进入
首先要绕过
找到具体的验证token的函数
关键是key是通过访问文件接收的,只要访问的文件不存在,那么key就是空,这时候就不用key加密jwt了,在线加密jwt,得到eyJhbGciOiJIUzI1NiIsImtpZCI6ImZyb250ZW5kIiwidHlwIjoiSldUIn0.eyJ1c2VybmFtZSI6InNhIiwiaXNhZG1pbiI6dHJ1ZX0.YjSeqw_-Mw5gUnoawx6NDz6DaVAulbNFOwZBgAGUEE4
img
img
第二步绕过前后端的差异
其中后端又复制了前端的请求头
其实Transfer-Encoding和Content-Length均存在的时候是以Transfer-Encoding编码方式为准,当Transfer-Encoding字段不能被解析的时候就看Content-Length,又因为前端可以解析大写的chunked,后端不行,利用这一点,我们传数据的时候用Transfer-Encoding:Chunked加上对应的Content-Length字段,使传给前端的数据是完整的数据,传给后端的只是Content-Length字段长度的数据
最后一步是pickle反序列化,因为不能出网和返回结果,我们写马,利用
去得到回显的数据,得到pickle反序列化脚本
这个脚本中的payload的意思是,会将后端的/路由重导到test函数中,传入cmd参数就可以命令执行了。
完整的发包
img
img
去访问/backend路由,传入cmd参数就可以命令执行了
img
img

stack_overflow

分析一下源代码,是模拟了一个栈的操作,看到了eval函数,我们关键是要将注入代码让eval执行,分析代码逻辑之后发现,read方法能读取28个,但是栈中初始的0只有20个,刚好覆盖掉[[short - 3]],而本来[[short - 3]]是被送到eval里去执行的
现在利用栈溢出将[[short - 3]]改成js的代码执行就可以了,加
DASCTF20242024西湖论剑
Loading...