渗透笔记1

++一、环境配置++

1、debug (重中之重)

(1)python

  • 基础配置
  • 多版本管理
    • 推荐安装 Conda(创建独立虚拟环境,版本间互不干扰)

(2)java

  • 开发工具:IntelliJ IDEA
  • JDK 版本选择(现主流)
    • JDK 1.8:适配老项目、多数漏洞场景
    • JDK 17:限制部分反序列化漏洞(仍存在绕过可能)
    • JDK 21:适配 DataEase 等新框架
  • 依赖管理工具:Maven(Java)、Pip(Python)

不同版本的jdk适用于不同的漏洞!

(3)php

phpstudy是php语言的集成环境。

  • Windows 环境

    • 集成工具:PHPStudy(替代原生 WNMP/WAMP,支持多版本切换、虚拟主机)

    • 开发工具:PHPStorm/VSCode + Xdebug 插件

    • Xdebug 配置示例(需匹配 PHP 版本):

      复制代码
      xdebug.mode = debug
      xdebug.start_with_request = yes
      zend_extension=D:/phpstudy_pro/Extensions/php/php7.3.4nts/ext/php_xdebug-3.1.6-7.3-vc15-nts-x86_64.dll
    • Xdebug 安装验证:

      1. 打开 Xdebug 官网
      2. 粘贴 phpinfo() 输出的源代码
      3. 点击 "分析",按指引安装并配置
  • Ubuntu 环境

    注意下述命令要备注版本号!

    apt-get install php7.4-dev autoconf automake
    //注意php和php-fpm的版本号要对应上

2、补充(Web服务器与中间件):

Nginx :nginx是反向代理服务器,本身不能解析 PHP 代码,必须把 PHP 请求转发给独立的 php-fpm 进程去执行,执行完再把结果返回给 Nginx → 再返回给浏览器。

但是!注意:

Nginx 和 Apache 都是具备反向代理功能的 Web 服务器;

Nginx 反向代理性能强,是现在的主流;

Apache 反向代理性能弱,主打老项目 Web 服务器功能。

3、php开发两大主流服务器环境组合(基于Windows)

WAMP = Windows + Apache + MySQL + PHP

  • 老牌 Windows PHP 集成环境,Apache 是默认 Web 服务器,比如老牌的「Wampserver」就是这个组合;

WNMP = Windows + Nginx + MySQL + PHP

  • 现在的主流!和 Linux 的 LNMP 对应,Nginx 性能更高,电脑里的 PHPStudy 小皮面板,本质就是 WNMP 架构,只是名字叫 PHPStudy,没叫 WNMP 而已;

补充:你的 PHPStudy 是 WNMP 的升级版,集成了更多功能(多版本 PHP 切换、虚拟主机、SSL 配置),比原生的 WNMP/WAMP 更好用,所以现在 Windows 开发都用 PHPStudy,不用原生 WNMP/WAMP 了。

4、php开发两大主流服务器环境组合(基于Linux):

✔ LNMP = Linux + Nginx + MySQL + PHP

✔ LAMP = Linux + Apache + MySQL + PHP

Tomcat / WebLogic/Nginx/Apache都属于中间件

PHP 环境:LNMP (Linux+Nginx+MySQL+PHP) 主流,LAMP 备用;Nginx 必须配 PHP-FPM

5、java开发主流服务器环境组合:

Linux + Nginx + Tomcat/WebLogic + MySQL / 其他数据库

Java 环境:Tomcat (开源主流) / WebLogic (大厂商用);Java 项目外层必配 Nginx 做反向代理

服务器选型铁律:PHP 用 Nginx/Apache,Java 用 Tomcat/WebLogic,无交集

"Java 用 Tomcat/WebLogic,无交集" 里的 "无交集",是指 Java 项目的 Web 容器(Tomcat/WebLogic),和 PHP 项目的 Web 服务器(Nginx/Apache),在技术选型和使用场景上完全不重叠------ 简单说:

  • 一个项目如果是 Java 写的,就只会用 Tomcat/WebLogic 来运行,绝对不会用 Nginx/Apache 直接跑 Java 代码

  • 一个项目如果是 PHP 写的,就只会用 Nginx/Apache 来运行,绝对不会用 Tomcat/WebLogic 直接跑 PHP 代码

服务器环境主流是 PHP/Java 两类。

6、PHP 环境中 Xdebug 调试工具的安装与配置

(1)xdebug与php环境的匹配

点击红框里的蓝色字体跳转到相应网址,并把上述页面源代码粘贴进去

点击底下的分析 可得:

测试成功!!!

(2)Xdebug 扩展安装与加载

下图表示安装成功!!!

(3)调试过程测试:

