24-04-15
本周学习总结
全局常量声明:文章内容仅是由教程观点和自己总结获得,仅供参考。
一、[HCTF 2nd]–fmt
基础的栈上字符串格式化泄漏,通过%35$p获得__libc_start_main+231的地址,通过计算获得libc基地址,通过%39$p获得pie+0x992的地址,通过计算获得pie的基地址。
vuln3本身是无限死循环且无法退出,所以这里考虑攻击printf的got表改为system,通过fmt_payload修改got表是一次性修改好的,所以不用担心修改到一半出问题,修改完成后输入”/bin/sh\x00”完成getshell。
要注意的是一定要设置脚本环境为amd64,不然fmt_payload会报错,并且考虑网络传输问题,最好将fmt_payload的第三参数设置为short。
exp:
1 | |
flag:

二、[HCTF 2nd]–easyfmt
并不easy,3次字符串格式化漏洞的机会让我想起了阿拉丁的噩梦。
这种题的漏洞是属于非栈上的字符串格式化漏洞利用,与栈上的字符串格式化漏洞的区别就是地址任意写变的不那么方便了。对于这种题我们经常会寻找一些叫”跳板“的内存数据,类似这样:

我们都知道字符串格式化任意写的利用条件是找栈上的一个地址,向这个地址所指向的内容写值而不是改变这个地址本身,而图片红框中被指向的地址0x7ffde3d194f0与rbp只有一个字节只差,而此时rsp指向的地方正好是我们利用字符串格式化次数的一个记录变量,我们可以通过连续两次攻击来改变这个变量(先修改0x7ffde3d19440(0x7ffde3d19410位置)指向的内容到rbp-0x10(rsp位置)),此时0x7ffde3d19440指向了记录变量的位置0x7ffde3d193f0。然后修改0x7ffde3d193f0(0x7ffde3d19440)位置指向的内容,随便写一个大数字比如50进去,这样循环肯定足够了。至于怎么得到rbp的地址也好办,我们只有三次利用机会,第一次将libc基地址、rbp地址都直接暴露出来就好了,非栈上的字符串格式不影响暴露地址。
接下来就是修改rip到可执行地址了,这里为了不麻烦可以修改地址为onegadget。和上面一样的原理,不过这次比较麻烦,因为一次只能修改一个字节(修改太多还是会引起网络问题导致失败),通过多次修改0x7ffde3d19440(0x7ffde3d19410位置)指向的内容到rip,且修改一个字节后将地址+0x1,直到6个字节都被修改为止,调整记录变量为13让程序自然退出循环。
注:脚本不稳定,需要多次运行。
exp:
1 | |
Flag:

三、[HCTF 2nd]–heap2.23
如果你在做堆题时咋一看什么漏洞都没有,那就是offby系列的漏洞了,我们可以发现他在输入的时候用来readn函数,双击进去发现他需要”\n”来结束输入,并且会将”\n”也存入堆块中,这就是经典的offbyone漏洞,并且当输入到溢出一个字节时,这个溢出的字节是可控的,输入能正常结束,也不会有”\n “的产生。
首先申请多个0x18大小的小块,释放0号块并重新申请0号块来达到修改1号块的size字段为合适大小以至于我们释放1号块可以得到ubstorted bin,重新申请1号块在输入时通过”\n”结束输入保证不覆盖bk中的内容,通过show函数输出1号块内容获得libc基地址。直接申请0x60大小堆块并且释放,大概2号块的可编辑区域刚好是0x60堆块的fd地址,将malloc_hook-0x23地址输入并且申请到修改malloc_hook的地址,改malloc_hook为onegadget获得shell。
exp:
1 | |
flag:

四、[HCTF 2nd]–銀色飛行船
程序代码写的很多干扰,但是实际调试后不过是简单的uaf漏洞利用,通过大堆块申请来获得libc_base,这到题唯一的难度是他的one_gadget是直接打不通的,需要通过__realloc_hook调栈,__realloc_hook和__malloc_hook,__free_hook不同的是,__realloc_hook在被执行之前有一系列抬栈操作,通过适当的位置抬栈,可以使得栈满足one_gadget可执行,值得一提的是,这个题目版本的__realloc_hook是__malloc_hook-0x8的位置,意味着这两个hook的内容可以一起修改,将__realloc_hook中放入one_gadget的地址,然后在__malloc_hook中放入__realloc_hook的一定偏移地址,这样就可以达到抬栈并且执行one_gadget。
exp:
1 | |
flag:

五、[HCTF 2nd]–HELLO WORLD
最崩溃的一集,为什么脑抽要按0x8一次来试。
通过一定顺序获得后门地址,手动爆破溢出。
exp:
1 | |
flag:

下周习计划
| 应该要做的事情 |
线下赛
学习感受
耶?