PortSwigger网络安全学院学习路径

本文指导新手通过网络安全学院的逐步学习,从服务器端SQL注入到客户端XSS,再到高级主题如不安全反序列化,提供实践实验和认证建议。

本文翻译自:Learning path | Web Security Academy - PortSwigger

 

以下是如何充分利用网络安全学院的方法

        如果你是网络安全新手,可能很难知道从哪里开始。这就是为什么我们给出这条建议的学习路径,为你指明正确的方向。我们建议你按顺序完成实验,但是如果遇到困难,那就继续下一个主题。一旦你增长了技能,你可以再回来解决这些有挑战的实验。

        当你开始培养你的网络安全测试技能时,你可以尝试考取我们的Burp Suite从业者认证来测试自己的技能。在你准备尝试Burp Suite从业者认证考试之前,你应该能够轻松完成网络安全学院中所有标有Practitioner(从业者)或更低级别的实验。完成实验没有固定的时间框架,但你必须能够在不需要访问所提供的解决方案的情况下完成。

服务器端主题

        对于小白来说,我们推荐从服务器端主题开始。这些漏洞通常更容易学习,因为您只需要了解服务器上发生了什么。我们的学习材料和实验将帮助您开发一些核心知识和实用的技能。

  1. SQL注入
  2. 认证漏洞
  3. 目录穿越
  4. 命令注入
  5. 业务逻辑漏洞
  6. 信息泄露
  7. 访问控制
  8. SSRF
  9. XXE注入

客户端主题

        客户端漏洞更加复杂,这会使它们稍微更具挑战性。这些学习材料和实验将帮助你在已经学习的服务器端技能基础上,教你如何识别和利用一些有挑战的客户端漏洞。

  1.  XSS
  2. CSRF
  3. CORS
  4. 点击劫持
  5. 基于DOM的漏洞
  6. WebSockets漏洞

高级主题

        这些主题不一定更难掌握,但它们通常需要更深的理解和更宽的知识范围。我们建议在进行这些实验之前先掌握基础知识,其中一些实验是基于我们世界级研究团队发现的开创性技术。

  1. 不安全的反序列化
  2. SSTI
  3. Web缓存投毒
  4. HTTP_Host头攻击
  5. HTTP请求走私
  6. OAuth认证
### 使用 PortSwigger 工具扫描安全漏洞时的注意事项与 Null 相关问题 在使用 PortSwigger 工具(例如 Burp Suite)进行安全漏洞扫描时,Null 值可能出现在多种场景中,尤其是在测试应用程序对无效输入或边界条件的处理能力时。以下是一些关于 Null 的关键点以及如何在扫描过程中考虑这些因素: #### 1. Null 在编程中的意义 Null 的本质是表示“无值”或“未初始化”,但在不同的上下文中其行为可能有所不同。例如,在 C/C++ 中,Null 是一个特殊的指针值[^2],表示该指针不指向任何有效的内存地址。而在 Java 中,Null 表示对象引用为空,可能导致空指针异常[^1]。 #### 2. Null 在 Web 应用中的影响 在 Web 应用程序中,Null 值可能会导致以下问题: - **SQL 注入**:如果应用程序未正确验证用户输入,Null 值可能被误用为 SQL 查询的一部分,从而导致意外行为。 - **空指针异常**:在后端逻辑中,如果未正确处理 Null 值,可能会导致程序崩溃。 - **参数缺失**:某些 API 可能将 Null 视为参数缺失,这可能导致错误的业务逻辑执行。 #### 3. 使用 PortSwigger 工具检测 Null 相关问题 PortSwigger 工具(如 Burp Suite)可以通过以下方式帮助检测 Null 相关的安全问题: - ** fuzzing 测试**:通过向应用程序发送包含 Null 值的请求,观察其响应是否正常。例如,可以将表单字段设置为 Null 或空字符串,检查服务器是否返回错误信息。 - **动态分析**:利用 Burp Scanner 的主动扫描功能,模拟各种边界条件(包括 Null 输入),以发现潜在漏洞。 - **手动测试**:在 Burp Repeater 中构造特定的请求,将关键参数替换为 Null,观察应用程序的行为。 #### 4. 示例代码:检测 Null 值引发的异常 以下是一个简单的 Java 示例,展示了如何避免因 Null 值导致的空指针异常[^1]: ```java import java.util.HashMap; public class NullCheckExample { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); String key = "test"; // 检查是否存在键值对,避免空指针异常 if (map.containsKey(key)) { int count = map.get(key) + 1; map.put(key, count); } else { map.put(key, 1); } System.out.println(map); } } ``` #### 5. 动态内存分配中的 Null 检查 在 C/C++ 程序中,动态内存分配失败时会返回 Null 指针[^3]。因此,在使用 malloc 或 calloc 分配内存时,必须检查返回值是否为 Null,以确保程序不会尝试访问无效内存地址。 ```c #include <stdio.h> #include <stdlib.h> int main() { int *ptr = NULL; // 尝试分配内存 ptr = (int *)malloc(sizeof(int)); if (ptr == NULL) { printf("Memory allocation failed\n"); return -1; } *ptr = 10; printf("Value: %d\n", *ptr); free(ptr); return 0; } ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值