7、安装方式

(1)源码安装

指下载软件的 纯源代码包 (比如 nginx-1.25.3.tar.gz、php-7.4.33.tar.gz),通过 ./configure && make && make install 三步,在Linux 本机上把源代码编译成二进制可执行文件,再完成安装。

(2)apt安装

Linux 官方软件仓库里,已经编译好的二进制可执行文件 ,只需要敲命令 sudo apt install nginx/php7.4/mysql,系统自动下载、解压、配置环境变量、注册系统服务,一键完成安装。

8、php调试

只有源码安装的 PHP,才能做源码调试;apt 安装的 PHP 是编译好的成品,没有源码文件,根本没法调试底层。

Xdebug 调试 → 调试「PHP 上层业务代码(即我们写的php代码)」(.php文件),基于 PHP 解释器运行,属于应用层调试

pwndbg/VSCode C 调试 → 调试「底层 C 语言代码」(.c文件 / 编译后的二进制程序),基于 C 编译器运行,属于底层调试

底层C语言主流调试工具:pwndbg、vscode

++二、底层调试++

1. 代码调试

应用层调试(PHP 业务代码) :Xdebug + VSCode(调试 .php 文件)

底层调试(C 语言代码)

  • 工具:pwndbg、VSCode
  • 前提:需源码安装 PHP(apt 安装的 PHP 无源码,无法调试底层)

2. PHP 底层编译执行流程(基于 Zend 引擎)

PHP 作为脚本语言 ,其底层执行过程分为 编译(Compile)执行(Execute) 两个核心阶段,依赖 Zend 引擎完成,以下是从源码到运行的完整链路:

(1)PHP 代码的 "编译阶段":从 PHP 脚本到中间代码(OPcode)

PHP 是解释型语言,但实际是 "先编译为中间代码,再解释执行",编译阶段由 Zend 引擎的 编译器完成:

① 词法分析
  • 输入:PHP 源码文本(如<?php echo "hello"; ?>);

  • 过程:通过词法分析器源码拆分为Token(标记) ,例如T_ECHO(对应echo关键字)、T_CONSTANT_ENCAPSED_STRING(对应"hello"字符串);

  • 输出:Token 序列。

②语法分析
  • 输入:Token 序列;

  • 过程:通过语法分析器根据 PHP 语法规则,将 Token 序列构建为抽象语法树(AST)

  • 输出:AST(描述代码的语法结构,例如 "echo语句包含一个字符串节点")。

③中间代码生成(OPcode Generation)
  • 输入:AST;

  • 过程:Zend 引擎将 AST 转换为Zend OPcode(PHP 的中间代码) ,OPcode 是一种与平台无关的指令(类似汇编指令),例如ZEND_ECHO对应echo操作;

  • 输出:OPcode 序列 + 对应的操作数(Operand) (例如ZEND_ECHO的操作数是字符串"hello")。

(2)PHP 代码的 "执行阶段":中间代码的解释执行

编译生成的 OPcode 由 Zend 引擎的执行器解释执行:

① OPcode 的执行循环

Zend 执行器通过循环遍历 OPcode 序列,逐个执行指令:

  • 核心结构:zend_execute_data(保存当前执行上下文,如变量、函数调用栈);

  • 执行逻辑:根据 OPcode 类型(如ZEND_ECHO),调用对应的处理函数 (如ZEND_ECHO_SPEC_CONST_HANDLER),完成指令功能。

②变量与内存管理
  • 变量存储:PHP 变量以zval结构体存储(包含类型、值、引用计数等),由Zend 内存管理器统一管理;

  • 垃圾回收:通过 "引用计数 + 循环引用检测" 回收不再使用的内存,避免内存泄漏。

(3)PHP 底层编译执行的核心载体:Zend 引擎

整个编译 + 执行过程的核心是Zend 引擎(PHP 的底层虚拟机),它是用 C 语言编写的核心模块,包含:

  • 编译器:完成词法 / 语法分析、OPcode 生成;

  • 执行器:解释执行 OPcode;

  • 内存管理器:管理变量、内存分配与回收;

  • 扩展接口:支持 PHP 扩展(如 Xdebug、PDO)的接入。

(4)补充:PHP 的 "预编译" 优化(OPcache)

为避免重复编译相同 PHP 文件,PHP 提供OPcache 扩展(默认开启):

  • 功能:将编译后的 OPcode 缓存到内存中;

  • 效果:同一 PHP 文件第二次执行时,直接从 OPcache 读取 OPcode,跳过 "词法 / 语法分析、OPcode 生成" 阶段,提升执行效率。

(5)总结执行链路

复制代码
PHP源码 → 词法分析(Token) → 语法分析(AST) → 编译(OPcode) → 执行器解释OPcode → 输出结果

