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
-
大多数比赛有区块链题目