网络安全入门学习路线
(1)基础部分
基础部分是构建安全知识的基石,需要系统性地掌握以下内容:
1.1 计算机及系统原理
建议阅读以下经典书籍以建立底层认知:
- 《编码:隐匿在计算机软硬件背后的语言》【美】Charles Petzold
- 《深入理解计算机系统》【美】Randal E.Bryant
- 《深入解析 Windows 操作系统》【美】Russinovich, M.E.
- 《深入理解 Android 内核设计思想》林学森
- 《Android 系统源代码情景分析》罗升阳
1.2 计算机网络
重点学习 OSI 七层模型、TCP/IP 协议栈。理解网络协议的工作原理,包括 HTTP/HTTPS、DNS、TCP/UDP 等。熟悉网络设备(路由器、交换机、防火墙)的基本配置与工作原理。
1.3 Linux 系统及命令
目前 Web 服务器约 70% 运行在 Linux 之上,渗透测试人员必须熟练掌握 Linux 操作。 核心命令推荐:
ls,cd,pwd:目录管理cat,less,tail -f:文件查看与日志监控chmod,chown:权限管理ps,kill,top:进程管理netstat,ss,curl:网络状态与请求grep,awk,sed:文本处理tar,zip,unzip:压缩解压ssh,scp:远程连接与传输find,locate:文件查找du,df:磁盘空间检查
学习建议:掌握最常用的 10% 左右的命令适用于 90% 的工作场景。常见的 Linux 命令也就 50-60 个,不要囫囵吞枣,遇到不会的再查阅文档。
1.4 Web 框架
熟悉 Web 开发流程,前端 HTML、CSS、JavaScript 了解即可。后端 PHP 语言重点学习,切记不要按照纯开发的思路去学习语言,PHP 最低要求会读懂代码即可,当然会写最好,但不是开发。
1.5 数据库
需要学习 SQL 语法,利用 MySQL 学习对应的数据库语法。SQL 的一些高级语法可以了解,如果没有时间完全不学也不影响后续学习,毕竟大家不是做数据库分析师。
(2)学习一门编程语言
黑客与网络安全工程师的武器也是代码。想要成为安全工程师,首先要学会一门编程语言。
- Shell 脚本:掌握常用的 Linux 命令,能编写简单的 Shell 脚本,处理一些简单的事务,如批量扫描、自动化运维。
- C 语言(C++可选):C 语言没有复杂的特性,是现代编程语言的祖师爷,适合编写底层软件,还能帮助你理解内存、算法、操作系统等计算机知识,建议学一下。
- Python:如果你还不会任何计算机语言,建议从 Python 开始。它设计清晰,文档齐全,对初学者很合适。尽管是一门很好的初级语言,它非常强大、灵活,也适合做大型项目,是安全工具开发的首选。
(3)学习网络安全法
《国家网络空间安全战略》、《网络安全法》、《网络安全等级保护 3.0》等一系列政策/法规/标准的持续落地,网络安全产业从小众产业逐步发展成为国家战略性新兴产业。
网络安全对于大部分政企单位来说,已经从可选项变成了必选项甚至是强选项,不懂安全不做安全等于违法违规。技术本身并不罪恶,滥用技术才会导致罪恶!
(4)安全初体验
有了前面三步的打底,是时候接触一些网络安全的技术了。刚开始这个阶段,仍然不要把自己圈起来只学某一个方向的技术。建议广泛涉猎,见往事耳。
常见 Web 渗透使用工具与方法:
- HTML、CSS 和 JavaScript 简介
- OWASP Top 10 漏洞详解
- Web 漏洞扫描工具
- Web 渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)
常见漏洞原理简述
- SQL 注入:攻击者将恶意 SQL 语句插入到 Web 表单输入或页面请求的查询字符串中,欺骗服务器执行恶意的 SQL 命令。类型包括联合查询注入、布尔盲注、时间盲注等。
- XSS(跨站脚本攻击):攻击者在网页中嵌入恶意脚本,当用户浏览该网页时,脚本会在用户的浏览器端执行。分为反射型、存储型和 DOM 型。
- 文件上传漏洞:攻击者上传可执行的脚本文件(如 .php, .jsp)到服务器,从而获取服务器控制权。防御需限制文件后缀、内容检测及重命名。
- CSRF(跨站请求伪造):诱导用户在已登录状态下访问恶意链接,从而在不知情的情况下执行非本意操作。
(5)明确就业岗位方向
在第三步中,慢慢发现自己的兴趣点,是喜欢做各种工具的开发,还是喜欢攻破网站,还是痴迷于主机电脑的攻击。
安全岗位的大体工作内容或职责
- 售后工程师:安全产品的售后服务工作,包括安全产品的交付实施、售后支撑、产品调试上架。
- 售前工程师:协助销售完成跟单,配合销售拿下项目,负责技术方案设计与痛点解决。
- 渗透测试工程师:模拟黑客对目标业务系统进行攻击,点到为止,发现潜在风险。
- 销售:负责市场拓展与客户关系维护。
- 安全开发工程师:开发安全产品,如 Web 应用防火墙(WAF),需懂安全原理。
- 安全运维工程师:分析日志,升级策略,定期检查业务系统安全性,排查内网威胁。
- 应急响应工程师:客户业务系统被攻击,快速定位安全问题,恢复业务,必要时取证报警。
- 等级保护测评师:按照国家要求,协助客户检查业务系统是否满足等级保护的要求。
- 安全服务工程师:涵盖漏洞扫描、基线检测、渗透测试、风险评估等工作。
(6)学习方法
- 看书看视频学习:这是最最基础的。
- 实际动手:开发路线多写代码,阅读优秀开源代码;二进制路线多分析样本,编写 EXP;渗透测试多拿网站练手(合法方式)。
- 渗透实战操作:
- 掌握渗透的整个阶段并能够独立渗透小型站点。
- 网上找渗透视频看并思考其中的思路和原理。
- 自己找站点/搭建测试环境进行测试,注意隐藏好自己,遵守法律。
- 研究 PTES 渗透测试执行标准。
- 研究 SQL 注入的种类、注入原理、手动注入技巧。
- 研究文件上传的原理,如何进行截断、双重后缀欺骗、解析漏洞利用。
- 研究 XSS 形成的原理和种类。
- 研究 Windows/Linux 提权的方法和具体使用。
- 打 CTF:多参与一些网络安全比赛,接近实战的环境下锻炼动手能力。
- 混圈子:多混一些安全大牛出没的社群、社区、论坛,掌握行业信息,了解最新技术变化趋势。
(7)岗位内推&面试
个人强烈感觉面试因人而异,对于简历上有具体项目经历的同学,面试官会着重让你介绍自己的项目。因此对于自己的项目,面试前建议做一次复盘,最好能用文字描述出细节。
面试题本质上只是一种'见识',并不能实质上提升自己的水平,希望大家不要太局限于面经,按自己的节奏学就行了。
面试复盘与技术问答
-
MVC 框架详细说一下 MVC 即 Model(模型)、View(视图)、Controller(控制器)。Model 负责数据逻辑,View 负责界面展示,Controller 负责接收请求并调用 Model 和 View。这种模式实现了业务逻辑与界面的分离。
-
详细介绍一下 SQL 注入 SQL 注入是利用应用程序未对用户输入进行充分验证,将恶意 SQL 代码拼接到查询语句中执行。常见防御方法包括使用预编译语句(Prepared Statements)、参数化查询、输入过滤等。
-
XSS 与 CSRF 的区别 XSS 是攻击者向 Web 页面植入恶意脚本,针对的是用户浏览器;CSRF 是诱导用户点击恶意链接,针对的是用户身份认证状态。XSS 需要注入代码,CSRF 需要利用 Cookie 自动发送请求。
-
CSRF 的原理以及如何防范 原理是利用浏览器自动携带 Cookie 的特性。防范方法包括添加 Token 验证、检查 Referer 头、使用 SameSite Cookie 属性等。
-
讲一下 XXE 的原理 XXE(XML External Entity Injection)是在 XML 解析过程中,攻击者定义外部实体,导致服务器读取本地文件或发起 SSRF 攻击。防御方法是禁用外部实体解析。
-
文件上传,详细说说 文件上传漏洞通常由于服务端未严格校验文件类型、扩展名或内容导致。防御措施包括白名单校验扩展名、修改文件名、限制上传目录执行权限、使用 WAF 拦截等。
-
常见的 Web 容器有哪些 Apache, Nginx, IIS, Tomcat, JBoss, WebLogic 等。
-
密码学的对称密码与非对称密码有哪些 对称加密:DES, 3DES, AES, RC4。非对称加密:RSA, ECC, DSA。
-
MD5 是不是对称加密 MD5 是哈希算法,不是加密算法,不可逆。对称加密是可逆的。
-
反序列化的原理 反序列化是将字节流还原为对象的过程。如果反序列化过程未校验数据来源,攻击者可构造恶意对象触发任意代码执行。防御方法是避免反序列化不可信数据,或使用安全的序列化格式。
-
Java 的多线程 Java 多线程通过 Thread 类或 Runnable 接口实现,涉及线程生命周期、同步锁(synchronized)、并发包(java.util.concurrent)等机制。
-
之前 Python 学到什么地方 根据实际掌握情况回答,如爬虫库(requests, scrapy)、Web 框架(Flask, Django)、安全工具开发(Scapy, Socket)等。
结语
网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道,因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做'正向'的、结合'业务'与'数据'、'自动化'的'体系、建设',才能解人才之渴,真正的为社会全面互联网化提供安全保障。

