CTF 中常见的 Web 解题思路
Reference: 360 网络安全大学 3CTF 赛前培训总结

0x00 信息探测
- 
探明 Web 系统的语言、框架,首先满足能访问其正常功能。
 - 
查看有没有数据库功能,存在数据库都会有数据库的考点。
 - 
接着扫描目录,查看有没有源码或者其他提示性文件。
 - 
寻找输入点(包括输入框、文件上传、XSS点等),根据语言特性,进行 Payload 测试,挖掘语言上的漏洞。
 - 
最后再考虑是否是操作系统或者 Web 服务器的漏洞,这块基本都会涉及到 Web Pwn 方面的知识。
 
0x01 语言
> 前端语言:
- 
html和css一般不会单独作为考点,但是依然要掌握快速读懂他们的技巧。 - 
JavaScript: 
- 
信息获取:Js 加解密、XSS 攻击、CSP 防御机制绕过、CSRF 等。
 - 
权限获取:NodeJs 代码审计、Vue、跨域。
 
> 后端语言:
PHP:
- 
Bypass、PHP黑魔法。
 - 
条件竞争:多个客户端同时访问一个服务器的功能所带来的的非预期结果。
 - 
反序列化:寻找可控点,构造POP链,执行危险操作。
 - 
文件包含:大部分考点在LFI,本地文件包含,在实战中,这个也是可以直接拿到 shell 的利用点。
 - 
SSRF:服务端请求伪造,可以结合很多其他协议进行利用,达到攻击内网的目的。
 - 
phar利用: 经常和 LFI 结合,同时也经常结合反序列化等考点。
 - 
文件上传绕过
 - 
框架考点:著名的框架一定要了解,例如 — ThinkPHP、Laravel、各种 CMS。
 
Python:
- 
SSTI 服务端模板注入
 - 
yml 反序列化,PyYAML在解析数据的时候遇到特定格式的时间数据会将其自动转化为 Python 时间对象。
 - 
JWT 认证绕过
 - 
secret key 泄露导致命令执行
 - 
Django、Flask、Tornado 等框架的漏洞
 
Java:
- 
Spring 框架漏洞,这是近年特别火的一个考点,预计未来的 CTF 赛事中的 Web 题目只要涉及 Java,就逃不开这个考点。
 - 
Java 反序列化
 - 
代码审计
 
0x02 数据库
- SQL注入
 
- 
union select 常规注入
 - 
bool 盲注暴力猜解
 - 
时间盲注
 - 
堆叠注入:针对预处理防御以及 select 等关键字被过滤后的注入方法
 - 
宽字节注入
 
- 权限获取
 
- Redis 4.0 RCE
 
0x03 Web服务器
- Linux:Apache/Nginx
 
- 
服务器解析漏洞
 - 
LD_PRELOAD
 - 
Nginx配置漏洞
 - 
Apache栈溢出漏洞
 
- Windows:IIS
 
- 
PUT 发包上传漏洞
 - 
IIS 远程溢出漏洞等
 
- 服务器组件漏洞
 
- 
Apache组件提权漏洞
 - 
CGI 漏洞(公共网关接口,配合 Nginx 解析漏洞)
 
0x04 操作系统
- 
操作系统中的目录遍历
 - 
so 文件逆向分析
 - 
结合 TensorFlow 进行机器学习考察
 - 
区块链考点
 - 
结合密码学:CBC 翻转攻击、Hash 拓展攻击、 Padding Oracle 填充攻击
 
0x05 展望
- CTF 的赛事等级不同,题目也不同,省赛未来还是主要以纯 Web 的形式进行考察,重点依然在 PHP 、 SQL 注入、XSS 这三大项。
 
- 
语言主要为 PHP 和 Python,西南地区的省赛可能多为 Js 方向
 - 
数据库主要为 MySQL,重点多为盲注、延迟注入
 - 
框架主要考察 Laravel、ThinkPHP 以及常见 CMS
 
- 国家比赛以及国际比赛基本为多元化 Web 题目,结合包括密码学知识、Pwn 知识、甚至机器学习等。
 
- 
语言不只局限于 PHP 甚至基本看不到 PHP,多为 Java、Go、Ruby、Python,前端考点多为 NodeJs
 - 
数据库方面多为 Redis
 - 
框架考点多为 Spring
 - 
大多数比赛有区块链题目