2019 西湖论剑 | pwn wp

story

  • 保护 : full relro , stack canary , nx
  • 程序流程 :
    • 获取用户 id | id 处输出时 有格式化字符串漏洞点
    • 获取 故事内容 | 此处输入特别的size , 可以造成栈溢出
  • 利用过程:
      1. 通过格式化字符串 leak canary 和 libc地址
      1. 通过输入大于 0x80 或者 int64_min 的 size来造成栈溢出
      1. 栈溢出 system("/bin/sh") getshell
  • exp

noinfoleak

  • 保护 : patial relro | nx | canary
  • 程序流程:
    • add
    • delete
    • edit
  • 漏洞点
    • delete 处 free 后指针未置为0
  • 利用过程:
    1. 使用fastbin attack 中的 double free( 此处没有真的free两次去触发,因为可以直接使用edit来控制被free的chunk的 fd) 来 控制 指针数组 的内容
    1. 控制指针数组的内容为 free@got puts@got , 修改free@got 为 puts@plt + 6 , 从而使用free进行infoleak , 得到libc相关值
    1. 控制 free@got 为 system , 然后用预留的 /bin/sh 完成 getshell
  • exp

storm note

  • 这题基本是完全参考师傅的wp写的,练习了 off-by-one-null-byte 的利用 并且了解了 large bin attack
  • 这题的利用手段拓展了利用的思路,在此之前我只想过根据现有的chunk条件来构造Arbitrary Alloc(double free , house of spirt .....) , 没想到过在利用过程中完成对chunk条件的满足,从而Arbitrary Alloc
  • (参考链接)https://ch4r1l3.github.io/2018/08/15/large-bin-attack-%E5%AD%A6%E4%B9%A0%E8%AE%B0%E5%BD%95/#more
  • 保护 : nx , pie , stack canary 功能分析:
    • 新增一个指定大小的chunk (0 - 0xffff)
    • delete
      • free 一个指定chunk 并且将相关指针和数字置为空
    • edit
      • 根据指定 idx 的 chunk 的 size(add中输入) 来进行edit
        • 此处存在漏洞 , *(ptr + input_size) = 0 | off by one null byte
    • backdoor
      • 程序初始化时在指定地址读入 0x30 长度的随机字符串 , 如果我们的输入与该地址上0x30 长度的字符串相同即可执行 system("/bin/sh")
  • 利用过程:
    • 这个道题目开启了 pie , stack canary , nx , 并且没有leak点,所以常规手段行不通。有后门函数 ,通过 large bin attack 完成 Arbitrary Alloc 来控制指定地址的内容,从而满足后门函数的条件
      1. 使用 off-by-one-null-byte 进行shrink chunk 从而达到 chunk overlap , 最终可以进行堆溢出,控制指定chunk的内容
      1. 使用 large bin attack 来控制指定地址内容
      1. 使用后门函数 getshell
  • exp

你可能感兴趣的:(2019 西湖论剑 | pwn wp)