++三、TLS 加密与抓包解密++

1. HTTPS(TLS)安全机制

  • 核心作用:身份认证、数据加密、防篡改
  • 安全原理
    1. 客户端与服务端协商 TLS 版本、加密算法(如 TLS 1.2 + AES 对称加密 + RSA 非对称加密)
    2. 服务端通过 CA 证书传递公钥(CA 私钥签名,保证身份不可伪造)
    3. 客户端生成对称秘钥,用服务端公钥加密后传递(非对称加密保障秘钥安全)
    4. 后续通信用对称秘钥加密(兼顾安全与效率)

2. 流量解密条件

  • Wireshark 自动解密 TLS:需获取通信双方的秘钥(如服务器私钥)
  • BurpSuite 作为中间人解密:前提:客户端信任 Burp 的根证书(手动导入证书,实现 "合法中间人")
  • 无条件抓包解密:无法实现(TLS 设计目标是防中间人窃听)

++四、问题集合++

1. HTTPS/TLS/SSL 真的能被解密吗?可以解密需要什么条件?

能解密,但必须满足以下任一条件(核心:拿到 "解密钥匙"):

  • 条件 1:拥有通信一方的私钥 比如你是网站管理员,持有服务器的私钥(.pem/.key 文件),就能解密所有发给该服务器的 HTTPS 流量(比如用 Wireshark 导入私钥解密)。通俗理解:就像你有家里的钥匙,能打开自己家的门;别人没有钥匙,再怎么撬也进不来(除非暴力破解,但现在密钥长度足够长,暴力破解几乎不可能)。

  • 条件 2:同时被服务端和客户端信任比如用 BurpSuite 抓包时,让客户端(你的电脑 / 手机)信任 Burp 的 "伪造证书",此时 Burp 能解密经过它的流量。

  • 条件 3:利用加密漏洞或配置错误比如 TLS 版本过旧(如 TLS 1.0/1.1)、使用弱加密算法(如 RC4)、存在 Heartbleed 等漏洞,攻击者可通过漏洞获取密钥或直接解密。简单理解就是本身的加密或配置有问题。

不能无条件解密的原因:

TLS 的加密设计是 "对称加密 + 非对称加密" 结合,核心是 "密钥不外露":

  • ++数据传输++ 用对称加密,速度快,但密钥需要安全传递;
  • ++密钥传递++ 用非对称加密,公钥公开(谁都能拿),私钥保密(只有服务器有);
  • 没有私钥或合法的中间人身份,就算抓到加密数据,也只是一堆乱码,无法还原明文(就像没有钥匙,再怎么看密码锁也打不开)。

2. HTTP 升级到 HTTPS,到底靠什么保证安全性?机制有哪些?

HTTPS 本质是 "HTTP + TLS/SSL",核心安全机制有 3 个,缺一不可:

(1)身份认证:确保你连的是 "真网站",不是假网站

  • 机制:服务器会出示CA 证书(相当于网站的 "身份证"),证书里包含服务器的公钥和网站域名,且由权威 CA 机构签名。

(2)数据加密:确保传输过程中数据不被窃取

  • 机制:客户端和服务器协商出一个对称密钥(可以理解为是客户端和服务之间的一个"暗号"),所有 HTTP 数据都用这个密钥加密后传输,就算被抓包,攻击者也看不到明文。

(3)数据完整性:确保数据不被篡改

  • 机制:传输的数据会附带校验码,如果数据被中途篡改,校验码会不匹配,客户端 / 服务器会直接断开连接。

3. 服务端能否被伪造?为什么不能?

正常情况下,服务端不能被伪造!

核心原因:「CA 证书的信任链机制」+「私钥唯一性」:

  • 伪造服务端需要两样东西:① 伪造的 CA 证书;② 对应证书的私钥。
  • CA 证书是由权威机构签名的,攻击者无法伪造(就像你不能自己造一张假身份证,因为公安系统不会认可);
  • 私钥只有真实服务器持有,攻击者无法获取,除非服务器被入侵;
  • 客户端(浏览器 / 手机)会内置所有权威 CA 机构的公钥,收到证书后会验证签名,如果是伪造的证书,会直接提示 "证书无效"(比如浏览器显示 "您的连接不是私密连接")。

特殊情况

如果攻击者控制了你的设备(如安装了恶意软件),或你手动信任了 "非法 CA 证书"(如钓鱼网站的证书),则可能被伪造服务端(即 "中间人攻击")。

4. 中间人能否解密 TLS?如果可以,需要什么条件?

