祥云杯线下,断网环境下很多东西记得不是很牢固,需要自己一点点试,说明基础还是有点缺陷,需要弥补。
AWD
pwn1
程序分析
1 | unsigned __int64 magic() |
程序漏洞很明显,删除堆块时,没有将堆指针清空。然后存在一个 magic
函数,可以实现 uaf
。
利用分析
这里,我们先利用堆合并,再构造一个堆重叠。利用 fastbin attack
分配 fake_chunk
到 size_list
中,因为 size_list
中已经有了我们分配的堆块 size
。
最后getshell
,是通过覆写 got 表。
EXP
1 | from pwn import * |
pwn2
解题
blind_pwn
程序分析
这道题是一个盲pwn
,漏洞也是盲Pwn常见的格式化字符串漏洞,使用 wiki
上给的dump
二进制文件脚本。先得到文件主程序的二进制文件。结合分析后,就能够得到 read_got
和puts_got
,这样我们就能够利用格式化字符串修改 返回地址来泄露地址和覆写got
表。
利用分析
dump二进制
这里需要确定我们泄露二进制的开始地址,通常我们是从 0x400000
开始泄露。如果我们为了确认,可以多次泄露栈地址,我们会看到两个相同的 plt
地址,该地址是 lbc_start
函数的返回地址,通过它我们也可以确定我们开始泄露的地址。
修复二进制
导出的二进制,我们直接放入IDA
是很难识别的。我们需要修改其加载基址,然后我们可以通过上面泄露的返回地址,先确定main
函数的地址和start
函数的地址,最后生成部分函数段。
通过函数段,我们能够大概猜到部分系统调用的地址,这样就能够确定 got
表的地址。
getshell
盲pwn一般很少有开PIE
,而且应该是允许直接覆写got
表来getshell
。
EXP
1 | #coding=utf8 |
pwn2
程序分析
1 | unsigned __int64 __fastcall sub_B00(__int64 chunk1, unsigned int size) |
漏洞很简单,edit
函数存在 off-by-one
漏洞。
利用分析
这里用一下我看 blue_sheep
师傅很喜欢用的一个小技巧,就是在布置堆重叠时,不用繁琐的计算下一个堆块的堆头,我们直接将下一个堆块全部用 p64(0x20)+p64(0x21)
给全部填满,这样当我们修改了上一个堆块的堆头后,都不会出错。
EXP
1 | from pwn import * |
- 本文作者: A1ex
- 本文链接: http://yoursite.com/2020/12/19/2020祥云杯线下/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!