渗透测试之Python基础与进阶
字数 2472 2025-08-15 21:31:34

Python渗透测试基础与进阶教程

0x00 Python学习基础

1. 学习方法

  • 项目式学习:通过实际练习具象化Python语法和概念
  • 编程思维训练:官方文档是最佳学习资源
  • 利用help功能:在IDLE中使用dir()help()查询库的使用方法

2. Python的优缺点

优点

  • 简单易学,上手快
  • 丰富的库资源
  • 可扩展、可嵌入C语言
  • 免费开源、可移植
  • 解释性语言(无需编译)
  • 面向对象、高层语言

缺点

  • 运行效率略低
  • 多线程支持欠佳
  • 商业支持不足
  • 代码不能加密
  • 无类型声明

3. Python注释

  • 单行注释:# 注释内容
  • 多行注释:""" 注释内容 """
  • 快捷键:Ctrl+/(多数IDE适用)

4. 内置函数

参考:Python3内置函数

0x01 Python变量

1. 变量阐述

  • 变量是内存中的数据存储标签
  • Python采用"标签理论"解释变量赋值
  • 示例分析:
    list1 = ['a','b','c']
    list2 = list1  # list1和list2指向同一对象
    list1.append('d')  # list2也会同步变化
    
    num1 = 1
    num2 = num1
    num1 = 2  # num2不受影响
    

2. 命名规则

  • 关键字(保留字)不能作为变量名
    import keyword
    print(keyword.kwlist)
    
  • 命名规范:小写下划线式(如variable_name),类名首字母大写

3. 运算符优先级

从高到低:

  1. **(指数)
  2. ~ + -(按位翻转,一元加减)
  3. * / % //(乘除取余整除)
  4. + -(加减)
  5. >> <<(位移)
  6. &(位与)
  7. ^ |(位异或/或)
  8. <=(比较)
  9. == !=(等于)
  10. =(赋值)
  11. is is not(身份)
  12. in not in(成员)
  13. not and or(逻辑)

0x02 Python流程控制

1. 顺序结构

程序按代码顺序和运算符优先级执行

2. 分支结构

if 条件:
    # 条件为真执行
else:
    # 条件为假执行

3. 循环结构

  • for循环:遍历任何序列
    for i in range(5):
        print(i)
    
  • while循环:条件满足时持续执行
    while 条件:
        # 循环体
    

4. 其他控制语句

  • break:终止整个循环
  • continue:跳过本次循环
  • pass:空操作占位符
  • else:与循环配合使用,循环正常结束时执行

0x03 Python字符串

1. 字符串定义

  • 单引号:'字符串'
  • 双引号:"字符串"
  • 三引号:"""多行字符串"""

转义字符

  • \\:反斜杠
  • \' \":引号
  • \n:换行
  • \t:制表符
  • \r:回车

2. 字符串运算符

操作符 描述 示例
+ 连接 "a"+"b"→"ab"
* 重复 "a"*3→"aaa"
[] 索引 "abc"[1]→"b"
[:] 切片 "abc"[1:3]→"bc"
in 包含 "a" in "abc"→True
not in 不包含 "d" not in "abc"→True
r/R 原始字符串 r"\n"不转义

3. 字符串格式化

print("姓名:%s,年龄:%d" % ("张三", 20))
print(f"姓名:{'张三'},年龄:{20}")

4. 字符串切片

s = "abcdefg"
print(s[1:4])  # "bcd"(左闭右开)
print(s[::-1])  # 反转字符串

5. 字符串内置方法

  • find():查找子串位置
    "abc".find("b")  # 1
    
  • count():统计子串出现次数
    "aabbcc".count("a")  # 2
    
  • replace():替换子串
    "abc".replace("b", "B")  # "aBc"
    
  • split():分割字符串
    "a,b,c".split(",")  # ['a','b','c']
    
  • strip():去除两端空白
    " abc ".strip()  # "abc"
    

0x04 Python四种基本类型

1. 数据类型

类型 特性 示例
列表(list) 有序可变 [1,2,3]
元组(tuple) 有序不可变 (1,2,3)
集合(set) 无序唯一 {1,2,3}
字典(dict) 键值对 {"a":1,"b":2}

列表操作

  • 增:append(), insert(), extend()
  • 删:pop(), remove()
  • 改:索引赋值
  • 查:in, not in
  • 排序:sort(), reverse()

字典操作

  • 增/改:dict[key] = value
  • 删:pop(key), clear()
  • 查:keys(), values(), items()

2. 字典内置函数

  • len(dict):键总数
  • str(dict):可打印字符串表示
  • type(dict):返回字典类型

