Crypto

  • 本次密码题感觉偏简单,我就做了个baaaaaag,赛后复现一下其他题目。然而baaaaaag这个题目其实也算是背包造格的模版题目。
  • 听说这个要像LitCTF的那个背包密码一样爆破个几位,但是用BKZ()规约就能秒,应该算是非预期了吧。

baaaaaag

RE

ARM-ASM

  • 这道题其实算是比较简单的,并且自从有了IDA 9.0,支持其他架构的反编译后对于ARM的逆向会更容易。但是这题开赛的时候卡了一天了,当时没有注意到自定义的base64编码QAQ,要不然第一天牢完这题还有时间牢别的题目的。

PWN

heap-Pivoting

  • 这题我做的方式并不是预期解,有用到爆破。接下来先说明一下我做的题目思路。(当时六级查分是真睡不着,就通宵打打了。)

解法1

  • 大致思路是这样的:

    • 该附件是静态编译的附件,而静态编译的该附件在可读可写段也保存着main_arenafree_hookmalloc_hook,所以还是不太需要打IO结构体
    • 先确定好这些变量的地址,之后使用unsorted_bin_attack去打global_max_fast
    • 再使用fastbin_double_free将堆块申请到存放堆地址的数组上(这部分需要利用堆地址随机偏移为0x11*才能申请到该地址,这个就需要爆破了但是当时爆破了2小时才出来QAQ,本地的话其实很快就能爆破出来的。)
    • 最后就是打free_hook,由于开启了沙箱就需要使用orw的方式,并且打free_hook需要将rsp指针从栈上迁移到堆上,在堆上写rop链。这里选用的gad_getxchg esp,edi;
  • 先来查看一下附件,会发现

解法2

  • 解法2应该是预期解法了,看别人博客是这样写的。
    • 使用unsorted_bin_attack打存放堆地址的数组,这样就可以直接编辑main_arena
    • 修改main_arena这个地址中的top_chunk,将top_chunk的值该到存放堆地址的数组上
    • 最后就是打free_hook与解法1的最后一步是一样的。