H-game | pwn | wp

week1

babysc

  • 思路 :
    • shellcode 对应(index + 1)异或处理后再执行
  • exp

aaaaaaaaaa

  • 思路:
    • 按照逻辑 输入 超过99 个a 即可执行 system("/bin/sh")

薯片拯救世界1

  • 思路 :

    • 这道题目是一个比较flag 和 输入是否相同的判断逻辑
    • 漏洞点在 对比的长度上 , 对比的长度由输入的长度决定,所以可以单个字符进行逐个爆破,爆破难度为 256 * 0x18
    • 爆破最后一个字符时有个bug,最后一个字符手动猜测下 是 '}'
  • exp


Steins;Gate

  • 思路:
      1. 在 id 中输入 /bin/sh , 方便最后跳转
      1. 在 0x400958 位置的函数中 布置栈 满足 0x400A00 的条件
      1. 在 0x400A00 函数中 leak canary
      1. 在 0x4008F6 函数中 栈溢出跳转到后门函数执行 system("/bin/sh")
  • exp


week2

CSTW2

  • 思路 :
    • 数组指针负数溢出,可修改 got表 , 跳转至后门函数
  • exp

SteinsGate2

  • 思路 :

  • 在 上周 Steins_Gate 的基础上多开了一个 pie 保护,

  • 第一轮 leak 随机数和 canary 之后 rop返回main函数,

  • 第二轮 leak 出 codebase , 然后利用后门函数和 id getshell

  • exp


handsomeariis

  • 思路 :
    • 普通栈溢出 , 未给 libc , 需要使用 LibcSearcher 查找对应版本的 libc
  • exp

babyfmtt

  • 漏洞点:
    • offbyone | 可以触发__stack_chk_fail
    • 格式化字符串 | 任意地址读写
  • 思路:
      1. 利用 格式化字符串 修改 __stack_chk_fail@got 为 后门函数
      1. 利用 offbyone 触发 __stack_chk_fail
  • exp


week 3

nameBook

  • 漏洞点在于 edit 的堆溢出
  • 过程:
    • 1.unlink 获取读写权限
    • 2.修改 __free_hook 绕过 Full Relro 执行 system("/bin/sh")
  • exp

薯片拯救世界3

  • 漏洞点
    • uaf
  • 利用过程
    • double free 修改 puts@got 为 后门函数地址 get shell
  • exp

babytcache

  • 漏洞点: uaf
  • 利用过程:
    • 两次 double free
      • 第一次是 tcache double free , 特点是没有检查
      • 第二次 因为 tcache 被破坏的next占用,直接进入 fastbin , 进行普通的 double free , 修改got 表 getshell
  • exp

Steins;Gate3

这道题目是在 SteinsGate2 的 基础上限制了 栈溢出的输入长度,在 rbp之后只能修改4个字节, 我自己想的思路是 4个字节修改到 leave_ret ,做一个栈迁移 到前方拓展可用的栈长度即可

  • exp


week4

3x18

  • 这道题目 魔改自 pwnable 3x17
  • 参考
  • 功能流程:
    • 一次任意地址写
  • 利用过程:
      1. 修改 fini_array 再次进入 main ,触发一次任意地址写
      1. 因为 rbp 在 fini_array 附近 所以会触发 stack_canary , 劫持 _stack_chk_fail 中的一个 plt 函数,来进行无限次任意地址写
      1. 在 fini_array 中布置 getshell 的 rop链 , linux 64 的 系统调用参数 分别存储在 rax , rdi , rsi , rdx | 目标 execve("/bin/sh\x00" , null , null)
      1. 将 plt 修改到 fini_array + 8 ,通过栈迁移 执行 rop 链
  • exp

blind

  • 漏洞点 :
    • 堆溢出
  • 利用过程 :
    • unlink 造成一个 任意地址写
    • 修改 .dynamic 段中 .dynstr 的偏移 , 从而指定解析任意的libc函数
  • exp

blind2

  • 漏洞点:
  • delete 栈溢出
  • edit 堆溢出
  • 利用:
    • 思路 1:exp1
      • 利用 栈溢出 完成 x86 的 ret2dl_resolve
        • tip:
            1. 栈溢出长度较短,需要两次触发来完成整个流程或者栈迁移后一次性完成
            1. 本题中 ret2dl_resolve 的数据构造要考虑 version 的要素,需要构造 ndx 使得 version 为 null
            • [参考链接]
              (https://veritas501.space/2017/10/07/ret2dl_resolve%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/)
    • 思路 2 :exp1
      • 重复 栈溢出 , leak libc getshell

你可能感兴趣的:(H-game | pwn | wp)