发现太久没有写博客了,就放一下刚打完的被喷得怪可怜的第5**空间的一点wp吧。
立雪
edit 函数没有对size进行检测,所以可以任意长度的堆溢出
而且程序存在后门函数,unlink到0x602088修改为0xffff即可(其实最快速的做法是unsortedbin attack到0x602088
)
exp:
1 | from pwn import * |
拈花
分析函数可以知道有明显的栈溢出漏洞,直接ret2libc攻击,先puts出puts_got的真实地址然后再跳一次,回到main,再执行system函数直接getshell:
1 | #coding=utf8 |
於讴
这里输入小于0x3E7的值就可以进去一波函数,但是没什么用,虽然不知道那里是什么(直接没理会),输入大小大于0x3E7,直接退出回到main,然后直接有个栈溢出漏洞(sub_4007E2),那么和拈花一样,直接先puts出真实地址然后回跳到main,再执行system函数。
1 | #coding=utf8 |
副墨
这题有点意思,首先覆盖seed为0,写C脚本跑伪随机数:
1 |
|
跑出随机数:a = [7427,39356,9595,54062,67371,42578,92585,76990,22615,53318]
第一次写入栈中的数据大小(0x2A),这里seed的偏移为0x1c,所以可以覆盖为0:
1 | py = '' |
因为有格式化字符串漏洞,所以可以直接打印出canary和base基地址,然后就可以先puts出真实地址,然后回跳一次main,再执行system,思路和前面的差不多(这里onegadget用不了)
1 | #coding=utf8 |
正定
跟立雪基本一样,做立雪的时候傻逼了用了麻烦的unlink,其实可以直接unsortedbin attack
exp:
1 | from pwn import * |
一苇
这题也存在后门
也存在栈溢出,先自用buf没有初始化打印出代码段地址绕过PIE,之后栈溢出跳转到后门
exp:
1 | #coding:utf-8 |
坐忘
存在栈溢出,但是开启了canary ,先将canary的低位’\x00’覆盖泄漏出canary 之后就快乐溢出了,因为程序是静态编译所以ropchain一把梭,但是程序写了个base64解密,所以所有的输入都要经过base64加密
exp:
1 | from pwn import * |
玄冥
同样edit函数没有检测size大小,所以有任意大小的堆溢出,而且程序使用malloc申请堆块可以泄漏出main_arena ,之后 利用堆溢出伪造堆块将malloc_hook填写为system_addr 再调用malloc(binsh_addr)get shell
exp:
1 | from pwn import * |