中间人能解密,但必须满足 2 个核心条件(缺一不可):

  • 条件 1:能拦截客户端和服务器之间的所有流量比如攻击者在你的网络中(如公共 Wi-Fi),或控制了你的路由器,能让客户端的流量先经过自己,再转发给服务器(即 "流量劫持")。

  • **条件 2:能让客户端信任自己的 "伪造证书"**中间人需要伪造一个和目标网站域名一致的证书,并且让客户端(你的电脑 / 手机)信任这个证书(比如手动导入证书,或通过恶意软件篡改客户端的信任列表)。

为什么无条件的中间人攻击不行?

因为客户端不会信任 "没经过权威 CA 签名的伪造证书",就像你不会相信一个没有正规证件的 "交警",会直接拒绝和他交流(浏览器提示证书错误,断开连接)。

5. 通信流量能否被中间人无条件直接抓包解密?为什么不能?

不能!

核心原因:「没有解密钥匙」+「身份认证失败」:

  • 中间人就算抓到加密流量,也没有服务器的私钥,无法解密对称密钥;
  • 中间人无法伪造被客户端信任的 CA 证书,客户端会识别出 "身份伪造",直接断开连接,不会发送真实数据。

6. BurpSuite 作为中间人,满足什么条件才能看到明文?

BurpSuite 能解密,本质是 "让客户端信任它的伪造证书",具体条件:

  1. Burp 拦截并转发流量:客户端的所有 HTTPS 流量都经过 Burp(需配置代理,比如浏览器代理指向 Burp 的 8080 端口);
  2. Burp 生成伪造证书 :Burp 会为每个目标网站生成一个 "伪造的 CA 证书"(比如伪造 www.baidu.com 的证书);
  3. 客户端信任 Burp 的根证书:需要手动将 Burp 的 "根证书" 导入客户端(比如浏览器、系统信任列表),让客户端认为 Burp 的伪造证书是 "合法的"。

7. Wireshark 如何自动解密 TLS 流量?

Wireshark 解密的核心是 "获取解密钥匙",常见方法有 3 种:

方法 1:导入服务器私钥(最常用)

  • 条件:你拥有目标服务器的私钥(如网站管理员);
  • 操作:
    1. 打开 Wireshark → 编辑 → 首选项 → Protocols → TLS;
    2. 在 "RSA keys list" 中添加服务器的 IP、端口(443)、协议(http)、私钥文件路径;
    3. 抓包后,Wireshark 会自动用私钥解密 TLS 流量,显示 HTTP 明文。

方法 2:获取 Pre-Master Secret(适合客户端侧解密)

  • 条件:你能控制客户端(如自己的电脑);
  • 操作:
    1. 客户端设置环境变量 SSLKEYLOGFILE(比如 Windows 设为 C:\ssl.log);
    2. 启动浏览器,访问 HTTPS 网站,浏览器会自动将 TLS 握手时的 Pre-Master Secret 写入 ssl.log
    3. Wireshark 导入 ssl.log(首选项 → TLS → SSL key log file),即可自动解密。

方法 3:利用浏览器导出的会话密钥

  • 条件:客户端是浏览器(如 Chrome/Firefox);
  • 操作:在浏览器的开发者工具(F12)→ 安全 → 查看证书 → 导出会话密钥,导入 Wireshark 即可。

简单理解

Wireshark 就像一个 "密码锁解码器",只要给它 "钥匙"(私钥、SSL 日志),它就能解开 TLS 的加密,显示里面的明文数据。

最后总结

  • HTTPS 安全的核心:身份认证(CA 证书)+ 密钥加密(对称 + 非对称)+ 数据完整性(校验码)
  • 解密的关键:拿到私钥 或 成为被信任的中间人
  • 无条件解密不可能:因为没有钥匙,且身份伪造会被识破。
相关推荐
fanged2 小时前
STM32(5)--HAL1(TODO)
笔记
grd44 小时前
RN for OpenHarmony 小工具 App 实战:屏幕尺子实现
笔记·harmonyos
丝斯20115 小时前
AI学习笔记整理(50)——大模型中的Graph RAG
人工智能·笔记·学习
小+不通文墨6 小时前
“超声波测量声速”实验报告
经验分享·笔记·学习·学习方法
lihao lihao6 小时前
平衡二叉树
笔记
JavaLearnerZGQ7 小时前
我的Redis笔记2【分布式缓存】
redis·笔记·缓存
代码游侠7 小时前
复习——ARM Cortex-A 裸机开发深度解析
arm开发·笔记·嵌入式硬件·学习·架构
吗喽1543451887 小时前
渗透高级第一次作业(笔记整理)
笔记·安全·网络安全
小+不通文墨7 小时前
“示波器的调节和使用”实验报告
经验分享·笔记·学习·学习方法