题目链接: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");![Untitled (2)](Untitled (2).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 * |