Skip to content

Week 3

从本周开始,题目将逐渐增加难度,并注重知识点的考查,希望大家好好学习相关内容。若仍有相关问题,请参考快速入门

Pwn

One Last B1te

在解题之前,你需要了解 RELRO 保护以及动态链接与延迟绑定的流程以及细节,除此之外还有沙箱机制。

程序中提供了任意地址写的机会,但是我们已知的只有 ELF 地址。

那一个字节写到哪里好呢? ELF 中可写的段只有 0x404000 开始的段,仔细规划规划那一个字节写在哪里,写什么吧 ~

除此之外,如果没有思路的话建议多动态调试看看,注意 call close 函数时寄存器的状态。

如果你苦恼于 ELF 中没有好用的 gadget,不妨看看别的可执行段中的 gadget.

如果你苦恼于 gadget 没法设置 rdx 寄存器,不妨看看别的 gadget,能设置 rdx 寄存器的 gadget 不只有 pop rdx; ret;.

Reverse

SMc_math

SMC,即 Self Modifying Code,动态代码加密技术,指通过修改代码或数据,阻止别人直接静态分析,然后在动态运行程序时对代码进行解密,达到程序正常运行的效果。

SMC 的一般破解方法是,通过动态调试,在代码解密完之后下断点并查看解密之后的代码。

Z3 是由微软开发的一个高性能定理证明器,用于解决逻辑约束、符号执行、模型检测等问题。Python 版本的 Z3 提供了接口,可以方便地在 Python 中使用 Z3 求解逻辑问题,特别是在 SMT(Satisfiability Modulo Theories)求解方面。

flowering_shrubs

IDAPython 是一个将 Python 集成到 IDA Pro (Interactive DisAssembler) 中的插件。它允许你使用 Python 脚本来自动化逆向工程任务,从而提高分析效率。

如果你在使用 ida 过程中发现了许多同样的混淆,你可以编写 idapython 脚本来批量去除。

simpleAndroid

关于安卓,了解一下 JNI 的静态注册和动态注册。

加密的算法不难,主要就是识别出 java 层和 so 层分别起到什么作用,它们是怎么进行交互的。

SecretOfKawaii

使用 Jeb 解控制流混淆,so 层普通压缩壳用 UPX 解。

解密涉及到端序转化,建议查找相关资料,理解后再做题,同时还需要有点补码的知识呢。加密算法在 CTF 比赛还是比较常见的。

011vm

ollvm 混淆需要使用 d810 去除,但可能还面临着部分控制流难以去除的问题,最好结合动调做题。

本题只有常见加密,细心观察逻辑即可解出。

Web

臭皮的计算机

本题考查 Python 的命令执行和输入过滤绕过。

了解 Python 3 的一些特性,eval() 可以执行字符串中的任意 Python 表达式,包括算术运算、函数调用,甚至系统命令。灵活利用 ByPass 技巧,不要拘泥于单一使用,可以组合,嵌套使用。

臭皮踩踩背

本题考查对 Python 中「一切皆对象」的理解。

字符串,数字,函数等等都是「对象」,都有自己的属性,对可利用对象和属性的积累,是 Python 沙箱逃逸的基础。

理解什么是内建函数 __builtins__ eval() 函数的进阶用法,什么是命名空间,以及常用的命令执行的函数对解开这题至关重要。

推荐去 Python 官方文档了解 eval() 函数:

强烈建议先自己本地试试。大部分源代码题目已经给出。

这「照片」是你吗

本题考查常见的漏洞——路径穿越漏洞,并且考查 Python 的代码审计。

解题需要:

  • 理解密钥复杂度与安全性之间的相关性
  • 有写脚本的重要基本功
  • 对 SSRF 漏洞有一个基本认识

Include Me

这题主要考查远程文件包含漏洞,PHP 伪协议,理解什么是转换流是本题的关键,同时还需了解一下 Base64 编码 的格式以及 URL 解码 和编码时的保留字符和非保留字符。

blindsql1

与前几周的题一样,考查 SQL 注入的相关知识。可继续参考文章:SQL 注入绕过过滤总结

Crypto

不用谢喵

更加明确的考点指向,参见:Block cipher mode of operation | Wikipedia.

Misc

ez_jail

Misc 有一大考点,就是考查各种边边角角的奇技淫巧,本题就考查了 C++ 的一些知识,还算是一道比较有开放性的题目,解法并不唯一。在以下网站你有可能找到可以完成这道题的奇技淫巧:

  • 知乎
  • StackOverflow
  • Github

其实只有 src 内的 server.py 是主要代码,其余大部分都是与 Docker 镜像构建有关。感兴趣的同学也可以借此机会学习一下如何在本地构建 Docker 镜像然后运行。