Web后端-Python基础
一、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(列表) |
|
存放扫描到的存活 IP 列表、字典批量载荷 |
|
Tuple(元组) |
|
数据库查询返回的固定结构、魔术方法返回值 |
|
Dict(字典) |
|
构造 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 魔术方法 |
核心网安考点 |
|
创建/实例化对象时 |
|
|
属性初始化,检查传参 |
|
对象被销毁/脚本结束时 |
|
|
利用销毁阶段的“落脚点”触发后续攻击链 |
|
对象执行序列化时 |
|
|
控制被保存的成员属性 / 修改执行流 |
|
数据执行反序列化时 |
|
|
绕过安全检查(如经典的 CVE-2016-7124 漏洞) |
复习小结
- 写 Python:空格缩进要对齐,内置库不用
pip - 做网安:看到
pickle.load()要警惕,小心反序列化炸弹 - 魔术方法:不用手动调,满足条件自动跑,重点盯防
__reduce__拿权限
更多推荐
所有评论(0)