# 前言
我本身并不是学习 web 方向的,所以这里也只是收集整合了一些资料,简单介绍一下 web 方向的学习内容。
web 安全的内容相对较多,任何一个知识面都是永无止境的,web 安全前期尽量做到提升自己的攻击面 (广度),然后再选择一个自己喜欢 or 擅长的方向进行深入学习。不建议专攻开发再转安全,因为单单是 web 安全方向就很广,并且新技术迭代的很快,一味地学习开发的知识效率并不高,而是讲究循序渐进地学习。
比如说在学习一个漏洞的时候,先了解该漏洞需要哪些基础知识,再去专项学习有关的开发知识。在学习的过程中也需要有所取舍,比如我就是想要 JAVA 安全, PHP 可不可以只会一点点甚至不会,当然可以。所以建议在学习之前,先把整份资料看完, 然后有取舍的做规划
# web 安全大致方向
安全研究
渗透测试
红蓝对抗
武器开发
# 0x00 安全素养
# 网络安全法
不要违法,不要违法,不要违法。
参考资料
https://baike.baidu.com/item/ 中华人民共和国网络安全法
# 0x01 开发能力
以下语言可以先学习基础语法,有需求或者喜欢再去选择语言深入,不同语言有着各自的优点,平时可以开发几个项目练练手,这里只是一个参考,具体进工作室后,师兄师姐会详细指导
# 1.1 C
C 的基本语法
尽量做到比班上绝大多数同学的进度多上一截,课堂上也能很好地回顾知识点 (如果听课的话),把《C 程序设计》认真学好。
C 语言学习的是面向过程思想,是学习编程语言的起点,把 C 语言学好,再去学习其他语言也就大同小异,并且后期如果接触系统安全,c 语言也是有很大帮助。
# 1.2 MySQL
学习库,表,列之间的关系
mysql 的基础语法
能够日常增删查改
mysql 语言特性
三大范式
把大三的《数据库系统》认真学好
# 1.3 Linux
学习能满足日常需求的指令
linux 下常见系统文件的作用
linux 下项目的部署
参考资料
l 《Linux 就该这么学》
l B 站大学
# 1.3 PHP
作为世界上最好的语言,大部分中小型企业开发以及 CTF 比赛考点会使用它。
PHP 的基本语法
PHP 语言特性
原生 PHP 与 MySQL 数据库的连接
在 linux 部署 PHP 项目
常用中间件的使用
php 面向对象语法
php MVC 框架基本结构
经典 MVC 框架的简单应用
参考资料
l https://www.runoob.com/php/php-tutorial.html
# 1.4 前端
网页的美化以及性能和功能的一部分实现,也与一些漏洞脱离不了关系
前端三剑客的基础语法 (html,javascript,css)
JavaScript 原型链原理
参考资料
l https://www.w3school.com.cn/html/index.asp
l https://www.w3school.com.cn/js/index.asp
l https://www.w3school.com.cn/css/index.asp
l 《JavaScript DOM 编程艺术》
# 1.5 Python
python 基础语法
python 常用模块的使用
python 正则表达式的使用
python 爬虫的基本编写
python 多线程多进程的使用
python 异步编程
参考资料
l https://zh-google-styleguide.readthedocs.io/en/latest/google-pythonstyleguide/contents/
l https://www.bilibili.com/video/BV144411A7L4
l 《Python 编程:从入门到实践》
# 1.6 JAVA
java 基础语法
java 面向对象语法
javaweb 常用对象的使用
java 常见框架基本结构
常用中间件的使用
参考资料
l http://www.java1234.com/javaxuexiluxiantu.html
l 《Head First Java》
l 《Java 核心技术》
l 《Java 疯狂讲义》
l B 站搜视频
# 1.7 Git&GitHub
学会使用 Git 将本地仓库 push 到 GitHub
在 GitHub 上找项目
参考资料
l https://www.bilibili.com/video/BV1Xt411g7TL
# 1.8 Golang
go 语言基础
go 语言并发特性
# 1.9 计算机网络
了解基本的 TCP、IP、HTTP、HTTPS 把大二的《计算机网络》认真学好
# 1.10 常见 Web 框架
ThinkPHP
Spring、SpringMVC、SpringBoot mybatis Flask Django
参考资料
l https://www.kancloud.cn/manual/thinkphp6_0/1037479
l B 站搜视频
# 1.11 设计模式
理解常见设计模式
参考资料
l https://www.runoob.com/design-pattern/design-pattern-tutorial.html
l 《设计模式之禅》
# 1.12 Docker
Linux 环境下 Docker 的安装会用 Docker 部署项目
docker-compose
参考资料
l https://docs.docker.com/
l B 站搜视频
# 0x02 Web 安全基础
# 2.1 常用工具
# Brup Suite
Brup Suite 是一款基于 Java 开发的 Web 安全领域的跨平台工具,其集成了很多用于发现常见 Web 漏洞的模块,如 Proxy、Spider、Scanner、Intruder、Repeater 等。并且所有模块共享一个能处理并显示 HTTP 消息的扩展框架,模块间可以无缝交换信息。
# Sqlmap
Sqlmap 是一款开源的渗透测试工具,可以自动检测并利用 SQL 注入漏洞。遇到一些需要进行绕过操作的,可以调用 Sqlmap 的一些 Tamper 或者自行编写 Tamper 来进行绕过。
# Nmap
Nmap 可以快速扫描主机提供什么服务,这些服务运行什么操作系统,还可以探测这些主机用了什么类型的报文过滤器或防火墙,还有其他一些实用的功能。
Nmap 扫描器还支持自定义扫描脚本,如 SQL 注入检测脚本、SMB 漏洞扫描脚本、FTP 爆破脚本。
# Chrome/Firefox
Chrome/Firefox 虽然是浏览器,但是其庞大的插件库中,有很多插件是日常和 CTF 比赛中比较常用的。
# 浏览器插件
开发者工具 (浏览器自带)
是 Chrome/Firefox 自带的开发者工具,其集成了众多开发工具,可以对网页的元素、样式、脚本进行实时编辑、调试和监控。
Proxy SwitchOmega
一款可以在多个代理配置文件之间快速切换的插件。
EditThisCookie
EditThisCookie 是一个 Cookie 管理器,可以方便地添加、删除、修改、查询和锁定站点地 Cookies。
Wappalyzer
Wappalyzer 可以方便地查看当前站点地服务器型号、版本、服务器端语言等信息,不过有些题目会造假信息,干扰判断。
# 2.2 工具的使用
工具只是方便我们渗透的流程,前期建议不过于依赖工具,尝试手动利用跟学习原理
# 2.3 漏洞原理
熟悉基本漏洞类型的原理与利用,参考 OWASP top 10。
参考资料
l http://www.owasp.org.cn/owasp-project/2017-owasp-top-10
l https://ctf-wiki.github.io/ctf-wiki/web/introduction-zh/
l https://wiki.wgpsec.org/knowledge/web/
l https://wizardforcel.gitbooks.io/web-hacking-101/content/
l https://www.bugbank.cn/live/xiaobai
l 《白帽子讲 Web 安全》
l 《精通脚本黑客》
# 2.4 常见 web 漏洞
以下列举了常见的漏洞
# SQL 注入
通过在用户可控参数中注入 SQL 语法,破坏原有 SQL 结构,达到编写程序时意料之外结果的攻击行为。其成因可以归结为以下两个原因叠加造成的:
1. 程序编写者在处理应用程序和数据库交互时,使用字符串拼接的方式构造 SQL 语句
2. 未对用户可控参数进行足够的过滤便将参数内容拼接进入到 SQL 语句中
# XSS 注入
跨站脚本攻击(Cross Site Scripting),为不和层叠样式表(Cascading Style Sheets,CSS)的缩写混淆,故将跨站脚本攻击缩写为 XSS。恶意攻击者往 WEB 页面里插入恶意 HTML 代码,当用户浏览该页之时,嵌入其中 Web 里面的 HTML 代码会被执行,从而达到恶意攻击用户的特殊目的。
# RCE (命令执行)
当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如 PHP 中的 `system`、`exec`、`shell_exec` 等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成命令执行攻击。这里还是主要以 PHP 为主介绍命令执行漏洞,Java 等应用的细节待补充。
# 文件包含
如果允许客户端用户输入控制动态包含在服务器端的文件,会导致恶意代码的执行及敏感信息泄露,主要包括本地文件包含和远程文件包含两种形式。
# CSRF 跨站请求伪造
跨站请求伪造(Cross-Site Request Forgery,CSRF)是一种使已登录用户在不知情的情况下执行某种动作的攻击。因为攻击者看不到伪造请求的响应结果,所以 CSRF 攻击主要用来执行动作,而非窃取用户数据。当受害者是一个普通用户时,CSRF 可以实现在其不知情的情况下转移用户资金、发送邮件等操作;但是如果受害者是一个具有管理员权限的用户时 CSRF 则可能威胁到整个 WEB 系统的安全。
# SSRF 服务器端请求伪造
SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF 攻击的目标是从外网无法访问的内部系统。
# 文件上传
在网站的运营过程中,不可避免地要对网站的某些页面或者内容进行更新,这时便需要使用到网站的文件上传的功能。如果不对被上传的文件进行限制或者限制被绕过,该功能便有可能会被利用于上传可执行文件、脚本到服务器上,进而进一步导致服务器沦陷。
# CTF
在 CTF 平台上刷题
参加 CTF 比赛
# CTF 平台
攻防世界
bugku
buuoj
HACKTHEBOX
ctfhub
# 0x03 实战
在这个阶段,需要有一定语言与漏洞基础,可以开始尝试深入研究一两个方向,最后再选择一个方向深入,选择前可以上网搜索以及与师兄师姐多做交流,了解好自己喜欢 / 擅长的方向
# 4.1 代码审计
常见审计语言有 PHP JAVA PYTHON(比如 java 有 Java 的命令执行、反序列化、JNDI 注入、框架漏洞等等),可以先尝试后选择一门喜欢的进行深入
在网上找开源项目,跟着文章去动态调试,学习寻找漏洞的思路,完全熟练后可以尝试独立挖掘漏洞
参考资料
l https://javasec.org/
# 4.2 漏洞复现
复现 Vulhub 上的漏洞复现最近爆出来的有详情的漏洞以及学会搭建靶场,复现 Nday 是一方面,学习思路才是更重要的,时常思考,这个漏洞他是怎么挖掘到的呢?如果在没有详情的情况下,只有官方通告,我要如果复现这个漏洞呢?有了前面的经验,可以开始复现最近爆出来的没有详情的漏洞,这个才是比较有价值的事情
参考资料
l https://vulhub.org/#/environments/
l https://wiki.bylibrary.cn/
# 4.5 渗透 & SRC 实战
参加补天众测,各大平台 SRC 项目,重点关注 SSRF XSS SQL 信息泄露 越权 逻辑漏洞。多练习信息收集(大有门路),关注最新披露漏洞及 poc。
对已 Getshell 的站点,在获得授权之后,可以尝试进行内网渗透。这个程度需要自己把控,注意不要窥探过多信息,不要产生过多负面影响。内网经验绝对是加分项。
# 4.5 武器开发
开发安全工具,可以根据上面几个方向选择自己要开发的武器类型,前期建议多做尝试
参考资料
https://github.com/We5ter/Scanners-Box