目录
- 渗透测试四天学习内容总结
-
- 第一天:课程介绍与环境搭建
- 第二天:PHP源码调试与HTTPS原理
- 第三天:文件包含漏洞深入分析
- 第四天:高级文件包含利用技术
- 学习成果
-
- [1. 理论基础](#1. 理论基础)
- [2. 技术能力](#2. 技术能力)
- [3. 实战经验](#3. 实战经验)
- [4. 工具精通](#4. 工具精通)
- HTTPS原理与RSA密钥协商算法详解
-
- 一、核心概念
- 二、RSA密钥协商的TLS握手过程
-
- [第一次握手(Client Hello)](#第一次握手(Client Hello))
- [第二次握手(Server Hello + Certificate + Server Hello Done)](#第二次握手(Server Hello + Certificate + Server Hello Done))
- 客户端证书验证
- [第三次握手(Client Key Exchange + Change Cipher Spec + Finished)](#第三次握手(Client Key Exchange + Change Cipher Spec + Finished))
- [第四次握手(Change Cipher Spec + Finished)](#第四次握手(Change Cipher Spec + Finished))
- 三、会话密钥生成
- 四、RSA密钥协商的安全性分析
- 五、改进方案
- 六、实战应用
- 七、总结
- 学习效果评估
- 总结
渗透测试四天学习内容总结
根据目录下的文件和资料,为你整理了这四天的学习内容总结:
第一天:课程介绍与环境搭建
核心内容
- 学习目标:就业、CTF比赛、护网行动
- 技能需求 :
- Web漏洞挖掘与利用
- 前端逆向工程
- 云安全(Docker、K8s)
- AI辅助安全
- 环境搭建 :
- PHPStudy(Windows)
- Ubuntu 22.04
- Docker容器
- VSCode远程调试
- 工具准备 :
- BurpSuite V2025.3.1
- Python 3.10+
- Xdebug
详细知识点
-
安全学习路径:
- 就业方向:企业安全、甲方安全、安全服务
- CTF比赛:强网杯、网鼎杯、全国大学生信息安全竞赛
- 护网行动:红蓝对抗、漏洞挖掘、应急响应
-
环境搭建详解:
- PHPStudy配置:多版本PHP切换、Apache/Nginx配置
- Ubuntu 22.04:网络配置、SSH服务、防火墙设置
- Docker基础:镜像管理、容器操作、网络配置
- VSCode插件:Remote-SSH、PHP Debug、Docker扩展
-
工具使用:
- BurpSuite:拦截代理、扫描器、Intruder、Decoder
- Python环境:conda虚拟环境、pip包管理
- Xdebug配置:php.ini设置、VSCode launch.json配置
第二天:PHP源码调试与HTTPS原理
核心内容
- PHP源码调试 :
- Xdebug + VSCode调试
- Pwndbg命令行调试
- Docker容器调试(tuwen/phpsrc镜像)
- VSCode远程SSH连接容器
- HTTPS原理 :
- RSA密钥协商算法
- TLS握手过程
- 中间人攻击与防御
- BurpSuite证书配置
重点技术
- 调试技巧:利用Docker快速搭建PHP8.1-backdoor环境
- 网络安全:理解HTTPS加密机制和证书验证流程
详细知识点
-
PHP源码调试:
-
Xdebug配置 :
ini[Xdebug] xdebug.mode = debug xdebug.start_with_request = yes zend_extension=php_xdebug.dll -
Docker调试环境 :
bashdocker run -it --rm --name debug -p 8080:8080 -p 2222:22 tuwen/phpsrc -
VSCode远程连接 :
- SSH密钥生成:
ssh-keygen -t rsa -b 2048 - 配置
~/.ssh/config文件 - 使用Remote-SSH插件连接容器
- SSH密钥生成:
-
Pwndbg命令 :
break设置断点continue继续执行print查看变量backtrace查看调用栈
-
-
HTTPS原理:
- RSA密钥协商 :
- 非对称加密:公钥加密、私钥解密
- 密钥交换:客户端生成随机数,用服务端公钥加密
- 会话密钥:基于随机数生成对称加密密钥
- TLS握手过程 :
- Client Hello:支持的TLS版本、密码套件、随机数
- Server Hello:选择TLS版本、密码套件、随机数
- 证书验证:服务端发送证书,客户端验证
- 密钥交换:生成预主密钥,计算会话密钥
- 完成握手:双方确认加密通道建立
- BurpSuite证书配置 :
- 导出CA证书:
Proxy -> Options -> Import / Export CA Certificate - 浏览器安装证书:添加到受信任根证书颁发机构
- 移动设备证书:通过HTTP下载并安装
- 导出CA证书:
- RSA密钥协商 :
-
实战技巧:
- PHP8.1-backdoor分析 :
- 漏洞触发条件
- 利用方法
- 修复方案
- 远程调试Docker容器 :
- 端口映射
- 权限配置
- 代码同步
- PHP8.1-backdoor分析 :
第三天:文件包含漏洞深入分析
核心内容
- Phar文件包含 :
- Phar文件结构(stub、manifest、contents、signature)
- phar://协议原理
- Zip格式伪装绕过上传限制
- 源码级分析 :
- 完整调用链(Stream Wrapper → URL解析 → 格式检测 → 内容读取)
- 关键数据结构(php_stream、phar_entry_info)
- PHP_filter妙用 :
- 编码解码绕过
- 字符串操作去除"死亡exit"
重点技术
- 协议特性:phar://不依赖扩展名,通过文件头识别格式
- 漏洞利用:将恶意PHP文件压缩为ZIP,重命名为图片后利用phar://访问
详细知识点
-
Phar文件结构:
- Stub :PHP启动加载器,必须包含
__HALT_COMPILER() - Manifest:元数据和序列化数据
- Contents:压缩的文件内容
- Signature:签名(SHA1、SHA256、OpenSSL)
- Stub :PHP启动加载器,必须包含
-
phar://协议原理:
-
URL格式 :
phar://archive.phar/path/to/file.php -
格式识别 :通过文件头Magic Bytes识别
- Zip格式:
PK\x03\x04 - Phar格式:
PHP\x00\x00\x00\x00 - Tar格式:
ustar
- Zip格式:
-
绕过上传限制 :
bash# 创建包含shell.php的zip zip test.zip shell.php # 重命名为jpg mv test.zip test.jpg # 利用phar://访问 include('phar://test.jpg/shell.php');
-
-
源码级调用链:
- Stream Wrapper注册 :
phar_stream_wops结构 - URL解析 :
phar_parse_url()分离archive和entry - 打开文件 :
phar_open_from_filename() - 格式检测 :
phar_detect_phar_format() - 解析内容 :
phar_parse_zipfile()构建manifest哈希表 - 创建流 :
php_stream_alloc()设置phar_ops - 读取内容 :
phar_stream_read()定位并读取文件
- Stream Wrapper注册 :
-
关键数据结构:
-
php_stream :
ctypedef struct { const php_stream_ops *ops; void *abstract; // phar_entry_info* } php_stream; -
phar_entry_info :
ctypedef struct phar_entry_info { zend_off_t fp_pos; // 文件在zip中的偏移 size_t uncompressed_size; // 解压后大小 phar_archive_data *phar; // 所属phar char *filename; // 文件名 } phar_entry_info;
-
-
PHP_filter妙用:
-
base64解码绕过 :
php// 去除<?php exit; ?> include('php://filter/write=convert.base64-decode/resource=shell.php'); -
字符串操作 :
php// 去除XML标签 include('php://filter/read=string.strip_tags/resource=file.php'); -
多过滤器组合 :
php// 先strip_tags再base64-decode include('php://filter/read=string.strip_tags|convert.base64-decode/resource=file.php');
-
第四天:高级文件包含利用技术
核心内容
- phpinfo+LFI :
- 利用phpinfo打印上传缓存文件路径
- 条件竞争攻击获取临时文件
- 编写EXP自动提取临时文件名并包含
- PHP7崩溃利用 :
- 利用php://filter/string.strip_tags触发Segment Fault
- 使临时文件不被删除
- 结合dir.php列举临时文件
- 实战案例 :
- DeadsecCTF2025 baby-web
- PHP代码挑战赛
重点技术
- 条件竞争:利用HTTP请求处理时间差
- 崩溃利用:PHP7 segment fault特性
- 自动化EXP:编写Python脚本实现自动攻击
详细知识点
-
phpinfo+LFI技术:
-
原理:phpinfo会打印所有$_FILES信息,包括临时文件路径
-
临时文件特性 :
- 路径格式:
/tmp/phpXXXXXX - 处理流程:上传 → 临时文件 → 脚本结束后删除
- 路径格式:
-
条件竞争利用 :
python# 发送大请求使phpinfo加载缓慢 padding = 'A' * 2000 # 上传包含webshell的文件 files = {'file': BytesIO('<?php eval($_POST[shell]);?>')} # 同时发送包含请求 -
EXP编写 :
- 正则提取临时文件名:
tmp_name.*?([/\\]php\w+) - 多线程并发请求
- 自动重试机制
- 正则提取临时文件名:
-
-
PHP7崩溃利用:
-
触发条件 :
php// 触发Segment Fault include('php://filter/string.strip_tags/resource=/etc/passwd'); -
原理:PHP7在处理某些filter时会崩溃,导致临时文件不被清理
-
利用流程 :
- 发送崩溃请求
- 上传包含webshell的文件
- 利用dir.php列举/tmp目录
- 包含临时文件获取shell
-
-
实战案例分析:
- DeadsecCTF2025 baby-web :
- 题目来源:
当include邂逅phar------DeadsecCTF2025 baby-web.pdf - 题目描述:文件上传+文件包含漏洞组合利用
- 核心考点:phar://协议不依赖文件扩展名的特性
- 解法:Zip伪装+phar://协议
- 详细步骤:
- 创建包含shell.php的zip压缩文件
- 将zip文件重命名为.jpg绕过文件上传限制
- 利用phar://协议访问压缩包内的PHP文件
- 成功执行恶意代码获取flag
- 题目来源:
- PHP代码挑战赛 :
- 题目来源:
PHP代码挑战赛.zip - 题目描述:无phpinfo页面的文件包含漏洞利用
- 核心考点:PHP7崩溃导致临时文件不被删除
- 解法:PHP7崩溃+dir.php目录列举
- 详细步骤:
- 利用
php://filter/string.strip_tags/resource=/etc/passwd触发PHP崩溃 - 上传包含webshell的文件
- 通过dir.php列举/tmp目录下的临时文件
- 包含临时文件获取服务器权限
- 利用
- 题目来源:
- 文件包含5-7 :
- 题目来源:
文件包含5-7.md - 案例1:phpinfo+LFI条件竞争
- 利用phpinfo打印临时文件路径
- 条件竞争获取临时文件
- 自动提取文件名并包含执行
- 案例2:PHP7崩溃利用
- 触发Segment Fault使临时文件不被删除
- 结合目录列举找到临时文件
- 包含执行获取flag
- 题目来源:
- PHP8.1-dev后门 :
- 题目来源:
远程调试PHP底层复现8.1-dev后门.pdf - 漏洞描述:PHP 8.1.0-dev版本存在内置后门
- 利用条件:目标使用了开发版本的PHP
- 利用方法:通过User-Agent头执行任意代码
- 调试分析:使用GDB或Pwndbg调试PHP源码
- 修复方案:升级到正式版本
- 题目来源:
- DeadsecCTF2025 baby-web :
-
自动化工具开发:
-
Python EXP框架 :
pythonimport requests from io import BytesIO import re import threading def upload_file(url, data): files = {'file': BytesIO(data)} return requests.post(url, files=files) def exploit_lfi(url, tmp_file): payload = {'shell': 'system("cat /flag");'} return requests.post(f"{url}?file={tmp_file}", data=payload) -
关键技术点 :
- Socket编程实现精确时间控制
- 正则表达式提取信息
- 异常处理增强稳定性
- 多线程并发提高成功率
-
学习成果
1. 理论基础
- 安全概念:深入理解Web安全、网络安全、应用安全的核心原理
- 攻击链:掌握漏洞发现、利用、权限提升、持久化的完整攻击流程
- 防御机制:理解现代Web应用的安全防护措施和绕过技术
2. 技术能力
- PHP安全 :
- 源码级调试与分析
- 文件包含漏洞高级利用
- 协议层安全分析
- 容器安全 :
- Docker镜像安全
- 容器隔离机制
- 镜像漏洞扫描
- 网络安全 :
- HTTPS加密原理
- TLS握手过程
- 中间人攻击防御
3. 实战经验
- CTF技能 :
- 文件包含类题目解法
- 条件竞争攻击
- 崩溃利用技术
- 漏洞挖掘 :
- 自动化EXP编写
- 多线程并发攻击
- 正则表达式提取信息
- 环境管理 :
- 快速搭建漏洞环境
- Docker容器编排
- 远程调试配置
4. 工具精通
- BurpSuite :
- 拦截代理配置
- 扫描器使用
- Intruder暴力破解
- Decoder编码解码
- VSCode :
- 远程SSH连接
- PHP Debug调试
- Docker扩展管理
- Python :
- 安全脚本开发
- 多线程编程
- 网络请求处理
HTTPS原理与RSA密钥协商算法详解
一、核心概念
HTTPS的安全目标
- 保密性:防止信息被窃取
- 完整性:防止信息被篡改
- 可用性:确保服务正常访问
- 身份认证:验证通信双方身份
密钥交换算法
- 对称加密:用于实际数据传输,速度快
- 非对称加密:用于密钥交换,安全性高
- RSA:经典非对称加密算法,用于密钥协商
二、RSA密钥协商的TLS握手过程
第一次握手(Client Hello)
- 客户端发送:
- TLS版本号
- 支持的密码套件列表
- 客户端随机数(Client Random)
- 支持的压缩算法
第二次握手(Server Hello + Certificate + Server Hello Done)
- 服务端响应:
- 确认TLS版本
- 选择密码套件(如TLS_RSA_WITH_AES_128_GCM_SHA256)
- 服务端随机数(Server Random)
- 数字证书(包含服务端公钥)
- 结束标记
客户端证书验证
- 验证流程 :
- 计算证书Hash值H1
- 使用CA公钥解密证书签名得到H2
- 比较H1和H2,相同则可信
- 证书链:根证书 → 中间证书 → 服务器证书
第三次握手(Client Key Exchange + Change Cipher Spec + Finished)
- 客户端操作:
- 生成预主密钥(pre-master)
- 用服务端公钥加密pre-master
- 发送加密后的pre-master
- 通知服务端开始使用加密通信
- 发送加密的握手摘要
第四次握手(Change Cipher Spec + Finished)
- 服务端操作:
- 用私钥解密得到pre-master
- 通知客户端开始使用加密通信
- 发送加密的握手摘要
三、会话密钥生成
密钥材料
- 三个随机数 :
- Client Random(客户端生成)
- Server Random(服务端生成)
- pre-master(客户端生成,服务端解密)
生成过程
- 客户端和服务端使用相同的算法
- 基于三个随机数计算Master Secret
- Master Secret派生为多个会话密钥
- 用于加密的密钥
- 用于消息认证的密钥
四、RSA密钥协商的安全性分析
优点
- 实现简单:逻辑清晰,易于理解
- 兼容性好:广泛支持,适用于各种环境
- 性能尚可:握手过程较快
缺陷
- 不支持前向保密 :
- 私钥泄露会导致所有历史通信被破解
- 因为会话密钥依赖于固定的RSA私钥
- 易受中间人攻击 :
- 如果证书验证不严格
- 可能被伪造证书攻击
五、改进方案
DHE/ECDHE算法
- 前向保密:每次会话生成新的密钥对
- 安全性更高:即使私钥泄露,历史通信也安全
- 计算效率:ECDHE比DHE更快
现代HTTPS配置
- 推荐密码套件:ECDHE-RSA-AES256-GCM-SHA384
- 证书选择:使用受信任的CA颁发的证书
- TLS版本:启用TLS 1.2/1.3
六、实战应用
BurpSuite证书配置
- 导出CA证书
- 浏览器安装证书
- 配置代理拦截HTTPS流量
证书验证绕过
- 自签名证书:添加到信任列表
- 证书锁定:验证证书指纹
- 中间人代理:如BurpSuite、Charles
七、总结
RSA密钥协商算法是HTTPS早期使用的经典密钥交换方案,通过非对称加密保护对称密钥的传输,实现了安全的通信加密。虽然存在前向保密的缺陷,但由于其实现简单、兼容性好,至今仍被广泛使用。
现代HTTPS部署推荐使用ECDHE等支持前向保密的密钥交换算法,结合强密码套件和最新的TLS版本,以提供更高的安全性和性能。
学习效果评估
掌握较好的内容
1. PHP伪协议
- 深入理解 :
php://filter的各种过滤器用法phar://协议的工作原理和利用方式zip://协议的路径格式和使用场景
- 实战应用 :
- 利用
php://filter进行文件内容读取和编码转换 - 通过
phar://协议绕过文件上传限制 - 结合多种伪协议实现复杂的攻击链
- 利用
- 技术细节 :
- 理解伪协议的注册和处理机制
- 掌握不同过滤器的组合使用方法
- 熟悉协议参数的格式和传递方式
2. 文件包含漏洞
- 深入理解 :
- 本地文件包含(LFI)和远程文件包含(RFI)的区别
- 各种绕过技术(目录遍历、编码绕过等)
- 与其他漏洞的组合利用
- 实战应用 :
- phpinfo+LFI条件竞争攻击
- PHP7崩溃利用获取临时文件
- Phar文件包含与反序列化的结合
- 技术细节 :
- 源码级调用链分析
- 临时文件处理机制
- 条件竞争的时间窗口控制
学习不足的内容
PHP函数编译源码解析
- 学习状态 :
- 对PHP源码的整体结构理解不够深入
- 函数编译的具体过程掌握不全面
- 底层C代码的分析能力有待提高
- 改进方向 :
- 系统学习PHP源码的目录结构和核心模块
- 重点研究Zend引擎的编译和执行过程
- 多使用调试工具(GDB、Pwndbg)分析源码
- 结合具体漏洞(如PHP8.1-dev后门)进行源码级分析
- 学习建议 :
- 从简单的PHP扩展开发入手
- 逐步深入到Zend引擎核心
- 参考PHP官方文档和源码注释
- 参与PHP源码相关的技术社区
总结
通过这四天的学习,你已经掌握了渗透测试的核心技能和方法论,包括:
- 环境搭建与调试:从基础环境配置到高级源码调试
- 漏洞原理与利用:深入理解文件包含漏洞的底层机制
- 协议分析与安全:掌握HTTPS和各种PHP协议的安全特性
- 自动化攻击技术:编写EXP实现高效漏洞利用