Web —— 引入
Web 通常是你接触网络的第一课。传统 Web 从分类上看,其实是很简单的:无非是 浏览器、后端应用以及它们之间的沟通方式,这三方面的结合而已。
当然,随着你的学习逐渐深入,你会开始意识到这里面其实并没有看上去的那么容易。举几个例子:
浏览器前端:HTML、DOM、CSS、XML、JavaScript、CORS、CSP
沟通协议:HTTP、TLS、WebSocket、JWT、SOAP、JNDI
后端应用程序:PHP、ASP、.Net、Python、Node.js、C、C++、Golang、Rust、Lua、Apache、Nginx、Tomcat、Springboot、JBoss
常见漏洞分类:信息泄露、逻辑漏洞、条件竞争、文件上传/下载/解压、SSRF、反序列化、动态代码执行、SSTI、系统命令注入、SQL 注入、CSRF/XSS
而近些年的 CTF Web 往往还喜欢结合具体数据库或"内网渗透"的相关知识进行考察,例如:
数据库:SQLite、MySQL、MariaDB、PostgreSQL、H2 Database、OracleDB、MongoDB
其余知识:Redis未授权、SMB、提权(内核漏洞、SUID、Capabilities)、横向移动(网段、路由与代理)
如果你曾经体验过软件开发的全流程,你可能会对上面这些名词感到熟悉。如果你是一问三不知的新手,这当然也没有关系,因为本次比赛不会涉及这其中的大部分内容。
一个 Web 漏洞本质上就是某个 "非预期" 的行为,例如逻辑漏洞,可以造成用户非预期地访问某些它不该访问得到的数据;如 SQL 注入,可以造成后端数据库甚至是服务器的沦陷;如 HTTP Desync Attack,则是结合 HTTP 协议实现的弱点窃取浏览器提交的信息。
也就是说,当你遇到一个 Web 挑战的时候,最需要关注的也是三个点:浏览器前端界面、交互的数据以及协议、后端服务器信息。
传统 CTF Web 的入门一般是从 PHP 开始的。通过自己简单地搭建一个后端服务器,熟悉 PHP 常见的语言特性以及考点,然后再逐渐补充 HTTP 或 HTML 的相关知识。
所以接下来,我们将会当做你一无所知,并从“打开浏览器”开始,依次对这三个方面进行介绍。