题目链接:https://github.com/0xviol1t/CTF-challenges/tree/main/2024/CISCN%E5%88%9D%E8%B5%9B
PWN
gostack
其实func2就是后门,输入很长的内容会提示unexpected return,根据返回地址判断填充长度为0x1d0,但是填充内容只能是\x00,所以本题可以填充后直接返回到func2,比赛的时候想到的是rop链,但是直接写入很长的rop链内容会被改变,所以需要一次读到bss段再迁移到bss段
1 | from pwn import * |
orange_cat_diary
堆溢出改掉top chunk size,申请的堆块大小大于top chunk,top chunk就会被链入unsorted bin并且重新映射新的top chunk,继续申请小的堆块就能切割被链入unsorted bin的前top chunk得到libc地址
1 | from pwn import * |
EzHeap
2.35开了沙箱的堆
1 | from pwn import * |
MISC
火锅链观光打卡
绑定钱包答题
Power Trajectory Diagram
1 | import numpy as np |
神秘文件
1 | 这里原来似乎有什么,后来好像被小Caesar抱走了! |
1 | UGFSdDQ6NmYtNDA= |
1 | Wow |
1 | QFCfpPQ6ZymuM3gq |
1 | c1GFSbd3Dg6BODbdl |
1 | HRSFIQp9ZwWvZj== |
1 | Vm1wR1UxRXhXWGhUV0d4WFlrZG9WMWxVUm1GWFJscHlWMjVrVmxKc2NIaFZiVFZQVkd4S2MxSnFVbGRXTTFKUVdWVmtVMDVyTVVWaGVqQTk= |
1 | PPT:UGFyVDY6ZC0y |
1 | 图片:cGFyVDk6ZGVl |
1 | i13POMdzEAzHfy4dGS+vUA==(After base64) |
REVERSE
asm_re
使用chatgpt4反编译arm汇编
1 |
|
python脚本
1 | a= [0x1fd7,0x21b7,0x1e47,0x2027, |
androidso_re
使用jeb在inspect中找到JqslHrdvtgJrRs2QAp+FEVdwRPNLswrnykD/sZMivmjGRKUMVIC/rw==
IDA中得到Cipher cipher0 = Cipher.getInstance("DES/CBC/PKCS5Padding");.png)
key:A8UdWaeq iv:Wf3DLups
通过base64、DES解码得到flag
gdb_debug
逻辑如下
1 | __int64 __fastcall main(int a1, char **a2, char **a3) |
下断点拿数据v12rand,ptr,encode1_0_1_rand
1 | encode1_0_1=[] |
whereThel1b
因为可以运行,所以通过print和其他指令辅助推理了一下,然后.so进ida继续分析
推测出单字节简单加密
上面还有疑似base相关的代码
计算输入长度的字符串,python增加输出res的代码得到异或后的值
计算base64和res,得到异或的key
说实话在知道是单字节加密的情况下并且没有变表操作,直接爆破也可以
exp思路如下 导入库后写爆破脚本一个一个爆就行 密文已经有了。一顿操作之后也可以拿到flag,当然.so进去直接拿也可以
编写脚本得到flag
1 | import base64 |
CRYPTO
古典密码
AnU7NnR4NassOGp3BDJgAGonMaJayTwrBqZ3ODMoMWxgMnFdNqtdMTM9
先解Atbash,再base64,最后栅栏得到flag
OVO
1 | from Crypto.Util.number import * |