0x05 Python函数

1. 函数定义

def 函数名(参数):
    """文档字符串"""
    函数体
    return 返回值

2. 参数类型

  • 位置参数
  • 默认参数
  • 可变参数:*args(元组)
  • 关键字参数:**kwargs(字典)

3. 变量作用域

  • 局部变量:函数内部定义
  • 全局变量:global声明
  • 闭包变量:nonlocal声明
    def outer():
        num = 10
        def inner():
            nonlocal num
            num = 100
        inner()
        print(num)  # 100
    

4. 特殊函数

  • 递归函数:自己调用自己
  • 匿名函数:lambda
    f = lambda x: x*2
    f(3)  # 6
    

0x06 Python算法基础

1. 选择排序

a = [5,7,8,3,1]
for j in range(len(a)-1):
    for i in range(j, len(a)-1):
        if a[j] > a[i+1]:
            a[j], a[i+1] = a[i+1], a[j]

2. 冒泡排序(优化版)

b = [5,7,8,3,1]
for j in range(len(b)-1):
    swap = False
    for i in range(len(b)-j-1):
        if b[i] > b[i+1]:
            b[i], b[i+1] = b[i+1], b[i]
            swap = True
    if not swap:
        break

3. 复杂度分析

  • 时间复杂度:算法执行时间随数据规模增长的趋势
  • 空间复杂度:算法所需内存空间随数据规模增长的趋势

0x07 Flask Web应用开发

1. Flask基础

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return "Hello World!"

app.run(debug=True)

2. 项目结构

project/
├── static/      # 静态文件
├── templates/   # 模板文件
└── app.py       # 主程序

3. Jinja2模板

<title>{% block title %}{% endblock %}</title>
<ul>
{% for user in users %}
    <li><a href="{{ user.url }}">{{ user.username }}</a></li>
{% endfor %}
</ul>

0x08 数据存储

1. 文件存储

# 传统方式
f = open('file.txt', 'r')
content = f.read()
f.close()

# 推荐方式
with open('file.txt', 'r') as f:
    content = f.read()

文件方法

  • tell():返回文件当前位置
  • seek(offset[, whence]):移动文件指针

2. 数据库存储

SQLite示例

import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
conn.commit()
conn.close()

MySQL示例

import pymysql
conn = pymysql.connect(host='localhost', user='root', password='', database='test')
cursor = conn.cursor()
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
conn.close()

0x09 面向对象编程

1. 类定义

class Person:
    def __init__(self, name, age):  # 构造方法
        self.name = name
        self.age = age
    
    def say_hello(self):
        print(f"Hello, I'm {self.name}")

p = Person("Alice", 25)
p.say_hello()

2. 继承

class Student(Person):
    def __init__(self, name, age, student_id):
        super().__init__(name, age)
        self.student_id = student_id

3. 特殊方法

  • __str__:字符串表示
  • __add__:运算符重载
  • __getitem__/__setitem__:索引操作

0x0A 高级特性

1. 上下文管理器

class DatabaseConnection:
    def __enter__(self):
        self.conn = pymysql.connect(...)
        return self.conn.cursor()
    
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.conn.commit()
        self.conn.close()

with DatabaseConnection() as cursor:
    cursor.execute("SELECT * FROM users")

2. 装饰器

from functools import wraps

def log_time(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"耗时: {time.time()-start}秒")
        return result
    return wrapper

@log_time
def long_running_task():
    time.sleep(2)

0x0B 异常处理

1. try-except

try:
    x = 1 / 0
except ZeroDivisionError as e:
    print(f"错误: {e}")
except Exception as e:
    print(f"未知错误: {e}")
else:
    print("无异常发生")
finally:
    print("始终执行")

2. 自定义异常

class MyError(Exception):
    def __init__(self, message):
        self.message = message

try:
    raise MyError("自定义错误")
except MyError as e:
    print(e.message)

3. 断言

assert 1 == 1  # 无异常
assert 1 == 2, "1不等于2"  # 触发AssertionError

学习资源


本教程涵盖了Python渗透测试所需的基础和进阶知识,从基础语法到Web开发,从数据处理到安全编程实践。建议结合实践项目深入学习,逐步掌握Python在安全领域的应用。

