渗透测试之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. 运算符优先级
从高到低:
**(指数)~ + -(按位翻转,一元加减)* / % //(乘除取余整除)+ -(加减)>> <<(位移)&(位与)^ |(位异或/或)<=(比较)== !=(等于)=(赋值)is is not(身份)in not in(成员)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") # 1count():统计子串出现次数"aabbcc".count("a") # 2replace():替换子串"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. 特殊函数
- 递归函数:自己调用自己
- 匿名函数:
lambdaf = 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在安全领域的应用。