从零开始学习 Web 安全与白帽黑客入门指南
引言:什么是黑客?
对于很多人来说,黑客是一个神秘的代名词。加之影视作品夸张的艺术表现,使得黑客这个本来只专注于技术的群体,散发出亦正亦邪的神秘色彩。
黑客源自英文 hacker 一词,最初曾指热心于计算机技术、水平高超的电脑高手,尤其是程序设计人员。 随着时间推移,逐渐区分为白帽、灰帽、黑帽等。
- 白帽黑客(White Hat):被称为道德黑客。他们不会非法入侵用户网络,而是通过一系列测试检查公司安全系统的效率,帮助修复漏洞。
- 黑帽黑客(Black Hat):恰好与白帽黑客相反,他们往往为了个人利益去破坏用户网络数据,以此进一步实施网络犯罪。
- 灰帽黑客(Grey Hat):同时拥有白帽和黑帽黑客的属性,围绕利益寻找足够的补偿,行为处于灰色地带。
如果是想利用学到的技术非法牟利,奉劝尽早放弃,君子爱财取之有道。 想成为一名合格的白帽黑客,要遵守'江湖规矩',严格遵守法律法规,在授权范围内进行安全测试。
下面来看一看,如何从零开始成为一名(白帽)黑客。
Web 基础架构与漏洞原理
早期的互联网非常的单调,一般只有静态页面。现在,随着技术的发展,Web 上大多数站点实际上是 Web 应用程序,在服务器和浏览器之间进行双向的信息传递。它们支持注册登录、金融交易、搜索及用户创作的内容。用户只需要拥有一个浏览器,就能实现各种功能。
Web 是指一个网站的前端页面到后端服务,比如我们常见的 JavaScript、PHP、Python、MySQL、jQuery、Docker 等,包括开发、运维这些服务。
所以 Web 安全也就是从安全的角度探索 Web 的一种方式。
1. Web 传输流程
为了能够更简单的理解一些常见漏洞,我们需要了解数据的流转过程。在实际中,我们打开一个网页提交登录或者是搜索都会经过服务器做的一系列处理又回到浏览器。在这个过程中我们提交的数据会被带入到一系列的填空题中,有的是我们能猜到的,有的则是意想不到的,有的会经过 SQL 查询进行填空,有的会被带入到命令行中进行执行,最后又把结果返回给浏览器进行填空,也就是最后我们看到的结果。
在数据的传输中,我们可以把 Web 简单的分为几个层次:
- 浏览器(Client):即客户端,提供客户端和服务器端的数据信息交互。
- HTTP 协议:客户端与 Web 服务器进行交互时就存在 Web 请求,这种请求都基于统一的应用层协议——HTTP 协议来交互数据。HTTP 属于轻量级协议,无需连接,提供了对通信错误的容错性。
- 中间件:位于平台(硬件和操作系统)和应用之间的通用服务,如 Nginx、Apache。
- Server 容器:负责解析用户请求和脚本语言,类似的有 Tomcat、JBoss 等。我们访问网页看到是 Web 容器处理后的内容。
- 数据库:动态页面可提供交互式的信息查询服务,主要依赖于 Web 数据库的实现,对外提供包含表单的 Web 页面作为访问接口,查询结果也以包含数据列表的 Web 页面形式返回给用户。
当然除了这些数据也有可能流向不可见的第三方服务商。
下图展示了数据的传输流程,以及不同阶段经常出现的漏洞及其原因:
- 前端层:XSS(跨站脚本攻击)、CSRF(跨站请求伪造)。
- 网络层:中间人攻击、数据泄露。
- 应用层:SQL 注入、命令注入、逻辑漏洞。
- 系统层:权限提升、缓冲区溢出。
常见 Web 漏洞详解
我们常见的 Web 漏洞类型主要有 SQL 注入、XSS、远程命令执行以及越权等。以下我们分别用举例的形式为大家介绍这几种漏洞。
1. SQL 注入 (SQL Injection)
所谓 SQL 注入,就是通过把 SQL 命令插入到 Web 表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的 SQL 命令。
原理示例: 假设有一个登录框,后端代码拼接如下:
users username password


