2024ciscn-AWDP复现

前引
参考:https://zhuanlan.zhihu.com/p/714123601
修补包示例
- update.sh
1 |
|
- 打包命令
1 | tar zcvf update.tar.gz update.sh pwn_fix |
anime
FIX
- 格式化字符串一眼顶真
改printf
为puts
Break
patchelf
- 题目的坑点其实在于你无法运行程序,因为
libcrypto.so.1.1
缺少libdl.so.2,libpthread.so.0,因此无法运行。
我们可以先按照正常的 patchelf
来修改pwn文件
1 | patchelf --set-interpreter /home/downbeat/tools/glibc-all-in-one/libs/2.31-0ubuntu9.17_amd64/ld-linux-x86-64.so.2 ./pwn |
然后我尝试patchelf修改 libcrypto.so.1.1
却显示不行
不过无伤大雅,pwn的执行路径修改为2.31-0ubuntu9.17_amd64目录下,我们将 libcrypto.so.1.1也放进该目录下就可以了:
1 | cp libcrypto.so.1.1 /home/downbeat/tools/glibc-all-in-one/libs/2.31-0ubuntu9.17_amd64 |
就可以正常运行了。
EXP
- 题目保护全开,考虑到非栈上格式化字符串漏洞,可以选择改main函数的返回地址为ogg,因此需要泄露栈地址和libc地址,开头其实也可以泄露pie的基地址,如下:
可以填满7字节+换行符1字节,然后会打印出start的地址, -0x11E0就是pie的基地址(但是没用到)
1 | sla("name\n",'a'*7) |
在
readline()
中,会对输入的数据进行 AES解密,然后才传递给 printf,所以发送数据之前要进行AES加密只给了三次格式化字符串漏洞的机会,泄露栈地址和libc就需要一次,修改ret_addr为ogg的话需要四次(低两字节+中两字节),但是好在我们可以先用两次机会修改
i
的值,因为i也在栈上,修改为我们想要的数值即可,然后就是正常的修改了没有远程环境,直接打的本地,见EXP吧:
1 | from pwn import * |
ezheap
FIX
- 标题: 2024ciscn-AWDP复现
- 作者: D0wnBe@t
- 创建于 : 2025-03-07 18:29:47
- 更新于 : 2025-03-15 21:56:42
- 链接: http://downbeat.top/2025/03/07/2024ciscn-AWDP复现/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论