Python渗透测试基础与进阶教程 0x00 Python学习基础 1. 学习方法 项目式学习 :通过实际练习具象化Python语法和概念 编程思维训练 :官方文档是最佳学习资源 利用help功能 :在IDLE中使用 dir() 和 help() 查询库的使用方法 2. Python的优缺点 优点 : 简单易学,上手快 丰富的库资源 可扩展、可嵌入C语言 免费开源、可移植 解释性语言(无需编译) 面向对象、高层语言 缺点 : 运行效率略低 多线程支持欠佳 商业支持不足 代码不能加密 无类型声明 3. Python注释 单行注释: # 注释内容 多行注释: """ 注释内容 """ 快捷键: Ctrl+/ (多数IDE适用) 4. 内置函数 参考: Python3内置函数 0x01 Python变量 1. 变量阐述 变量是内存中的数据存储标签 Python采用"标签理论"解释变量赋值 示例分析: 2. 命名规则 关键字(保留字)不能作为变量名 命名规范:小写下划线式(如 variable_name ),类名首字母大写 3. 运算符优先级 从高到低: ** (指数) ~ + - (按位翻转,一元加减) * / % // (乘除取余整除) + - (加减) >> << (位移) & (位与) ^ | (位异或/或) <= (比较) == != (等于) = (赋值) is is not (身份) in not in (成员) not and or (逻辑) 0x02 Python流程控制 1. 顺序结构 程序按代码顺序和运算符优先级执行 2. 分支结构 3. 循环结构 for 循环:遍历任何序列 while 循环:条件满足时持续执行 4. 其他控制语句 break :终止整个循环 continue :跳过本次循环 pass :空操作占位符 else :与循环配合使用,循环正常结束时执行 0x03 Python字符串 1. 字符串定义 单引号: '字符串' 双引号: "字符串" 三引号: """多行字符串""" 转义字符 : \\ :反斜杠 \' \" :引号 \n :换行 \t :制表符 \r :回车 2. 字符串运算符 | 操作符 | 描述 | 示例 | |--------|------|------| | + | 连接 | "a"+"b"→"ab" | | * | 重复 | "a"*3→"aaa" | | [] | 索引 | "abc"[1]→"b" | | [:] | 切片 | "abc"[1:3]→"bc" | | in | 包含 | "a" in "abc"→True | | not in | 不包含 | "d" not in "abc"→True | | r/R | 原始字符串 | r"\n" 不转义 | 3. 字符串格式化 4. 字符串切片 5. 字符串内置方法 find() :查找子串位置 count() :统计子串出现次数 replace() :替换子串 split() :分割字符串 strip() :去除两端空白 0x04 Python四种基本类型 1. 数据类型 | 类型 | 特性 | 示例 | |------|------|------| | 列表(list) | 有序可变 | [1,2,3] | | 元组(tuple) | 有序不可变 | (1,2,3) | | 集合(set) | 无序唯一 | {1,2,3} | | 字典(dict) | 键值对 | {"a":1,"b":2} | 列表操作 : 增: append() , insert() , extend() 删: pop() , remove() 改:索引赋值 查: in , not in 排序: sort() , reverse() 字典操作 : 增/改: dict[key] = value 删: pop(key) , clear() 查: keys() , values() , items() 2. 字典内置函数 len(dict) :键总数 str(dict) :可打印字符串表示 type(dict) :返回字典类型 0x05 Python函数 1. 函数定义 2. 参数类型 位置参数 默认参数 可变参数: *args (元组) 关键字参数: **kwargs (字典) 3. 变量作用域 局部变量:函数内部定义 全局变量: global 声明 闭包变量: nonlocal 声明 4. 特殊函数 递归函数:自己调用自己 匿名函数: lambda 0x06 Python算法基础 1. 选择排序 2. 冒泡排序(优化版) 3. 复杂度分析 时间复杂度:算法执行时间随数据规模增长的趋势 空间复杂度:算法所需内存空间随数据规模增长的趋势 0x07 Flask Web应用开发 1. Flask基础 2. 项目结构 3. Jinja2模板 0x08 数据存储 1. 文件存储 文件方法 : tell() :返回文件当前位置 seek(offset[, whence]) :移动文件指针 2. 数据库存储 SQLite示例 : MySQL示例 : 0x09 面向对象编程 1. 类定义 2. 继承 3. 特殊方法 __str__ :字符串表示 __add__ :运算符重载 __getitem__ / __setitem__ :索引操作 0x0A 高级特性 1. 上下文管理器 2. 装饰器 0x0B 异常处理 1. try-except 2. 自定义异常 3. 断言 学习资源 Python官方文档 Python教程 API文档 CTF练习场 本教程涵盖了Python渗透测试所需的基础和进阶知识,从基础语法到Web开发,从数据处理到安全编程实践。建议结合实践项目深入学习,逐步掌握Python在安全领域的应用。