零基础学习漏洞挖掘指南与方法
Web 漏洞挖掘
基础知识
学习 Web 漏洞挖掘首先要熟悉 Web 开发的一些基础知识,主要包括:
- 前端相关知识:HTML、CSS、JavaScript 及 PHP,能够认识基本的语句、逻辑,掌握语言的基本特性。
- 网络协议相关知识:熟悉 HTTP、TCP/IP、以及其他的应用层协议。
- 数据库相关知识:MySQL、SQL Server、Oracle、MongoDB 等主流数据库,掌握常见的数据库指令及语句。
- 编程语言:熟练掌握并使用 Java、Go、Python 等主流的编程语言,熟悉基本的编程与调试技术。
使用的工具
工欲善其事,必先利其器。Web 漏洞学习过程中借助一些工具能够提高工作效率和成功率。以下介绍几款学习 Web 安全必须掌握的工具:
-
SQLMap SQLMap 是一个自动化的 SQL 注入工具,其主要功能是扫描、发现并利用给定的 URL 的 SQL 注入漏洞,内置了很多的绕过插件,支持的数据库有:MySQL、Oracle、PostgreSQL、Microsoft SQL Server、SQLite 等,采用基于布尔类型的盲注、基于时间的盲注、基于报错的盲注、联合查询注入以及堆查询注入等 5 种 SQL 注入技术。
-
Nmap Nmap 是一款开放源代码的网络探测和安全审核工具。它被设计用来快速扫描大型网络,包括主机探测与发现、开放端口情况、操作系统与应用服务指纹识别、WAF 识别及常见的安全漏洞。
-
Burp Suite Burp Suite 是一款集成化的渗透测试工具,包含了很多的功能,可以帮助我们高效完成对 Web 应用程序的渗透测试和攻击。其由 Java 语言编写,可跨平台。
-
其他工具 Kali、漏洞扫描工具、渗透测试框架(MSF、Goby、Xray 等)、Webshell 工具,如果编程能力较强也可以在学习过程中开发自己的工具并在学习中不断积累,收集一些优秀的第三方工具。
漏洞挖掘方法
了解常见漏洞原理
Web 漏洞常见的类型主要有:XSS 攻击、文件包含、文件上传、SQL 注入、CSRF、SSRF、逻辑漏洞等。学习历史漏洞来掌握各种 Web 漏洞形成的原因、漏洞利用工具的编写技巧以及常用工具的熟练应用,是入门学习 Web 安全及漏洞挖掘的第一步。使用本地或第三方的靶场环境进行漏洞的复现验证及原理分析,编写 PoC 或 EXP 进行测试。以下是几个常见的 Web 靶场环境:
- OWASP TOP 10:开放式 Web 应用程序安全项目(OWASP)提供有关计算机和互联网应用程序的信息。其虚拟机含有各种具有已知漏洞的应用程序,可以帮助研究人员快速开展 Web 漏洞的研究。
- DVWA:Damn Vulnerable Web Application 是一个用来进行安全脆弱性鉴定的 PHP/MySQL Web 应用,旨在为安全专业人员测试自己的专业技能和工具提供合法的环境。包括了 XSS、SQL 注入、文件上传等 10 多种类型的 Web 攻击,每一种类型可设置为 Low、Medium、High、Impossible 级别。
- Vulhub:基于 Docker 和 Docker Compose 的漏洞环境集合,进入对应目录并执行一条语句即可启动一个全新的漏洞环境,让漏洞复现变得更加简单。
- Upload-labs:总结所有上传漏洞类型的靶场,学习上传漏洞原理,复现上传漏洞必备靶场环境。
- SQL-labs:一款学习 SQL 注入的开源平台,共有 75 种不同类型的注入。
通过实战提高
当熟悉了常见的 Web 漏洞形成的原理及漏洞利用方式之后,需要在实战中磨练技能、积累经验。比如可以参加 CTF 比赛、公益的 SRC 等互动提高实战技术水平。
漏洞挖掘技术
除了以上常规的渗透测试来挖掘漏洞之外,可以学习安全审计、白盒测试、黑盒测试、代码审计等技术来提高漏洞挖掘的效率。
书籍推荐
《Web 安全攻防》、《白帽子讲 Web 安全》、《Web 前端黑客技术揭秘》、《图解 HTTP》、《TCP/IP 详解》、《HTTP 权威指南》、《SQL 注入攻击与防御 (第 2 版)》、《Web 安全深度剖析》、《Web 应用安全权威指南》。
二进制漏洞挖掘
二进制漏洞挖掘的对象一般是操作系统如 Windows、Linux 等,以及常见的客户端软件如办公软件类 Office、浏览器 Chrome/Edge/Firefox 等为主。
基础知识
- 汇编:汇编是进行软件逆向分析的基石,需要掌握基本指令,如寻址方式、跳转及条件判断、循环等。
- C/C++ 基础:掌握指针、虚函数、继承等概念以及函数传参的方式,内存管理,能够开发。
- 操作系统:了解系统架构、关键组件、PE/ELF 文件格式、DLL 机制、中断与异常、内存管理等知识,以及操作系统的安全机制,如 Windows 中的 GS、DEP、ASLR、SEH 等。
- 软件逆向:认识数据在内存中的表现形式、认识常见编程语言的启动函数,能够找到程序的入口点、观察表达式、流程控制语句,认识变量、数组、指针、结构体、类等数据类型在内存中的形式。以及加壳、混淆等、反调试等技术。
使用的工具
在研究二进制漏洞时需要分析软件运行机理,主要以逆向技术和调试技术为主。以下是一些常用的逆向及调试工具:
- IDA Pro:一款交互式反汇编工具,功能强大、操作复杂。需要熟练其快捷键、常用的插件等。
- OllyDbg:一种具有可视化界面的 32 位汇编分析调试器,是一个 Ring3 级调试器,非常容易上手。同时还支持插件扩展功能。
- x64dbg:Windows 系统下非常优秀的 64 位调试器,与 OllyDbg 十分相似。提供了类似 C 的表达式解析器、全功能的 DLL 和 EXE 文件调试、IDA 般的侧边栏与跳跃箭头等功能。
- WinDbg:微软发布的一款免费而十分强大的调试工具。可用于调试内核模式和用户模式代码,来分析故障转储,并检查代码时 CPU 寄存器执行。
- GDB:GNU Debugger 是 UNIX 及 UNIX-like 下的强大调试工具,可以调试 Ada, C, C++, ASM, Minimal, D, Fortran, Objective-C, Go, Java, Pascal 等语言。
其他工具:PE/ELF 文件格式解析工具、PE 文件解析工具、查壳/脱壳工具、进程监控工具、流量检测工具等。
漏洞挖掘的方法
明确目标
明确目标即你将要选择什么作为你漏洞挖掘的对象,是操作系统还是应用软件?根据工作的需求及个人偏好先确定目标,然后进行大量分析训练,不断积累经验。比如,可以选择 Windows 内核漏洞、Office 漏洞或者 Chrome、Edge 等浏览器的漏洞。
信息收集
想要挖掘某软件的漏洞,首先第一步是对该软件在历史上出现过哪些重大的漏洞有清晰的认识。因此当明确了目标之后就开始对该目标的历史漏洞信息进行梳理,包括:软件的安装版本、漏洞复现的环境限制、漏洞详细信息、他人复现的漏洞分析报告,以及最主要的是收集漏洞的 POC、EXP 及漏洞利用样本。
漏洞分析
当具备了分析漏洞所需的基本条件之后,开始搭建漏洞复现环境,利用 POC/EXP 对漏洞进行复现;然后对漏洞进行调试,详细分析漏洞形成原因,并尝试编写漏洞利用的程序。务必做到对每个漏洞的原理、利用方式都如数家珍。
漏洞挖掘
经过一段时间的训练,对某类软件的漏洞成因等有了深刻的认识之后,就可以进行此类软件的漏洞挖掘,掌握一些常用的漏洞挖掘方法:补丁比较、污点追踪、模糊测试等提高效率。
书籍推荐
《IDA Pro 权威指南》、《C++ 反汇编与逆向技术揭秘》、《漏洞战争:软件漏洞分析精要》、《0day 安全:软件漏洞分析技术》、《加密与解密》。
总结
持续实践是提升安全技能的关键。建议结合经典书籍与实战比赛积累经验,持续提升安全审计与代码审计能力。


