一、Python 基础语法

网安点拨:Python 3 是现代安全工具(如 SQLMap, Impacket)的主流,Python 2 已于 2020 年停止支持。在终端输入 python --version 可查看当前版本

1. 注释与输出

  • 单行注释:使用 #
  • 多行注释:使用三个单引号 ''' 或三个双引号 """
  • 严格缩进:Python 不使用大括号 {},而是强制使用缩进(空格/Tab)来划分代码块
  • 输出/输入:Python 3 中 print()input() 均为标准函数

2. 核心数据类型(网安常用)

Python 拥有六个标准数据类型

数字(Numbers)、字符串(String)、列表(List)、元组(Tuple)、集合(Set)、字典(Dictionary)

重点如下:

数据类型

符号与特征

网安常见应用场景

List(列表)

[1, 2, 'a'](可修改)

存放扫描到的存活 IP 列表、字典批量载荷

Tuple(元组)

(1, 2, 'a')只读,不可变)

数据库查询返回的固定结构、魔术方法返回值

Dict(字典)

{'key': 'value'}(键值对)

构造 HTTP 请求头(Headers)、提交的 Post 数据

3. 流程控制

  • 条件分支:使用 if - elif - else 结构
  • 循环控制
    • break:直接终止并跳出整个循环
    • continue:跳过当前循环的剩余代码,直接进入下一次循环

二、Python 模块化管理

网安点拨:编写 POC ( Proof of Concept 漏洞验证脚本) 或 EXP ( Exploit 漏洞利用脚本) 时,必须学会导入不同的依赖库

1. 模块的三大分类

1.1 系统内置模块:随 Python 解释器直接安装,无需额外下载

    • os:用于与操作系统交互(如执行系统命令 os.system(),网安常用于 RCE 漏洞利用)

    • sys:获取命令行参数(如通过脚本接收目标 URL)

    • time:用于时间延迟(时间盲注)

五秒后>>>提示符会自动跳出来 :

    • random:生成随机数

1.2 自定义模块:自己写的 .py 文件,方便代码重用

1.3 第三方模块:由开源社区提供,必须先通过 pip 工具安装后才能使用

    • Requests:网安打交道最多的库,专门用来发送 HTTP 请求
import requests
# 设置UA
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:150.0) Gecko/20100101 Firefox/150.0'
}
# 发送GET请求
response = requests.get("http://www.baidu.com", headers=headers)
# 打印响应状态码
print("状态码:", response.status_code)
# 打印网页内容
print(response.text)

2. 第三方包管理利器:pip 命令

pip list                          # 列出已安装的所有模块
pip install requests              # 安装最新版的 requests 库
pip uninstall requests            # 卸载模块
# 网络卡顿时,使用国内清华源加速安装:
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3. 模块导入的 3 种语法

  • import os → 用 os.system() 调用
  • from os import system → 直接用 system() 调用
  • import requests as req → (as) 给模块起别名,用 req.post() 调用

三、面向对象与魔术方法(★网安进阶核心)

网安点拨:PHP 和 Python 的反序列化漏洞,本质上都是利用了魔术方法(Magic Methods)在生命周期中自动触发的特性。黑客通过控制输入,在不直接调用方法的情况下,使程序自动执行敏感命令

1. 类与对象的基本概念

  • 类 (Class):图纸/模板。定义了数据的结构(属性)和操作(方法)
  • 对象 (Object):根据图纸造出来的实体(也叫实例)
class Hacker:                       # 定义一个名为 Hacker 的类
    def __init__(self, name):       # 构造方法
        self.name = name            # 实例变量

p1 = Hacker("Alice")                # 实例化一个对象 p1

2. Python 序列化与魔术方法触发机制

序列化(将内存中的对象转为字节流保存或传输)与反序列化(将字节流恢复为内存对象)是引发严重网安漏洞的高危区 。在 Python 中,通常使用 pickle 模块进行该操作

以下是 Python 中与安全紧密相关的 5 个核心魔术方法 :

__init__ (构造函数) ( initialization --- 初始化 )

  • 触发时机:在类对象被实例化之后立即自动触发
  • 网安作用:用于初始化安全脚本的配置(如设置自动化扫描的目标 URL、Cookie 凭证等)

__del__ (析构函数)

  • 触发时机:当对象被销毁(占用的内存被释放、不再被使用)时自动触发
  • 网安作用:属于垃圾回收机制 。常用于在脚本结束时关闭网络连接、清理临时生成的扫描日志或后门遗留

__getstate__

  • 触发时机:当对象被序列化(如调用 pickle.dump())时触发
  • 网安作用:默认返回对象的属性字典 。程序员可以重写它,用来在保存对象前剔除敏感数据(如密码、Token),防止在传输过程中泄露

__setstate__

  • 触发时机:当对象被反序列化(如调用 pickle.load())时触发
  • 网安作用:接收反序列化得到的字典并恢复对象状态 。网安攻击中,常配合反序列化点来重构危险的内存对象

__reduce__ (反序列化漏洞之王)

  • 触发时机优先于 __getstate__ 调用
  • 网安作用:它要求返回一个元组,其中包含一个可执行的函数和对应的参数
    • 高危点:如果黑客篡改了反序列化数据,让 __reduce__ 返回 (os.system, ('whoami',)),那么当服务器反序列化该对象时,就会直接在服务器上执行系统命令!这是 Python 反序列化远程代码执行(RCE)漏洞的最经典利用方式

技能联动:PHP 与 Python 魔术方法横向对比

在 Web 安全中,不同后端的反序列化原理是相通的,我们可以将它们放在一起对比记忆:

触发场景

PHP 魔术方法

Python 魔术方法

核心网安考点

创建/实例化对象时

__construct

__init__

属性初始化,检查传参

对象被销毁/脚本结束时

__destruct

__del__

利用销毁阶段的“落脚点”触发后续攻击链

对象执行序列化时

__sleep

__getstate__ / __reduce__

控制被保存的成员属性 / 修改执行流

数据执行反序列化时

__wakeup

__setstate__

绕过安全检查(如经典的 CVE-2016-7124 漏洞)

复习小结

  • 写 Python:空格缩进要对齐,内置库不用 pip
  • 做网安:看到 pickle.load() 要警惕,小心反序列化炸弹
  • 魔术方法:不用手动调,满足条件自动跑,重点盯防 __reduce__ 拿权限

更多推荐