元素码农
基础
UML建模
数据结构
算法
设计模式
网络
TCP/IP协议
HTTPS安全机制
WebSocket实时通信
数据库
sqlite
postgresql
clickhouse
后端
rust
go
java
php
mysql
redis
mongodb
etcd
nats
zincsearch
前端
浏览器
javascript
typescript
vue3
react
游戏
unity
unreal
C++
C#
Lua
App
android
ios
flutter
react-native
安全
Web安全
测试
软件测试
自动化测试 - Playwright
人工智能
Python
langChain
langGraph
运维
linux
docker
工具
git
svn
🌞
🌙
目录
▶
注入攻击与防御
SQL注入原理与利用
SQL注入防御策略
NoSQL注入技术分析
命令注入漏洞实战
ORM框架注入问题
注入攻击自动化检测
▶
认证与会话安全
会话固定与会话劫持
密码存储与加密策略
多因素认证机制
OAuth2.0安全实践
JWT安全攻防
认证逻辑漏洞挖掘
▶
XSS攻击与防御
XSS攻击原理与分类
存储型XSS实战案例
DOM型XSS高级利用
XSS过滤器绕过技术
CSP内容安全策略
前端框架XSS防护
▶
CSRF与点击劫持
CSRF攻击原理演示
CSRF Token防御实践
点击劫持技术剖析
SameSite Cookie策略
框架内置防护机制
跨域资源安全策略
▶
文件安全攻防
文件上传漏洞利用
安全文件类型验证
路径遍历漏洞实战
文件包含漏洞防御
Office文档攻击解析
云存储安全配置
▶
其他Web攻击技术
SSRF漏洞利用与防御
XXE漏洞攻防实战
反序列化漏洞原理
业务逻辑漏洞挖掘
HTTP请求走私攻击
Web缓存投毒攻击
发布时间:
2025-03-23 13:36
↑
☰
# SSRF漏洞利用与防御 ## SSRF漏洞概述 SSRF(Server-Side Request Forgery)服务器端请求伪造是一种常见的Web安全漏洞。攻击者可以通过构造恶意请求,让服务器访问攻击者指定的URL,从而可能导致内网信息泄露、远程命令执行等安全问题。 ## 漏洞原理 ### 1. 基本原理 ```python # 不安全的SSRF示例 from flask import Flask, request import requests app = Flask(__name__) @app.route('/fetch') def fetch_url(): url = request.args.get('url') # 直接使用用户输入的URL进行请求 response = requests.get(url) return response.text ``` ### 2. 常见场景 1. 图片处理服务 ```python # 图片处理中的SSRF风险 class ImageProcessor: def fetch_image(self, image_url): try: # 未验证URL的合法性 response = requests.get(image_url) return response.content except Exception as e: return str(e) ``` 2. 网页抓取服务 ```javascript // 网页抓取中的SSRF风险 const axios = require('axios'); async function fetchWebPage(url) { try { // 直接请求用户提供的URL const response = await axios.get(url); return response.data; } catch (error) { return error.message; } } ``` ## 攻击技术 ### 1. 基础攻击方式 ```python # SSRF攻击示例 class SSRFAttack: def demonstrate_basic_attack(self): # 1. 访问内网资源 internal_urls = [ 'http://localhost:8080/admin', 'http://192.168.1.1', 'http://10.0.0.1' ] # 2. 端口扫描 def scan_port(host, port): url = f'http://{host}:{port}' try: requests.get(url, timeout=1) return f'Port {port} is open' except: return f'Port {port} is closed' ``` ### 2. 高级利用技术 ```python # 高级SSRF攻击技术 class AdvancedSSRFAttack: def bypass_filters(self): # 1. DNS重绑定攻击 payload = 'http://attacker.com' # DNS重绑定到内网IP # 2. URL编码绕过 encoded_payload = 'http://127.0.0.1'.encode('utf-8').hex() # 3. 协议绕过 protocol_payloads = [ 'gopher://', 'file://', 'dict://', 'ftp://' ] ``` ## 防护措施 ### 1. 输入验证 ```python # URL验证类 class URLValidator: def __init__(self): self.allowed_domains = [ 'api.example.com', 'cdn.example.com' ] self.allowed_schemes = ['https'] def is_valid_url(self, url): try: parsed = urlparse(url) # 检查协议 if parsed.scheme not in self.allowed_schemes: return False # 检查域名 if parsed.netloc not in self.allowed_domains: return False # 检查IP地址 if self._is_internal_ip(parsed.netloc): return False return True except Exception: return False def _is_internal_ip(self, host): try: ip = socket.gethostbyname(host) return ipaddress.ip_address(ip).is_private except: return False ``` ### 2. 网络隔离 ```python # 网络隔离配置 class NetworkIsolation: def configure_network(self): # 1. 使用代理服务 proxy_config = { 'http': 'http://proxy.example.com:3128', 'https': 'http://proxy.example.com:3128' } # 2. 防火墙规则 firewall_rules = [ 'deny access to internal networks', 'allow only specified external domains', 'block all ports except 80,443' ] ``` ### 3. 请求控制 ```python # 请求控制实现 class RequestController: def __init__(self): self.max_redirects = 3 self.timeout = 10 self.max_size = 1024 * 1024 # 1MB def safe_request(self, url): try: response = requests.get( url, allow_redirects=True, max_redirects=self.max_redirects, timeout=self.timeout, stream=True ) # 检查响应大小 content_length = response.headers.get('content-length', 0) if int(content_length) > self.max_size: raise Exception('Response too large') return response.content except Exception as e: return str(e) ``` ## 最佳实践 ### 1. 开发建议 1. 代码安全 - 使用安全的HTTP客户端库 - 实现完整的URL验证 - 设置请求超时和重定向限制 - 记录详细的请求日志 2. 配置管理 - 维护白名单域名列表 - 配置网络访问策略 - 设置资源访问限制 - 启用安全监控告警 ### 2. 运维建议 1. 网络配置 - 部署Web应用防火墙 - 实施网络分段隔离 - 配置反向代理服务 - 限制出站连接策略 2. 监控审计 - 记录异常请求日志 - 配置安全告警机制 - 定期安全评估检查 - 建立应急响应预案 ### 3. 安全加固 1. 系统加固 - 关闭不必要服务 - 限制系统资源使用 - 配置最小权限原则 - 更新安全补丁策略 2. 应用加固 - 启用安全请求头 - 配置访问控制策略 - 实施输入输出验证 - 加密敏感信息传输 ## 总结 SSRF漏洞防护需要多层次防御: 1. 技术层面 - 严格的输入验证 - 完善的网络隔离 - 有效的请求控制 2. 管理层面 - 规范的开发流程 - 完整的监控体系 - 及时的响应机制 3. 持续改进 - 跟进安全趋势 - 更新防护策略 - 优化安全配置