欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 汽车 > 维修 > 安恒安全培训实习生,CTF方向面试题!

安恒安全培训实习生,CTF方向面试题!

2025/5/1 17:36:15 来源:https://blog.csdn.net/persist213/article/details/147629253  浏览:    关键词:安恒安全培训实习生,CTF方向面试题!

目均模拟真实CTF赛题,需结合动态调试与工具链(pwntools/ROPgadget/one_gadget)完成利用。

覆盖栈、堆、格式化字符串、高级堆利用、沙箱逃逸五大方向,从基础ROP到House of Apple,逐步提升对抗防护的能力。

题目1:栈溢出+ROP绕过NX与Canary

名称babyrop
描述:目标程序是一个64位ELF文件,存在栈溢出漏洞,但开启了NX和Canary保护。请获取远程服务器的shell。
考察点:Canary泄露、ROP链构造、基础栈溢出利用。
解答步骤

  1. 漏洞分析
    • 逆向发现程序在读取输入时使用gets函数,导致栈溢出。

    • 输入长度超过缓冲区后,可以覆盖Canary和返回地址。

  2. 利用思路
    • 通过溢出泄露Canary值,绕过栈保护。

    • 构造ROP链调用system("/bin/sh")绕过NX。

  3. EXP关键代码
    from pwn import *
    p = process('./babyrop')
    payload = b'A'*offset_canary + p64(canary) + b'A'*8 + rop_chain
    p.sendline(payload)
    p.interactive()
    

详细解答

  • 使用%p格式字符串泄露Canary(或通过逐字节爆破)。

  • 利用ROPgadget查找pop rdi; retsystem地址,拼接ROP链。

题目2:堆溢出+Unlink攻击

名称heap_unlink
描述:一个32位程序存在堆溢出漏洞,允许覆盖相邻堆块的size字段,触发Unlink攻击。
考察点:堆布局、Unlink利用、伪造堆块结构。
解答步骤

  1. 漏洞分析
    • 输入数据时未检查长度,导致堆溢出,可覆盖下一个堆块的prev_sizesize字段。

  2. 利用思路
    • 伪造一个空闲堆块,通过Unlink操作实现任意地址写。

    • 覆盖free@gotsystem地址,触发free("/bin/sh")

  3. EXP构造
    # 伪造堆块结构
    fake_chunk = p32(0xdeadbeef) + p32(heap_addr - 12)  # fd/bk指针
    payload = b'A'*overflow_size + p32(0x80) + p32(0x88 | 0x1) + fake_chunk
    

详细解答

  • 通过溢出修改sizePREV_INUSE位,触发合并操作。

  • 利用Unlink的FD->bk = BKBK->fd = FD实现任意地址写入。

题目3:格式化字符串+栈迁移

名称fmt_stack_pivot
描述:程序存在格式化字符串漏洞和栈溢出漏洞,但溢出空间不足,需结合栈迁移技术完成利用。
考察点:格式化字符串泄露、栈迁移(Stack Pivot)、ROP链构造。
解答步骤

  1. 漏洞分析
    • 使用printf(user_input)导致格式化字符串泄露libc地址。

    • 栈溢出长度不足以覆盖返回地址,但可覆盖rbp

  2. 利用思路
    • 泄露栈地址和libc基址。

    • 覆盖rbp为可控内存地址,通过leave; ret指令实现栈迁移。

  3. EXP关键代码
    payload = fmtstr_payload(offset, {printf_got: system_addr})  # 格式化字符串覆盖GOT表
    payload += p64(migrated_stack_addr)  # 覆盖rbp
    

详细解答

  • 利用%nrbp位置写入目标地址。

  • 迁移后在新栈布置ROP链调用system("/bin/sh")

题目4:Use After Free + Fastbin Attack

名称uaf_fastbin
描述:程序在释放堆块后未清空指针,可通过UAF修改fd指针,实现任意地址分配。
考察点:UAF漏洞利用、Fastbin Attack、内存布局。
解答步骤

  1. 漏洞分析
    • 释放堆块后仍能使用悬垂指针修改其fd值。

  2. 利用思路
    • 修改fd指向伪造的Fastbin链,分配堆块到__malloc_hook附近。

    • 覆盖__malloc_hookone_gadget地址。

  3. EXP构造
    # 分配并释放堆块A
    free(A)
    # 通过UAF修改A的fd为fake_addr
    edit(A, p64(fake_addr))
    # 再次分配两次,第二次得到fake_addr处的堆块
    

详细解答

  • 计算__malloc_hook附近的可用地址(如利用0x7f对齐特性)。

  • 使用one_gadget工具查找可直接触发shell的gadget。

题目5:高级堆利用+沙箱逃逸

名称house_of_apple
描述:程序开启沙箱(禁用execve),需通过堆漏洞构造ORW链读取flag文件。
考察点:House of系列利用、沙箱逃逸、SROP(Sigreturn-Oriented Programming)。
解答步骤

  1. 漏洞分析
    • 存在任意地址写漏洞,可劫持_IO_list_all指针。

    • 沙箱限制只能使用open/read/write系统调用。

  2. 利用思路
    • 伪造_IO_FILE结构体,触发_IO_flush_all_lockp中的函数调用链。

    • 构造ROP链调用open("flag")read(fd, buf, 0x100)write(1, buf, 0x100)

  3. EXP关键代码
    # 伪造_IO_FILE结构
    fake_file = p64(0) * 18 + p64(0) + p64(1) + p64(0xffffffff) + p64(rop_chain_addr)
    

详细解答

  • 利用House of Apple技术劫持程序流至ROP链。

  • 通过syscall; retgadget拼接ORW链。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词