Python Web安全入门:从爬虫到渗透测试的自动化实战

📅 2026/8/10 1:41:41
Python Web安全入门:从爬虫到渗透测试的自动化实战
1. 项目概述为什么是Python Web安全如果你对网络安全感兴趣或者是一名正在学习Python的开发者想把自己的编程技能应用到更“硬核”的领域那么“Python Web安全”这个组合绝对是你绕不开的黄金赛道。我从业这些年见过太多人要么只懂Python写业务逻辑对安全一窍不通要么对安全概念头头是道却写不出几行能用的脚本。能把两者结合起来意味着你不仅能发现问题更能自动化地验证问题、利用问题甚至构建防御方案这种能力在实战中价值连城。这个领域听起来高大上但入门路径非常清晰爬虫和渗透测试。爬虫是你的“眼睛”和“手”让你能自动化地收集目标信息理解网站结构渗透测试则是你的“大脑”和“武器库”基于收集的信息运用安全知识去发现漏洞。用Python将这两者串联你就拥有了一套从信息收集到漏洞验证的自动化工作流。这不仅仅是学习几个工具而是构建一种主动的安全思维和工程化解决问题的能力。无论你是想从事安全研发、渗透测试还是仅仅想加固自己的Web应用从这里开始都是最务实的选择。2. 环境搭建与核心工具链配置工欲善其事必先利其器。一个高效、隔离的Python开发环境是安全研究的基础胡乱安装库和工具会导致版本冲突让后续学习举步维艰。2.1 Python环境隔离虚拟环境的必要性我强烈建议你从第一天就使用虚拟环境。系统自带的Python环境就像你的“客厅”所有项目客人都混在一起很容易把环境搞得一团糟。虚拟环境则是为每个项目准备的独立“房间”。对于新手我推荐使用venv它是Python 3.3自带的无需额外安装。# 1. 为你的安全学习项目创建一个专属目录并进入 mkdir python-web-security-lab cd python-web-security-lab # 2. 创建名为 venv 的虚拟环境 python3 -m venv venv # 3. 激活虚拟环境 # 在 Windows 上 venv\Scripts\activate # 在 macOS/Linux 上 source venv/bin/activate激活后你的命令行提示符前通常会显示(venv)这意味着之后所有pip install的操作都只影响这个独立环境。退出虚拟环境只需输入deactivate。注意很多教程会推荐virtualenv或conda但对于纯Python的Web安全学习venv足够简单和轻量。关键是养成“一个项目一个环境”的好习惯。2.2 代码编辑器与IDE选择VSCode实战配置记事本和基础编辑器会严重拖慢你的效率。Visual Studio Code (VSCode) 是目前最受开发者欢迎的免费编辑器之一对Python支持极佳。安装VSCode从官网下载安装。安装Python扩展在VSCode扩展市场搜索并安装官方Python扩展由Microsoft发布。它会提供代码补全、 linting、调试等核心功能。选择解释器按CtrlShiftP(Windows/Linux) 或CmdShiftP(macOS)输入 “Python: Select Interpreter”然后选择你刚创建的虚拟环境路径下的python可执行文件例如./venv/Scripts/python.exe或./venv/bin/python。推荐安装的实用扩展Pylance: 更强的代码补全和类型提示。Code Runner: 一键运行代码片段。Rainbow CSV: 高亮CSV文件查看扫描结果时更清晰。Thunder Client或REST Client: 用于快速发送HTTP请求测试API接口比命令行curl更直观。配置好后你可以在VSCode中直接打开项目文件夹享受集成终端、代码调试等便利。2.3 基础依赖库安装构建你的武器库基石在激活的虚拟环境中一次性安装以下核心库。这些是后续爬虫和渗透脚本的基石。pip install requests beautifulsoup4 lxmlrequests: HTTP库的“瑞士军刀”。比Python内置的urllib更简单优雅用于发送所有类型的HTTP请求。这是你最重要的工具没有之一。beautifulsoup4(bs4): HTML/XML解析库。当requests拿到网页HTML后bs4帮你像查询数据库一样从中提取需要的数据如表单、链接、特定文本。lxml: 一个解析器。beautifulsoup4本身不解析它需要指定一个后端解析器lxml速度快、功能强通常是最佳选择。安装完成后可以写一个简单的测试脚本test_env.py来验证import requests from bs4 import BeautifulSoup response requests.get(http://httpbin.org/get) print(f状态码: {response.status_code}) print(f响应头: {response.headers}) # 假设我们解析一个HTML字符串 html_doc htmlbodyh1Hello, Security World!/h1/body/html soup BeautifulSoup(html_doc, lxml) print(f解析出的标题: {soup.h1.text})运行它如果一切正常说明你的基础环境已经就绪。3. 爬虫核心信息收集的艺术与边界爬虫在安全领域首要目的不是“偷数据”而是合规地进行信息收集Reconnaissance。了解目标网站的结构、目录、技术栈、潜在入口点是所有渗透测试的第一步。3.1 Requests库深度使用超越GET请求大多数人只会用requests.get()但实战中远不止如此。会话保持与Cookie处理很多网站需要登录后才有权访问某些页面。requests.Session()对象可以自动管理Cookies模拟浏览器行为。import requests # 创建一个会话对象 session requests.Session() # 1. 模拟登录以假设的登录接口为例 login_url https://example.com/login login_data {username: test, password: test123} # 通常登录是POST请求 login_response session.post(login_url, datalogin_data) # 检查登录是否成功实际中需根据返回内容判断如跳转、特定文本 if login_response.status_code 200: print(登录请求发送成功。Session已自动保存登录后的Cookie。) # 2. 使用同一个session访问需要登录的页面 profile_url https://example.com/dashboard profile_response session.get(profile_url) # 此时profile_response的请求会自动带上登录后的Cookie print(profile_response.text[:500]) # 打印前500字符看看自定义请求头默认的Requests头很容易被识别为爬虫。伪装成浏览器是基本操作。headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36, Accept: text/html,application/xhtmlxml,application/xml;q0.9,image/webp,*/*;q0.8, Accept-Language: zh-CN,zh;q0.9,en;q0.8, } response requests.get(https://example.com, headersheaders)处理超时与重试网络不稳定或目标服务器响应慢时必须设置超时否则脚本可能永远卡住。try: # timeout参数(连接超时, 读取超时) 单位秒 response requests.get(https://example.com, timeout(3.05, 10)) except requests.exceptions.Timeout: print(请求超时) except requests.exceptions.RequestException as e: print(f请求发生错误: {e})实操心得对于重要或复杂的请求我习惯先用浏览器开发者工具的“网络(Network)”面板抓取一次真实请求将里面的请求头、请求体、Cookie等参数原样复制到Python脚本中成功率最高。特别是遇到有反爬的网站这一步至关重要。3.2 解析与提取BeautifulSoup4实战技巧拿到HTML只是第一步从中精准提取信息才是关键。基本选择器from bs4 import BeautifulSoup import requests resp requests.get(https://example.com) soup BeautifulSoup(resp.content, lxml) # 使用lxml解析器记得安装 # 通过标签名查找第一个 title title_tag soup.title print(title_tag.text) # 通过CSS类名查找所有 classmenu-item 的 a 标签 menu_links soup.select(a.menu-item) for link in menu_links: print(link.get(href)) # 通过属性查找例如找所有有 target_blank 的链接 external_links soup.find_all(a, attrs{target: _blank})应对动态内容与JavaScript渲染requestsbs4只能获取初始HTML。如果数据是页面加载后通过JavaScript异步填充的如单页应用SPA这种方法就失效了。此时需要更高级的工具Selenium自动化浏览器能执行JS看到最终渲染的页面。但速度慢资源消耗大。分析API接口更高效的方法是打开开发者工具直接寻找页面数据调用的后端API通常是XHR/Fetch请求然后用requests直接模拟调用这个API拿到结构化的JSON数据。这需要一些网络抓包分析能力。安全相关提取案例收集所有表单和链接# 提取所有表单分析可能的输入点 forms soup.find_all(form) for form in forms: action form.get(action) method form.get(method, GET).upper() inputs form.find_all(input) print(f发现表单: 方法{method}, 提交地址{action}) for inp in inputs: inp_name inp.get(name) inp_type inp.get(type, text) print(f - 输入框: name{inp_name}, type{inp_type}) # 提取所有链接用于后续目录扫描或爬取 all_links set() for link in soup.find_all(a, hrefTrue): href link[href] # 处理相对路径需要与基础URL拼接这里简化处理 if href.startswith(http): all_links.add(href) # 可以进一步过滤只保留本站点链接 print(f共发现 {len(all_links)} 个链接)3.3 遵守Robots协议与道德规范这是红线。robots.txt是网站放在根目录下的一个文本文件用于告知爬虫哪些目录可以抓取哪些禁止。作为一个安全学习者你必须表现出比普通爬虫开发者更高的道德和法律意识。import requests from urllib.robotparser import RobotFileParser def check_robots_permission(url, user_agentMySecurityBot): 检查给定URL是否允许指定的User-Agent爬取 # 推导出robots.txt的URL from urllib.parse import urlparse parsed_url urlparse(url) robots_url f{parsed_url.scheme}://{parsed_url.netloc}/robots.txt rp RobotFileParser() rp.set_url(robots_url) try: rp.read() # 读取并解析robots.txt except: # 如果无法读取默认允许但实践中需谨慎 print(f无法读取 {robots_url} 请谨慎操作。) return True # 检查特定路径是否允许爬取 can_fetch rp.can_fetch(user_agent, url) if can_fetch: print(f[允许] User-Agent {user_agent} 可以爬取 {url}) else: print(f[禁止] User-Agent {user_agent} 被禁止爬取 {url}) return can_fetch # 使用示例 target_url https://example.com/some/path if check_robots_permission(target_url, MySecurityBot): # 如果允许再执行你的爬取逻辑 pass else: print(根据robots.txt协议停止爬取。)重要提示即使robots.txt允许你的爬取行为也必须遵守法律法规和网站的服务条款。绝对不要进行恶意扫描、高频访问DDoS攻击、窃取敏感或个人数据。你的目标应该是教育、研究和授权测试学习原理而非滥用。对于非授权目标仅在完全公开、无需认证且你拥有明确学习目的的信息上进行练习。最好的实践场所是专门为安全学习搭建的靶场如DVWA、bWAPP或明确允许安全测试的漏洞赏金平台测试域名。4. 渗透测试入门用Python实现基础漏洞检测信息收集完毕后我们进入更具挑战性的环节用Python脚本化地检测常见Web漏洞。这能让你深刻理解漏洞原理并具备批量检测的能力。4.1 初识OWASP Top 10与漏洞原理OWASP Top 10是十大最关键的Web应用安全风险列表是渗透测试的“考纲”。我们先用Python实现其中两个经典漏洞的简单检测逻辑。SQL注入SQL Injection检测思路 原理攻击者将恶意的SQL代码插入到应用的用户输入参数中后端数据库直接执行了这些代码。 检测思路向可能的注入点如URL参数、表单字段提交带有SQL特殊字符,,#,--,;或逻辑语句AND 11,AND 12的载荷观察返回页面的差异如内容变化、错误信息、响应时间。import requests def test_sql_injection(url, param_name, param_value_base): 一个非常基础的SQL注入测试函数 url: 目标URL param_name: 要测试的参数名 param_value_base: 参数的基础值用于正常请求对比 # 定义一组简单的测试载荷 payloads [ f{param_value_base}, # 单引号闭合 f{param_value_base} OR 11, # 永真条件 f{param_value_base} AND 12, # 永假条件 f{param_value_base}; --, # 注释掉后续SQL ] # 先发送一个正常请求作为基线 normal_params {param_name: param_value_base} try: normal_resp requests.get(url, paramsnormal_params, timeout5) normal_text normal_resp.text normal_len len(normal_text) print(f[基线] 正常请求长度: {normal_len}) except Exception as e: print(f[错误] 正常请求失败: {e}) return for payload in payloads: test_params {param_name: payload} try: resp requests.get(url, paramstest_params, timeout5) resp_len len(resp.text) # 简单对比如果响应长度与基线显著不同则可能存在注入 if resp_len ! normal_len: print(f[!] 潜在SQL注入点载荷: {payload}, 响应长度: {resp_len} (基线: {normal_len})) # 可以进一步分析resp.text中是否包含数据库错误信息如MySQL, SQLite等 if sql in resp.text.lower() or syntax in resp.text.lower(): print(f 发现数据库错误信息) else: print(f[.] 载荷 {payload} 无显著长度变化) except requests.exceptions.Timeout: print(f[超时] 载荷 {payload} 导致请求超时需警惕时间盲注) except Exception as e: print(f[异常] 载荷 {payload} 请求异常: {e}) # 示例测试一个假设的搜索接口 # test_sql_injection(https://vulnerable-site.com/search.php, keyword, apple)跨站脚本XSS检测思路 原理攻击者将恶意脚本JavaScript注入到网页中当其他用户浏览时脚本在其浏览器中执行。 检测思路向所有用户输入点提交包含简单无害测试脚本的载荷如scriptalert(1)/script然后检查该载荷是否原样出现在后续响应的HTML中反射型XSS或者是否被存储并显示给其他用户存储型XSS。def test_reflected_xss(url, param_name, param_value_base): 测试反射型XSS # 一个简单的测试载荷弹窗是经典测试但容易被过滤。这里用一个更隐蔽的。 test_payload f{param_value_base}img srcx onerroralertxss params {param_name: test_payload} try: resp requests.get(url, paramsparams, timeout5, headers{User-Agent: Mozilla/5.0}) # 检查我们的payload是否未经任何转义就出现在响应体中 if test_payload in resp.text: # 更精确的检查payload是否出现在HTML标签属性外或script上下文外简化版 # 这里只是一个初步筛选存在大量误报可能 print(f[!] 潜在反射型XSS漏洞参数: {param_name}) print(f 载荷: {test_payload}) print(f 载荷在响应中未转义。) else: # 如果payload被转义如lt;代替了则相对安全 print(f[.] 参数 {param_name} 对输入进行了转义处理。) except Exception as e: print(f[错误] 测试XSS时出错: {e}) # 示例 # test_reflected_xss(https://vulnerable-site.com/feedback.php, comment, hello)实操心得以上脚本是极度简化的教学示例仅用于理解原理。真实的漏洞检测工具如sqlmap, XSStrike要复杂成千上万倍它们会处理各种编码、WAF绕过、布尔盲注、时间盲注等。切勿在未经授权的真实网站上运行这些脚本这不仅是非法的而且你的IP和行为很可能被记录并追究责任。务必在本地靶场如DVWA、WebGoat或虚拟机中搭建的测试环境进行练习。4.2 靶场环境搭建在安全沙盒中练习没有靶场的安全学习是纸上谈兵。靶场是一个故意包含漏洞的Web应用供你合法、安全地练习渗透技术。推荐入门靶场DVWA (Damn Vulnerable Web Application)最经典的PHP/MySQL靶场漏洞难度可调非常适合新手。你可以用Docker一键搭建docker run --rm -it -p 80:80 vulnerables/web-dvwa访问http://localhost按照提示完成安装默认账号admin/password。bWAPP另一个包含大量漏洞的PHP靶场覆盖OWASP Top 10。VulnHub提供完整的虚拟机镜像需要下载后在VMware或VirtualBox中运行场景更真实复杂如之前热词中提到的nullbyte、DC系列靶机。将Python脚本用于靶场在本地搭建好DVWA后你可以将上面编写的test_sql_injection函数指向http://localhost/vulnerabilities/sqli/?id1需要先将DVWA安全级别设为Low并传入合适的参数进行测试。这是将理论转化为肌肉记忆的最佳方式。4.3 使用专业工具库Requests的进阶伙伴手动写所有检测逻辑效率低。Python生态中有许多优秀的库可以集成到你的自动化脚本中。sqlmap的API模式sqlmap是顶级的SQL注入自动化工具它本身是用Python写的并提供了API接口。虽然直接调用其API对新手较复杂但你可以学习其思路或者用subprocess模块在Python脚本中调用sqlmap命令行。import subprocess # 这是一个示例实际命令需要根据目标调整 target_url http://localhost/vulnerabilities/sqli/?id1SubmitSubmit command [sqlmap, -u, target_url, --batch, --cookie, 你的DVWA会话Cookie] # result subprocess.run(command, capture_outputTrue, textTrue) # print(result.stdout)python-wappalyzer识别网站使用的技术栈如CMS、Web框架、JavaScript库、服务器软件。信息收集阶段的神器。pip install python-wappalyzerfrom Wappalyzer import Wappalyzer, WebPage import requests wappalyzer Wappalyzer.latest() response requests.get(https://example.com) webpage WebPage(response.url, response.text, response.headers) technologies wappalyzer.analyze(webpage) print(technologies) # 输出如 {Nginx, jQuery, PHP, MySQL...}dnspython用于DNS信息收集如查询A记录、MX记录、子域名枚举等。pip install dnspython5. 工程化实践构建一个简单的漏洞扫描器雏形现在我们把前面学到的点串联起来构建一个简单的、针对授权靶场的“概念验证”级扫描器雏形。它不会很智能但能体现自动化工作流的思路。5.1 设计扫描器工作流我们的迷你扫描器将遵循以下基本步骤目标输入接收一个基础URL。信息收集识别技术栈。爬取页面收集所有链接和表单。漏洞检测对收集到的每个URL参数和表单输入点运行基础的SQL注入和XSS测试。结果报告将潜在漏洞点输出到控制台或文件。5.2 代码实现示例import requests from bs4 import BeautifulSoup from urllib.parse import urljoin, urlparse import time class SimpleSecurityScanner: def __init__(self, base_url, user_agentSimpleSecScanner/1.0): self.base_url base_url self.session requests.Session() self.session.headers.update({User-Agent: user_agent}) self.visited_urls set() self.vulnerabilities [] def crawl(self, url, max_depth2, current_depth0): 一个简单的递归爬虫收集链接和表单 if current_depth max_depth or url in self.visited_urls: return if not url.startswith(self.base_url): return # 只爬取同域链接 print(f[爬取] 深度 {current_depth}: {url}) self.visited_urls.add(url) try: resp self.session.get(url, timeout5) soup BeautifulSoup(resp.content, lxml) # 1. 提取并分析表单 forms soup.find_all(form) for form in forms: self._analyze_form(form, url) # 2. 提取链接准备下一层爬取 if current_depth max_depth: for link in soup.find_all(a, hrefTrue): full_url urljoin(url, link[href]) # 简单的去重和过滤 if full_url.startswith(self.base_url) and full_url not in self.visited_urls: # 避免爬取logout等破坏会话的链接简单过滤 if logout not in full_url.lower(): time.sleep(0.5) # 礼貌性延迟避免请求过快 self.crawl(full_url, max_depth, current_depth1) except Exception as e: print(f[错误] 爬取 {url} 失败: {e}) def _analyze_form(self, form, page_url): 分析单个表单提取参数并加入测试队列 action form.get(action) method form.get(method, GET).upper() # 处理相对路径的action target_url urljoin(page_url, action) if action else page_url inputs [] for inp in form.find_all([input, textarea, select]): inp_name inp.get(name) if inp_name: # 只关注有name属性的元素 inp_type inp.get(type, text) # 为简单起见给每个输入一个测试值 default_value test if inp_type hidden: default_value inp.get(value, ) inputs.append((inp_name, inp_type, default_value)) if inputs: print(f [表单] 方法: {method}, 目标: {target_url}, 参数: {inputs}) # 这里可以调用漏洞测试函数例如 # self._test_sql_injection(target_url, method, inputs) # 为了示例简洁我们暂时只记录 self.vulnerabilities.append({ type: FORM, url: target_url, method: method, params: inputs, source_page: page_url }) def _test_sql_injection(self, url, method, params): 实际注入测试此处为框架需完善 # 根据method(GET/POST)和params构造请求并测试 # 使用前面章节的 test_sql_injection 逻辑 pass def run(self): print(f开始扫描: {self.base_url}) self.crawl(self.base_url, max_depth1) # 先只爬一层 print(f\n扫描完成。共访问 {len(self.visited_urls)} 个页面。) print(f发现 {len(self.vulnerabilities)} 个待测试输入点。) # 后续可以在这里遍历 self.vulnerabilities 进行实际的漏洞测试 for vuln in self.vulnerabilities: print(f- {vuln[type]} {vuln[url]}) # 使用示例务必在靶场中运行 if __name__ __main__: # 仅用于本地DVWA靶场测试 TARGET http://localhost/vulnerabilities/ # DVWA漏洞目录 SCANNER SimpleSecurityScanner(TARGET) # 你需要先登录DVWA并将Cookie提供给session简化示例实际需处理登录 # scanner.session.cookies.set(PHPSESSID, 你的会话ID) SCANNER.run()5.3 扫描器的局限性与优化方向这个扫描器雏形非常简陋存在大量问题会话管理没有处理登录。真实场景需要先完成登录流程获取并维护会话Cookie。漏洞检测仅列出了测试点没有集成真正的、健壮的检测逻辑。爬虫效率递归爬虫效率低易陷入循环。应考虑使用队列queue.Queue和线程池。误报与漏报检测逻辑极其简单误报率极高且会漏掉绝大多数真实漏洞。WAF绕过没有任何针对Web应用防火墙WAF的绕过技巧。优化方向集成登录模块针对特定靶场如DVWA编写自动登录函数。使用成熟爬虫框架如Scrapy用于大规模、结构化的爬取。调用专业引擎将sqlmap、nuclei一款强大的漏洞扫描器等工具作为子进程调用并解析其输出。结果去重与验证对发现的潜在漏洞进行二次验证降低误报。生成报告将结果输出为HTML或Markdown格式的报告。6. 常见问题、排查技巧与学习路径6.1 实操中高频问题速查表问题现象可能原因排查思路与解决方案requests请求返回403 Forbidden1. 网站有反爬机制如验证User-Agent。2. 需要特定的Header如Referer。3. IP被限制。1. 检查并伪装请求头特别是User-Agent。2. 使用浏览器开发者工具复制所有请求头。3. 尝试添加Referer头通常为上级页面URL。4. 对于靶场检查是否需要登录Cookie。BeautifulSoup找不到元素1. 元素是JavaScript动态加载的。2. 选择器写错了。3. 解析器问题。1. 检查网页源代码确认元素是否存在。若为JS加载需用Selenium或找API接口。2. 使用soup.prettify()打印格式化后的HTML核对。3. 确保安装了lxml并指定为解析器BeautifulSoup(html, lxml)。脚本运行速度慢/卡住1. 网络请求无超时设置。2. 循环内发起大量同步请求。3. 目标服务器响应慢。1.务必为每个requests调用设置timeout参数。2. 考虑使用异步库如aiohttp或线程池concurrent.futures。3. 在循环中添加time.sleep(1)等延迟避免对服务器造成压力。检测脚本在靶场无效1. 靶场安全级别设置过高如DVWA的Impossible级别。2. 测试Payload过于简单被过滤。3. 未正确传递会话Cookie。1. 将靶场安全级别调至Low或Medium进行学习。2. 学习更高级的绕过技巧如编码、混淆。3. 确保你的requests.Session()在登录后一直用于所有请求。安装库失败或版本冲突1. 未使用虚拟环境全局环境混乱。2. 网络问题。3. 库依赖特定版本的Python。1.永远在虚拟环境中操作。2. 使用国内镜像源加速pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package。3. 检查Python版本是否符合库要求。6.2 安全学习者的自我修养与进阶路径法律与道德是底线再次强调所有练习必须在你自己拥有完全控制权的环境中进行本地虚拟机、授权靶场、漏洞赏金平台的测试范围。未经授权的测试是违法行为。从“用工具”到“造工具”初期可以多用成熟的工具如Burp Suite, sqlmap, nmap但一定要去理解它们背后的原理。用Python复现其核心功能是提升理解最深的方式。深入理解HTTP/HTTPS协议Web安全本质是协议安全。精读RFC文档不现实但至少要熟练掌握Cookie、Session、CORS、CSP、HSTS等概念并能用Python代码模拟各种协议状态。关注漏洞成因而非仅仅利用学会用Python编写POC概念验证代码来利用漏洞很重要但更重要的是理解漏洞产生的根本原因如开发者未对输入进行过滤、错误配置等这样才能写出更安全的代码。学习路径建议第一阶段入门掌握Python基础、HTTP协议、前端基础HTML/JS。完成DVWA等靶场的所有漏洞挑战手动写Python脚本辅助。第二阶段巩固系统学习OWASP Top 10对每个漏洞类别都用Python编写一个简单的检测脚本。参与CTFCapture The Flag比赛中的Web题目。第三阶段进阶学习内网渗透基础、常见服务漏洞如Redis未授权、中间件漏洞。尝试分析开源安全工具如sqlmap的部分源码。在合规平台如HackerOne、漏洞盒子的公益SRC进行实践。第四阶段专精选择一个方向深入如代码审计、自动化Fuzzing、WAF绕过、漏洞挖掘自动化平台开发等。最后保持好奇心和动手能力。安全技术日新月异但核心原理相对稳定。用Python将你的想法自动化是你在Web安全道路上最强大的助力。遇到问题多查官方文档、多读优秀开源代码、多在合规环境中实验你会逐渐建立起自己的知识体系和工具库。