目录
[(二)OSI 七层模型](#(二)OSI 七层模型)
一、引言
目前,最需要人才的 IT 领域之一是 SI(System Integration,系统集成)。该领域需要开发人员具有编程语言(Java)开发能力,具备数据库相关知识,还需要拥有业务流程自动化所需的各种知识。对系统工程师、网络工程师、数据工程师的要求也是如此。业界大量需要的并不是掌握多个领域知识的人才,而是在自身专业领域拥有深厚知识的人。
下面看看黑客攻击领域。黑客攻击的发展趋势是自动化与普遍化。无论是谁,使用 Metasploit、Kali Linux 等自动化工具都能轻松进行黑客攻击。当今时代,即使没有深厚的计算机知识,只要感兴趣,就能成为一名黑客。但如果想清除入侵痕迹、绕过计算机安全系统,准确获取自己所需的信息,就必须具备计算机结构、操作系统、网络、Web、安全解决方案、编程语言等各种知识。如果不懂基础知识而只会使用自动化工具,那么 2~3 年内就会被不断涌现的黑客攻击技术所淘汰。简言之,要想成为一名合格的黑客,必须深入学习有关计算机的各种知识。
本文将带领各位逐一学习黑客攻击所需的核心技术,主要帮助各位理解黑客攻击的各种基础知识。若需要更深入地学习相关知识,请参考集中讲解某种知识的专业书籍。请大家尽量接触多个领域的黑客攻击技术,深入学习自己感兴趣的领域,不断向专业黑客方向努力。
黑客攻击是一门综合艺术,也需要新颖的想法、创意。只有理解了基本原理,才能谈得上创意。正因如此,学习黑客攻击时,并不从使用自动化工具开始,而是先认真阅读有关计算机结构与操作系统的书籍,学习并掌握黑客攻击基础知识。

二、计算机结构
(一)概要
理解计算机结构是学习其他计算机知识的基础。若想理解操作系统、应用程序、进程、Web,就必须先理解计算机结构及其工作原理。键盘记录器是最基本的黑客攻击程序之一,编写它之前,必须懂得计算机输入 / 输出设备的基本处理方式。理解计算机组成原理后,不仅能够轻松编写键盘记录器,还能开发更为强大的黑客攻击程序,比如用于绕过键盘安全解决方案的黑客攻击程序。
计算机由多个部件组成。最近流行的智能手机也是一种计算机,它除了具备计算机基本的组成部件之外,还装配有相机、GPS、电子罗盘等多种传感器。为了提高便携性,在一块芯片上集成了多种功能,并且使用卡槽对功能进行扩展,在外部安装其他设备。但计算机的主要功能大部分是由几个核心部件实现的。了解计算机功能时,与其逐个学习各组成部件,不如以几个核心部件为中心进行学习。
第一,计算机的 "大脑" 是 CPU。CPU 由运算器、控制器、寄存器与缓存组成。它负责解析命令并执行相应运算,或者向周围设备发送控制信号。CPU 的处理速度会对计算机性能产生巨大影响,所以设计时的核心问题是确定其工作速度。最近,随着并行处理技术及低功耗技术的发展,人们设计了多核 CPU,这大大提升了计算机性能。
第二,数据保存设备。CPU 工作时需要从内存读入命令与数据,并进行处理。为此,必须先将 HDD 中的应用程序加载到内存。内存的作用类似于 CPU 的工作场。内存容量越大,一次性处理的事务就越多,所以增加内存容量有利于提升计算机处理性能。事实上,将应用程序运行时要使用的所有数据全部加载到内存几乎是不可能的。为了解决这一问题,人们开发了虚拟内存技术。使用虚拟内存能够大大提高内存的使用效率,但虚拟内存技术也为计算机性能带来诸多问题。将 HDD 中的数据加载到内存、CPU 从内存读入数据的过程中,各阶段都有可能出现性能低下。为了解决这一问题,人们引入缓存技术,将常用数据保存到 CPU 的高速缓存。
第三,多样化的周边设备。比如接收用户输入的键盘、鼠标,显示结果的显示器、打印机。此外,还有声卡、网卡等多种设备,它们或是集成在主板上,或者安装在扩展插槽上,用于扩展计算机的功能。
第四,系统总线。CPU 与其他组成部件传送命令与数据时,需要一个通路,计算机通过系统总线支持各组成部件之间的通信。借助系统总线,地址、数据、控制信号能够在 CPU 与其他部件之间进行双向或单向传送。

(二)CPU
进行黑客攻击时,观察寄存器值的变化是非常重要的。前面提到的缓冲区溢出攻击就是通过操作 EIP 的值(Windows 发布了相关的安全补丁,目前已经无法直接进行操作)执行黑客攻击代码的。了解 CPU 结构及其工作原理是学习黑客攻击技术以提升自身水平的基石。
CPU 主要由 ALU(Arithmetic Logic Unit,算术 / 逻辑单元)、CU(Control Unit,控制单元)、寄存器组(Register Set)、总线接口(Bus Interface)组成。此外,为了降低从内存读入数据的代价,CPU 内部也集成了高速缓冲。
ALU 用于执行加减乘除、AND、OR、NOT 等各种算术运算与逻辑运算。CU 从输入寄存器获取数据,决定 ALU 执行运算的类型。此外,如何确定运算结果也由 CU 决定。
CU 从存储器取出命令,并对命令进行解析,然后发送控制信号,控制各设备工作。CU 既可以通过组合逻辑单元由硬件实现,也可以通过编写程序使用软件实现。
寄存器是 CPU 内部集成的高速小型保存器,一般用于保存当前计算中的值。大部分 CPU 会将数据从主存转移到寄存器,完成处理后再保存到内存。寄存器处于运算的中心位置。

(三)内存
内存的作用类似于进程运行的工作场所。许多应用程序黑客攻击与系统黑客攻击技术都是通过操作内存中保存的值实现的。作为一名合格的黑客,不仅要了解堆、栈、代码、数据等逻辑内存结构,还要了解实际的物理内存结构。
随着时间的推移,用于发动攻击的漏洞会被生产厂商一一封堵,黑客必须通过一些迂回策略才能利用这些漏洞,这就要求具备有关实际物理内存结构的知识。
一般而言,计算机中使用的内存可以分为 ROM 与 RAM 两种。ROM 是一种非挥发性内存,用于保存有关计算机启动时的设备检查与从 HDD 加载引导程序(Bootstrap)的基本信息。RAM 是计算机运行中使用的内存,进程使用的数据就保存于此。RAM 是一种高速的挥发性保存设备,只在电源接通时才能保存数据。
运行应用程序前,必须先将 HDD 中的数据加载到内存。由于内存容量有限,且同时供多个进程使用,所以会出现内存不足的问题。此时可以将 HDD 的一部分空间用作虚拟内存,以弥补内存空间的不足,这种技术称为虚拟内存技术。
CPU 内部含有高速寄存器。CPU 执行运算前,需要先将命令与数据从内存读入寄存器,这样能够大大提高访问速度。从 CPU 角度看,访问内存并从指定地址读取数据要付出较高代价(时间)。因此,为了提升性能,CPU 内部或外部设置有高速缓存。系统会将常用数据放入高速缓存,以提升数据访问性能。SRAM 是最常用的高速缓存。
内存层次结构中,与 CPU 离得越近、速度越快,价格也更高。一般来说,选购电脑时主要看 CPU 的运行速度与核心数,但另一个决定计算机性能的重要指标是缓存大小。购买电脑时,要想买到性能高的电脑,需要同时考虑 L1(CPU 内部)缓存与 L2 缓存(CPU 内部或外部)。

三、操作系统
(一)概要
操作系统是黑客必须掌握的内容。操作系统是定义计算机行为的核心程序,负责控制所有应用程序与硬件。黑客攻击程序也是利用操作系统提供的功能运行的。比如,格式字符串攻击中,黑客必须详细了解有关竞态条件(操作系统在多进程环境中控制共享资源时发生)与操作系统的格式字符串处理机制。并且也要理解用于管理用户权限的 /etc/password 文件的处理过程。
下面逐项了解操作系统各功能。用户通过应用程序使用系统功能。比如,用户使用 Internet Explorer、Chrome 等网页浏览器上网,使用 Office Word 创建文档。使用这些应用程序时,用户无需知道其内部工作原理,只要在地址栏中输入要访问的地址,浏览器就会将网站内容呈现到显示器。同样,应用程序开发人员也不需要知道有哪些数据被放入高速缓存,以及使用何种技术维持数据一致性。实现所有这一切只需要简单调用操作系统提供的 API 即可。
计算机运行过程中,操作系统处于最核心的地位。从软件层面看,操作系统管理进程的创建与销毁,支持进程同步与调度。还提供基于虚拟内存的内存管理技术,管理文件系统以使用计算机中的文件与目录。从硬件层面看,操作系统管理键盘、鼠标、显示器等多种周边设备的工作,也负责管理 CPU。智能手机是一种在移动环境中使用的计算机,其操作系统管理相机、电子罗盘、GPS 等多种传感器。
操作系统还提供错误检测与处理功能,以保证应用程序正常运行,确保其行为的一致性。比如,程序在正常运行过程中异常终止时,Windows 操作系统就会弹出错误信息。此外,为了维护系统安全,操作系统还提供访问、管理资源以及安全认证等功能。

(二)进程管理
调试进程前,必须先查找进程 ID。为了分析,有必要先理解进程所用的内存结构、上下文切换、进程处理流程等相关内容。API 钩取、DLL 注入等黑客攻击都使用了 Windows 提供的调试 API,黑客必须了解进程的工作原理才能编写。
进程是指磁盘中的程序被装入内存并接受操作系统控制的状态。简言之,进程就是处于运行中的程序。磁盘中的程序要想运行,必须先转变为进程。进程占用一定内存,并通过 CPU 执行指定操作,有时也需要使用系统中的文件与 I/O 资源。操作系统提供的核心功能之一就是为进程分配与释放资源。资源分配与释放的效率是衡量操作系统性能与安全性的重要指标。
进程以 PCB(Process Control Block,进程控制块)形式表示,PCB 随进程的创建而建立,伴随进程运行的整个过程,直到进程销毁而销毁。PCB 是由操作系统管理的一种数据结构,包含进程 ID、进程状态、程序计数、CPU 寄存器、CPU 调度信息、内存管理信息、账户信息、输入输出状态信息等。
进程占用 CPU 执行相应任务。运算所需数据从内存读入 CPU 内部的寄存器。分配给进程的 CPU 时间片耗尽时,进程就会进行上下文切换,将 CPU 资源让给其他进程使用。上下文切换过程中,寄存器中的数据会被保存到 PCB,这样进程再次取得 CPU 的使用权时,就可以将这些数据恢复到寄存器继续运行。

(三)内存管理
进程运行时会将数据放入内存。地址、变量、对象、返回值等多种数据都保存于内存。源代码注入、格式字符串、缓冲区溢出等多种攻击都是通过修改内存中的数据实现的。若想操作内存使程序进入可运行状态,必须具备有关内存结构及工作原理的基础知识。
进程运行时,操作系统为其分配内存并进行管理。特别是在多进程环境中,操作系统必须保证各进程拥有独立的内存空间。从进程运行的观点看,内存管理可以分为虚拟内存管理功能与进程内存分配功能。

首先了解虚拟内存管理功能。如前所述,程序运行时需要先将数据装入内存。此时若物理内存不足,则操作系统会将一部分硬盘空间虚拟用作内存。虚拟内存技术下,大量数据会在主保存器(内存)与辅助保存器(硬盘)之间频繁交换。由于通过地址指定并管理各种数据会付出大量代价,所以操作系统以页面为单位进行管理,页面是使用固定大小的页帧在内存中划分的。
虚拟内存技术中,主保存器与辅助保存器虚拟绑定,看起来就像是在使用同一块内存一样。要做到 "无中生有",必须使用各种管理技术,如下所示。
- 载入技术:决定何时从辅助保存器中将数据载入主保存器。
- 配置技术:决定将页面加载到主保存器的哪部分。
- 替换技术:主保存器中已经加载所有页面时,决定将哪些页面换出到辅助保存器。
- 分配技术:决定为进程分配的主保存器空间大小。

当程序运行,即从静态代码变为动态进程时,操作系统在虚拟内存区域中只为进程分配空间,用于保存进程运行所需的程序源代码,以及运行时出现的各种形式的数据。一般而言,分配给进程的内存分为代码区、数据区、BSS 区、堆区域、栈区域这五部分,各区域具有不同功能。
- 代码区:该区域包含组成可执行文件的各种命令,保存着函数、控制语句、常数等,它们在进程创建时保存一次,直到进程销毁。代码区为只读区域,不可执行写入操作。
- 数据与 BSS 区域:这两个区域保存着全局变量、静态变量、数组、结构体等。在进程创建时分配空间,进程运行时存入值。这两个区域都是可读写的。
- 堆区域:该区域是事先预约的空间,供进程运行时使用。程序员调用 API 可以分配任意大小内存。一般调用 malloc () 或 calloc () 函数进行分配,调用 free () 函数进行释放。
- 栈区域:栈区域是程序自动使用的临时内存区域,用于保存局部变量的值,在函数调用时分配,函数退出时返还。堆与栈内存分配于相同空间。堆从低地址到高地址分配内存,栈从高地址向低地址分配内存,它们是系统黑客攻击的主要目标。在 main () 函数中,按照参数、返回地址、帧指针、局部变量序压入栈。
四、应用程序
(一)概要
从编译器分类看,编程语言分为两种,一种是编译型语言,另一种是解释型语言。编译型语言经过编译器一次编译即可全部转换为目标代码。转换时,分析与优化同时进行,具有执行速度快的优点。解释型语言解析一行,代码即执行一行,执行速度相对较慢,但易于调试,可独立于操作系统进行开发。两种语言的共同点是,都需要将源代码转换为机器代码才能运行。Java 语言同时具有上述两种特征,即编译时先将源代码转换为字节码,运行时再逐行解释执行。
根据程序运行方式,黑客攻击方式也有所不同。C 语言是最具代表性的编译型语言,对于使用 C 语言编写的程序,要采用黑盒方式探测漏洞进行黑客攻击。因为我们无法通过反编译方式得到程序源代码进行分析,只能通过输入不同值观察进程行为以进行黑客攻击。JavaScript 是解释型语言,可以直接通过分析源代码寻找程序漏洞,这称为 "白盒漏洞分析技术"。
(二)运行程序
下面以编译型语言为例进行介绍。编译器用于将源代码转换为目标代码,此过程中并非只进行简单转换,还要对代码进行并行化处理,以便在多核环境中优化。此外还要分析代码,显示代码中的错误信息。一般而言,目标代码是汇编代码。汇编代码以人类易读的形式表示机器代码,它与机器代码是一一对应的。编译完成后,用户即可运行程序。用户双击可执行文件时,操作系统会将其加载到内存,并连接需要的 DLL 与库。如前所述,运行程序时,程序数据会被加载到代码、数据、BSS 区域,并分配运行所需的堆区域与栈区域。

五、网络
(一)概要
计算机网络是指,通过通信线路连接多台计算机,实现资源共享与信息传递的计算机系统。计算机之间进行通信需要使用线缆、中继器、交换机、路由器等硬件设备,这些设备要正常工作则需要使用标识符、传输协议、路由等技术。
- 识别符(Identifier):现实中,可以通过姓名或身份证号码识别区分每个人。与之类似,计算机也需要一种手段标识自己。最基本的是使用 Mac 地址,它是 LAN 卡分配的号码,是生产过程中由厂家烧入网卡的全球唯一编号。IP 地址是识别每台计算机的逻辑单位。目前使用的 IPv4 协议中,IP 地址由 32 位组成。进程是计算机内部的通信主体,它借助端口号识别。从通信观点看,端口技术实现了多个进程共享一个 IP 地址的目标。像这样,计算机通过 MAC、IP、端口三种识别符相互识别并交换数据。
- 传输协议(Protocol):计算机传送数据时,会将对方的地址、端口号、错误检查所需的各种信息一起发送。只有组成通信系统的交换机、路由器等设备知道所有信息后,才能将数据安全传送到目的地。首先,有必要制定关于传送数据的长度与哪种信息在哪个位置的详细规则。然后,设备制造商与程序开发人员必须根据这些规则生产与分析数据,这些规则就是通信协议。人们根据不同使用目的开发了多种协议,并一直在使用。
- 路由(Routing):路由技术用于从数千万台计算机中找到自己想通信的计算机,并使找到的路径最快、最安全。路由由路由协议与路由器组成。目前有多种路由,请根据规模与预算选择使用。

下面讲解 TCP SYN 洪水(Flood)攻击,它利用 TCP 的三次握手机制(3-Way Handshaking)发动攻击。客户机向服务器发送 SYN 包后,服务器为之分配缓冲空间,并向客户机发送 SYN+ACK 包。若发送 SYN 包的客户机是黑客机,则不继续进行三次握手,而只发送 SYN 包。那么,服务器端所有可用的缓冲就会耗尽,从而使服务陷入瘫痪。像这样,要进行网络攻击,必须深刻理解通信协议的工作方式,以及交换的是何种数据。此处只简单介绍相关概念,若想学习网络黑客攻击,必须认真阅读专业书籍。
(二)OSI 七层模型
OSI 七层模型是国际标准化组织(ISO)为解决所有网络通信中出现的问题而制定的开放系统互联参考模型。事实上,并非所有网络设备都严格按照 OSI 七层参考模型制造并区分功能,但 OSI 七层模型提供了进行学术研究与理解网络工作原理必需的概念。从第一层到第七层,各层功能区分很明确。数据自高层向低层移动时,在各层不断添加相应的头部与尾部。与之相反,数据包自低层向高层移动时,依次去除各层头部与尾部。数据包头部与尾部分别包含各层所需的元信息,这些信息组合成为通信协议。下面逐层介绍 OSI 七层模型。

- 应用层(Application)向操作计算机的人或发送信息的程序等提供服务。如:浏览器、FTP 传输程序、电子邮件客户端等
- 表示层(Presentation)将来自于应用层的数据转换为可在网络中传输的形式,或者将来自于会话层的数据转换为用户可以理解的形式。如:MEPG、JPEG 等
- 会话层(Session)在发送与接收数据的两个进程之间建立虚拟通信路径。
- 传输层(Transport)为可信的端对端(end-to-end)数据传送提供保障,并指定端口号,确定应该由哪个程序负责处理包。此外,还提供错误控制、流控制、重复性检查等功能。如:TCP、FTP、SCTP 等
- 网络层(Network)为两个系统通信选择最优路径。路由器在该层工作,提供错误控制、流控制功能。最具代表性的是通过 IP 地址进行识别。如:IP、IGMP、ICMP、X.25、路由器
- 数据链路层(Data Link)为两个系统之间的物理通信提供通信路径,并提供错误控制、流控制功能。最具代表性的是通过 MAC 地址进行识别。如:Ethernet、HDLC、ADCCP、网桥、交换机
- 物理层(Physical)为通过传输介质以 "位" 为单位进行的数据传送定义电气的、物理的细节特征,比如 Pin 配置、电压、电线等具体规格。如:集线器、中继器
OSI 七层模型中,网络通信功能被划分为不同层,这样各层的功能变化会对其他层产生最小影响,并且有助于针对各层开发独立设备,为技术的快速发展奠定基础。
(三)TCP/IP
TCP/IP 是世界范围内广泛使用的协议族。虽然它不像 OSI 七层模型那样是一种标准,但业界已经将其视为标准,被称为事实上(De facto)的通信协议。TCP/IP 协议大致分为 4 层,类似于 OSI 七层模型,各层的功能划分也非常明确。TCP/IP 协议各层功能与 OSI 七层模型大体一致,不再赘述。下面对具有代表性的几个协议进行讲解。

- 远程登录(Telnet)Telnet 协议支持用户使用终端登录远程计算机,为用户提供了在本地计算机完成远程主机工作的能力。在使用网络方面,终端与仿真程序不同。由于传送的数据未经加密处理,为了保证数据安全,目前大量使用 SSH 协议。
- FTP(File Transfer Protocol)FTP 用于通过网络传送大体积文件,其使用简单、数据传输速度快,故而得到广泛应用。但由于传送的数据,尤其认证时使用的 ID 与密码都是明文形式,所以存在诸多安全隐患。需要确保传输安全时,应当使用 SFTP(Secure FTP)协议。
- TCP(Transmission Control Protocol)TCP 传输控制协议为网络中的计算机提供了安全、有序、无差错的数据传输服务。TCP 是面向连接的协议,它保证交换数据的两台计算机在逻辑上总是连接状态。由于 TCP 总是与 IP 成对使用,所以将其统称为 TCP/IP,代表 TCP 协议与 IP 协议的组合。为了解决三次握手过程中发生的性能低下与安全问题,人们开发了 SCTP(Stream Control Transmission Protocol)协议。由于 TCP 协议是目前网络上应用最广的协议之一,所以黑客们不断利用其漏洞发动嗅探攻击、欺骗攻击、Land Attack、DoS 等多种攻击。
- UDP(User Datagram Protocol)与 TCP 协议类似,UDP 协议也用于在计算机之间传送数据。不同的是,它并不保证通信双方之间总存在逻辑连接。一般而言,发送方只负责发送数据,并不支持顺序控制、错误控制等安全机制。UDP 协议使用简单,且支持快速传输数据。在稳定的网络环境中,使用 UDP 比 TCP 更有利。
- IP(Internet Protocol)IP 协议以 IPv4 地址系统为基础,将数据包通过网络传送至目的地。IPv4 支持 32 位网络地址。由于目前对 IP 地址提出需求的设备呈现几何增长,相信基于 64 位地址的 IPv6 很快就会取代 IPv4。出于安全考虑,IPv6 本身就支持 IPSec,大大提高了网络通信的安全性。
- ARP(Address Resolution Protocol)ARP 协议从逻辑地址(IP)获取相应物理地址(MAC),在计算机交换数据包时,需要知道通信双方的物理地址。通常,我们熟知的基于 32 位的 IP 地址(ex:210.53.26.123)是供人类而非计算机识别的逻辑地址。计算机识别物理地址,即 MAC 地址(ex:00-1D-7D-9A-BB-62)。ARP 协议用于将逻辑地址(IP)变换为物理地址(MAC)。而 RARP(Reverse ARP)协议则用于根据物理地址获取相应的逻辑地址。
- ICMP(Internet Control Message Protocol)IP 协议缺少错误控制功能,为了弥补这一不足,人们设计了 ICMP 协议。借助 ICMP 协议,路由器可以传送 IP 包处理过程中发生的错误信息,网络管理员也可以用其向路由器或其他计算机请求获取特定信息。
TCP/IP 是网络中最常用的一种协议,上面只对 TCP/IP 协议做了简单介绍,请各位寻找相关专业书籍进行详细学习。有关 TCP/IP 的内容很多,这些知识是一名合格的黑客必须掌握的内容。DoS、包嗅探、会话劫持等大多数网络攻击技术都是针对 TCP/IP 进行的。
(四)DNS
DNS 将人们易于理解的域名变换为网络中使用的识别符(IP)。与 IP 类似,域名也由国际机构统一管理,各国都有域名注册代理机构。同一域名可以映射多个 IP 地址。分配给服务设备的 IP 地址发生改动时,只要更改 DNS 中的 IP 地址,即可一次性应用于全球所有系统。使用域名不仅能加深人们对服务的理解,也能大大方便人们连接并使用互联网。
比如,在浏览器地址栏输入网址www.naver.com后,程序首先会在系统的 hosts 文件中搜索已有的域名与 IP 地址。假设查找到记录为 140.100.90.9 www.naver.com,则浏览器会将 140.100.90.9 识别为 IP 地址,并进行连接请求 Web 服务。hosts 文件通常只用于测试,浏览器一般会在第一层 DNS 中查找域名对应的 IP 地址。一个全新的域名可能不存在于第一层 DNS,此时第一层 DNS 会向第二层 DNS 发送目录更新请求,更新自身数据库后,将相关 IP 地址发送给用户 PC。
利用 DNS 发动攻击的典型代表是域欺骗。黑客把 DNS 中的 IP 地址修改为仿冒网站的 IP 地址,将用户引导至仿冒网站,这样用户在仿冒网站中输入的 ID 与密码就会在毫不知情的情形下被窃取。发动域欺骗攻击时,黑客甚至不必攻击 DNS,只需修改 PC 中软件文件的内容即可成功。虽然有关 DNS 的内容很容易理解,但很显然,它是发动网络攻击的强大武器。

(五)路由
可以将网络简单理解为数千万台计算机通过数十万台路由器连接的系统。路由用于确定数据经由哪些路由器可以最快速度到达目的地。各台路由器通过与邻近路由器交换信息维护最佳路径信息。路由协议用于在路由器之间共享路由信息,确保所有路由器知道通往其他路由器的路径。
用户 PC 访问 Web 服务时,首先要通过 DNS 服务器查找 Web 服务器的 IP 地址,然后决定走哪条路到达目的地。出发地是用户 PC 连接的本地路由器。本地路由器查找自身路由表,搞清目的路由器所在位置。若在自身路由表中查找不到与目的路由器有关的信息,则向邻近路由器询问。如此反复,最终找到一条到达目的地的最优路径,然后发送数据包。
要想理解网络协议,必须先理解与路由有关的内容,只有这样才能知道数据包通过路由器走哪种路径到达目的地,也能找出问题数据包来自何处。理解路由有关内容对追踪黑客攻击痕迹非常有帮助。

六、Web
(一)概要
寻找漏洞以获取系统 root 权限,或者发动黑客攻击盗取重要信息时,最常用的技术就是 Web 技术。虽然防火墙、IPS、IDS 等可以阻止来自外部的大部分攻击,但在安全规则中,向外提供 Web 服务的 80 端口却被作为一个例外进行处理。最近,黑客攻击的趋势是利用 Web 技术盗取个人信息或者散布含有恶意代码的文件。
直到 21 世纪初期,大部分应用程序都是基于 C/S(Client/Server)环境开发的。C/S 环境创建有专用程序,由服务器中运行的进程对外提供一对一服务。C/S 技术不支持多样化的客户环境,存在应用程序修补困难以及两层架构扩展性与安全性等问题。
以 W3C(World Wide Web Consortium)为中心的标准化 Web 技术大力提倡使用 JSP、ASP、PHP 等服务器端脚本技术,并发展成为 IT 核心技术。昔日风光无限的 Power Builder、Visual Basic、Visual C++ 等 C/S 时代的强者渐渐失去影响力。技术的发展方向是,不受客户端环境影响,逐渐将重点更多地放在业务实现上。
对我们而言,这种 Web 技术不仅能够带来好处,还会导致许多安全问题。首先,对外提供 Web 服务的 80 端口与 443 端口在防火墙中总是处于开放状态。其次,基于 URL 的 GET 方式服务很容易遭受 SQL 注入等攻击。再次,用于完善 HTML 功能的 ActiveX 存在固有的结构缺陷,安全性较差。最后,随着网络的大力普及,恶意代码有了良好的扩散环境。此外还有太多 Web 安全问题,目前,大部分黑客攻击都是围绕 Web 展开的。

(二)HTTP
浏览器向 Web 服务器请求服务时,会根据 HTTP 请求协议发送数据。HTTP 请求协议由协议头与协议体组成,协议头含有方法类型、请求 URL 等服务处理所需的各种信息,而协议体则包含表单参数,与用户输入值对应。

Web 服务器接收服务请求后,执行内部逻辑,将结果创建为 HTML,并根据 HTTP 响应形式发送给客户端。HTTP 响应协议大致由状态码、内容类型、响应内容组成,其中状态码指示响应状态,内容类型指出传送的数据类型,响应内容是要展现给用户的结果。
| 类别 | 字段 | 说明 | 示例 |
|---|---|---|---|
| 请求 | Host | 提供服务的服务器域名与 TCP 端口信息 | Host: en.wikipedia.org:80 |
| User-Agent | 请求服务的客户端浏览器信息 | User-Agent: Mozilla/5.0 (X11:Linux x86_64; rv:12.0) | |
| Accept-Encoding | 可处理的编码信息 | Accept-Encoding: gzip, deflate | |
| Accept-Charset | 可处理的 Character set | Accept-Charset: utf-8 | |
| Accept-Language | 可处理的语言(供人使用) | Accept-Language: en-US | |
| Referer | 从哪个网页地址请求当前服务的信息 | Referer: http://en.wikipedia.org/wiki/Main_Page | |
| Cookie | 在上一个请求的响应头中包含于 Set-Cookie,再次传送设置的 Cookie 值 | Cookie: $Version=1; Skin=new; | |
| 响应 | Status | 用代码表示对请求处理结果的状态,200:正常处理,404:无法正常访问,500:服务器错误等 | Status: 200 OK |
| Date | 传送响应的日期与时间 | Date: Tue, 15 Nov 1994 08:12:31 GMT | |
| Server | 传送响应的服务器的操作系统与 Web 服务器类型 | Server: Apache/2.4.1 (UNIX) | |
| Content-Type | 响应数据的 MIME 类型 | Content-Type: text/html; charset=utf-8 | |
| Content-Encoding | 响应数据的编码信息 | Content-Encoding: gzip | |
| Set-Cookie | 客户端保存的 Cookie 信息 | Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1 | |
| 共同 | Cache-Control | 使用缓存时,设置缓存的生命周期,以秒为单位 | Cache-Control: max-age-3600 |
| Connection | 处理响应后,设置对连接的处理 | Connection: close | |
| Content-Length | 设置 HTTP 响应体的长度,以字节(8 bytes)为单位 | Content-Length: 348 |
(三)Cookie与会话
Web 技术提供了向浏览器保存数据的空间,称为 Cookie。Web 发展早期,用户认证信息大都保存在 Cookie 中,但由于存在安全隐患,目前人们只将简单的控制信息、会话 ID 信息保存于此。由于 Cookie 信息包含于 HTTP 协议头信息,所以可以将其用作在客户端与服务器之间传递信息的手段。会话是保存用户信息的 Web 服务器对象。一般而言,用户登录后,用户信息就会保存在会话之中,然后通过 Cookie 将会话 ID(用于标识会话的识别符)传递给浏览器。用户通过浏览器访问购物车时,Web 服务器会使用通过 HTTP 头传递的会话 ID(位于 Cookie)判断是否是认证用户。下面简单讲解基于会话的认证系统。
①创建会话:创建用于保存用户认证信息的会话。创建的会话由 Web 服务器管理,保存在 Web 服务器进程占用的内存中。
②传送会话 ID:创建会话时,会同时创建用于标识会话的 ID。为了判断相应客户端是否已经认证,在 HTTP 响应的 Set-Cookie 字段一同传送会话 ID。
③保存会话 ID:浏览器从 HTTP 响应头提取会话 ID 并添加到 Cookie。
④传送会话 ID:请求服务时,浏览器会将所有 Cookie 值放入 HTTP 请求头的 Cookie 字段,并进行传送。当然,这其中也包含会话 ID。
⑤识别会话:Web 服务器分析 HTTP 头,从中提取会话 ID。然后根据相应 ID 从自身会话列表提取相应值,进行认证。
Cookie 与会话是 Web 服务的核心技术之一。若想在黑客攻击过程中绕开认证处理,必须详细了解其工作原理。也就是说,黑客攻击程序必须实现在登录后向 Cookie 保存会话 ID 的机制。

七、总结
本文系统介绍了黑客攻击所需的技术基础,涵盖计算机结构、操作系统、应用程序、网络和Web等核心领域。首先阐述了计算机硬件组成原理及其运行机制,包括CPU、内存和周边设备的工作原理。其次详细讲解了操作系统的进程管理、内存管理和安全机制,以及不同编程语言的运行方式。在网络部分,重点分析了OSI模型、TCP/IP协议族和路由技术。最后深入探讨了Web技术的工作原理,特别是HTTP协议、Cookie和会话机制。文章强调,要成为一名合格的黑客,必须深入理解这些基础技术,而不仅是依赖自动化工具,只有掌握基本原理才能开发出创新的攻击方法