CTF 中常见的 Web 解题思路

Reference: 360 网络安全大学 3CTF 赛前培训总结

0x00 信息探测

  1. 探明 Web 系统的语言、框架,首先满足能访问其正常功能。

  2. 查看有没有数据库功能,存在数据库都会有数据库的考点。

  3. 接着扫描目录,查看有没有源码或者其他提示性文件。

  4. 寻找输入点(包括输入框、文件上传、XSS点等),根据语言特性,进行 Payload 测试,挖掘语言上的漏洞。

  5. 最后再考虑是否是操作系统或者 Web 服务器的漏洞,这块基本都会涉及到 Web Pwn 方面的知识。

0x01 语言

> 前端语言:

  1. htmlcss 一般不会单独作为考点,但是依然要掌握快速读懂他们的技巧。

  2. JavaScript

  • 信息获取:Js 加解密、XSS 攻击、CSP 防御机制绕过、CSRF 等。

  • 权限获取:NodeJs 代码审计、Vue、跨域。

> 后端语言:

  1. PHP:
  • Bypass、PHP黑魔法。

  • 条件竞争:多个客户端同时访问一个服务器的功能所带来的的非预期结果。

  • 反序列化:寻找可控点,构造POP链,执行危险操作。

  • 文件包含:大部分考点在LFI,本地文件包含,在实战中,这个也是可以直接拿到 shell 的利用点。

  • SSRF:服务端请求伪造,可以结合很多其他协议进行利用,达到攻击内网的目的。

  • phar利用: 经常和 LFI 结合,同时也经常结合反序列化等考点。

  • 文件上传绕过

  • 框架考点:著名的框架一定要了解,例如 — ThinkPHP、Laravel、各种 CMS。

  1. Python:
  • SSTI 服务端模板注入

  • yml 反序列化,PyYAML在解析数据的时候遇到特定格式的时间数据会将其自动转化为 Python 时间对象。

  • JWT 认证绕过

  • secret key 泄露导致命令执行

  • Django、Flask、Tornado 等框架的漏洞

  1. Java:
  • Spring 框架漏洞,这是近年特别火的一个考点,预计未来的 CTF 赛事中的 Web 题目只要涉及 Java,就逃不开这个考点。

  • Java 反序列化

  • 代码审计

0x02 数据库

  1. SQL注入
  • union select 常规注入

  • bool 盲注暴力猜解

  • 时间盲注

  • 堆叠注入:针对预处理防御以及 select 等关键字被过滤后的注入方法

  • 宽字节注入

  1. 权限获取
  • Redis 4.0 RCE

0x03 Web服务器

  1. Linux:Apache/Nginx
  • 服务器解析漏洞

  • LD_PRELOAD

  • Nginx配置漏洞

  • Apache栈溢出漏洞

  1. Windows:IIS
  • PUT 发包上传漏洞

  • IIS 远程溢出漏洞等

  1. 服务器组件漏洞
  • Apache组件提权漏洞

  • CGI 漏洞(公共网关接口,配合 Nginx 解析漏洞)

0x04 操作系统

  1. 操作系统中的目录遍历

  2. so 文件逆向分析

  3. 结合 TensorFlow 进行机器学习考察

  4. 区块链考点

  5. 结合密码学:CBC 翻转攻击、Hash 拓展攻击、 Padding Oracle 填充攻击

0x05 展望

  1. CTF 的赛事等级不同,题目也不同,省赛未来还是主要以纯 Web 的形式进行考察,重点依然在 PHP 、 SQL 注入、XSS 这三大项。
  • 语言主要为 PHP 和 Python,西南地区的省赛可能多为 Js 方向

  • 数据库主要为 MySQL,重点多为盲注、延迟注入

  • 框架主要考察 Laravel、ThinkPHP 以及常见 CMS

  1. 国家比赛以及国际比赛基本为多元化 Web 题目,结合包括密码学知识、Pwn 知识、甚至机器学习等。
  • 语言不只局限于 PHP 甚至基本看不到 PHP,多为 Java、Go、Ruby、Python,前端考点多为 NodeJs

  • 数据库方面多为 Redis

  • 框架考点多为 Spring

  • 大多数比赛有区块链题目