思考一
通信流量是否可以被中间人解密,如果不能,为什么?
不可以。通信流量(尤其加密的,如HTTPS)没法无条件直接抓包解密,
-
加密流量(TLS/HTTPS):必须让客户端信任中间人(比如装中间人CA证书),且没证书固定等防护,才能解密,否则只能看到乱码;
-
非加密流量(HTTP/明文):不用解密(本身是明文),但得先能抓到包(比如在同一局域网),也不是无条件。
思考二
wireshark如何自动解密tls流量?
Wireshark自动解密TLS流量通常可通过设置SSLKEYLOGFILE环境变量配合浏览器来实现,具体操作步骤如下:
-
配置环境变量与浏览器 :设置名为"SSLKEYLOGFILE"的环境变量,指定其值为用于存放密钥信息的日志文件路径。不同系统设置方法略有差异,Windows系统可在环境变量设置页面添加该变量;Linux或MAC OS X系统可通过命令
export SSLKEYLOGFILE=~/path/to/sslkeylog.log设置,如需每次启动系统时都指定该路径,可在.bashrc(Linux)或.MacOSX/environment(MAC OS X)文件中添加相关配置。此外,部分浏览器还需进行额外设置,如Firefox需在地址栏输入"about:config?filter=sslkeylog",将"security.ssl.enable_tls_key_logging"选项设为true并重启浏览器。 -
配置Wireshark:打开Wireshark,点击"Edit"→"Preferences",在左侧导航栏选择"Protocols"→"TLS",将右侧的"(Pre)-Master-Secret log filename"设置为前面配置的SSLKEYLOGFILE对应的文件路径,点击"OK"保存设置。
-
捕获并查看解密后的TLS流量:开始抓包,可通过"File"→"Capture"→"Start"操作。然后在浏览器或其他客户端发起HTTPS请求,完成后停止抓包,此时Wireshark会自动使用日志文件中的密钥信息解密TLS流量,可直接查看解密后的HTTP数据包明文内容。 此外,若TLS连接使用RSA密钥交换,可通过在Wireshark中配置RSA私钥来解密;若为PSK模式,则直接在Wireshark中指定PSK值即可解密。但这两种方式应用场景相对较少,前者不适用于ECDHE等前向保密协议,后者仅适用于特定的使用PSK密钥交换的TLS流量。
思考三
burpsuite作为中间人可以解密,满足什么条件才可以看到抓取的铭文数据?
| 证书信任 | 客户端(浏览器 / App / 设备)安装并信任 Burp 的 CA 根证书 |
|---|---|
| 网络拦截 | Burp 开启 Proxy 监听,客户端将 HTTP/HTTPS 代理指向 Burp 的 IP + 端口 |
| 协议兼容 | 目标无证书固定(Certificate Pinning),TLS 版本 / 加密套件与 Burp 兼容 |
| Burp 配置 | 启用 "SSL/TLS decryption",必要时配置域名解密规则 |
PHP伪协议简单介绍
PHP伪协议是PHP内置的"虚拟文件访问协议",无需真实的文件路径,可以直接操作各类资源(文件、网络、内存等等),核心用于文件操作、数据流处理,常用于开发或者渗透(比如文件包含漏洞利用)。
常见核心伪协议及用途:
-
file://:访问本地文件(默认协议),例:file:///etc/passwd(读Linux系统文件) -
http:///https://:访问网络资源(类似浏览器),例:http://xxx.com/test.php(获取远程文件) -
php://:核心内置协议,常用2个:-
php://input:读取POST请求原始数据(无需表单字段) -
php://filter:过滤/转换文件内容(如base64编码读取敏感文件),例:php://filter/read=convert.base64-encode/resource=config.php
-
-
data://:直接传递数据(类似"字符串伪装成文件"),例:data:text/plain;base64,SGVsbG8=(解码为"Hello") -
zip:///phar://:读取压缩包内文件(无需解压),例:zip://test.zip#file.txt(读压缩包内file.txt)
PHP 伪协议是 PHP 支持的内置 "虚拟文件访问协议" ,并非真实的网络协议,而是用于便捷访问本地文件、内存数据、网络资源等的特殊语法(如 php:// file:// 等)。若开发者未对用户输入的文件路径 / 协议进行严格过滤,攻击者可利用这些伪协议读取敏感文件、执行恶意代码,引发安全漏洞。
一、核心触发条件
- 代码中使用
file_get_contents()fopen()include()require()等文件操作 / 代码执行函数; - 函数的参数(如文件路径)可由用户控制(例如通过 GET/POST 参数传入);
- 未对用户输入的 "协议前缀"(如
php://data://)或路径进行过滤 / 白名单限制。
二、常用危险伪协议及利用场景
- file:// 本地文件读取(最基础)
-
作用:直接访问本地文件系统(默认协议)
-
漏洞场景:读取服务器敏感文件(配置、密码、源码等等);
- php://input 读取 POST 数据
-
作用:读取 HTTP 请求的 POST 原始数据;
-
漏洞场景:当代码允许包含 "任意路径",且 POST 数据未被过滤时,可注入恶意代码;
- php://filter 读取源码(base64 编码绕过滤)
-
作用:对文件内容进行过滤 / 转换(如编码、解密);
-
漏洞场景:直接读取 PHP 文件会被解析执行,无法看到源码,用
base64编码可绕开;
- data:// 直接执行代码
-
作用:将传入的数据当作 "文件内容" 处理,支持多种编码;
-
漏洞场景:开启
allow_url_include=On时,可直接注入恶意代码;
- zip:// 压缩包文件包含
-
作用:直接读取压缩包内的文件,无需解压;
-
漏洞场景:绕开 "仅允许访问特定后缀文件" 的限制;
文件包含漏洞简介
包含日志的漏洞,核心是"日志内容被恶意篡改后,通过文件包含功能执行恶意代码",本质是**"日志注入+文件包含"的组合漏洞**,常见场景和原理如下:
-
日志注入漏洞 日志(如Web服务器日志、应用操作日志)会记录访问者信息(如IP、User-Agent、请求参数),若未过滤恶意输入,攻击者可故意提交含PHP代码的内容,让代码被写入日志文件。
-
文件包含漏洞 若应用存在文件包含功能(如用PHP的
include()/require()函数),且能指定包含"日志文件路径",攻击者就能让应用包含被注入恶意代码的日志文件,最终执行代码(如获取服务器权限)。PHP的
include()/require()函数功能是把指定文件的代码 "嵌入" 到当前脚本中,与当前脚本代码合并执行(被包含文件中的 PHP 代码会被解析执行,纯文本 /HTML 会直接输出)。