2024年9月第四届“长城杯”网络安全大赛 暨京津冀网络安全技能竞赛(初赛)题目复现
- 不太清楚这个比赛的题目附件能不能放出,所以就先不放出了
Crypto
RandomRSA
-
题目描述:A特工从敌方服务器获取到了一份带有hint的机密文件,请协助破解加密。
-
附件如下:
1 | import gmpy2 |
PWN
FlowerShop
- 得到附件后先查看一下保护机制,只开启了NX保护

- 然后拖入IDA静态分析一下,先查看main函数里面的内容,发现有
system函数。

- 注意到
read使用read函数可以写入user_name0x3D字节,但是user_name只有0x34个字节,这边会存在一个栈溢出的情况。

- 现在先查看一下
main函数的栈,发现user_money的栈地址比user_name栈地址更高,这样就可以栈溢出修改money的值,然后可以得到足够的money,还注意到在user_money和user_name直接存在一个src变量。通过上面的源码分析src类似于canary机制来防止栈溢出。但是这个Canary保护的值已经给泄露,该值就是pwn


- 然后到shop函数,发现购买
magic可以得到/bin/sh

- 之后发现check可以修改read可写的范围,满足条件后直接栈溢出,构造rop链


- 然后就是写exp了
1 | from pwn import * |
Kylin_Heap
- 目前还是没办法复现,先贴个别人的wp,省得之后复现还要去找别人的wp,忘了这个exp的来源了
- 学习了
unlink之后,再来看这题别人写的wp,感觉就纯纯一个堆的模版题目,利用思路:UAF对unsorted_bin攻击泄露libc的地址,然后double_free去攻击teatche劫持malloc_hook - 先来复现一下
UAF对unsorted_bin攻击泄露libc地址 - 首先使用IDA打开该二进制文件,同时运行该程序,更好的知道程序运行的逻辑
- 根据运行逻辑和菜单,可以得到符号表的大致操作

- 下面先分析
add函数的逻辑- 允许用户申请指定
1到1280字节大小的堆块,并且会把申请堆块的大小保存在qword_4060这个数组中 - 然后
malloc申请堆块 - 向堆块输入内容,但是不存在溢出的情况
- 允许用户申请指定
delete函数的逻辑:free掉指定堆块,但是这里free后指针没有置0,存在UAF漏洞

edit函数的逻辑,向堆块重新输入不大于申请过来大小的内容
show函数,输出指定堆块里面的内容

- 这题没有堆溢出,所以不能利用
off_by_one的方法来进行攻击,但是可以使用UAF和double_free的方法来利用漏洞 - 所以先使用
UAF漏洞来泄露main_arena的地址,从而泄露libc的基址,泄露libc,这里要注意由于这是高版本的堆,存在tcache,所以如果申请0x100大小的堆不会像低版本那样会释放后放入unsorted_bin,所以要申请得更大一些,比如申请0x440
1 | from pwn import * |
- 泄露出libc地址后,接下来就要使用
double free
1 | from pwn import * |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 iyheart的博客!

