服务端请求伪造(SSRF)攻击进阶利用与防御绕过技术详解
字数 1370 2025-11-09 23:20:31
服务端请求伪造(SSRF)攻击进阶利用与防御绕过技术详解
知识点描述
服务端请求伪造(SSRF)是一种由攻击者构造恶意请求,诱使服务器向内部或第三方系统发起请求的攻击。进阶利用涉及绕过基础防御、访问云元数据服务、利用协议处理差异等场景。防御绕过技术则针对黑名单过滤、URL解析混淆等方法。
攻击原理与危害
- 核心机制:攻击者控制服务器发起请求的目标,例如:
- 通过修改参数(如
url=http://内部IP)使服务器访问内网资源。 - 利用服务器权限读取本地文件(如
file:///etc/passwd)。
- 通过修改参数(如
- 危害范围:
- 内网探测:扫描内网端口和服务。
- 云环境风险:访问云厂商元数据接口(如AWS的
169.254.169.254)获取临时凭证。 - 绕过网络隔离:通过服务器作为跳板攻击受限系统。
进阶利用技术
- 协议利用:
- Gopher协议:支持发送任意TCP数据包,可伪装成POST请求或Redis命令。
示例:gopher://127.0.0.1:6379/_*3%0d%0a$3%0d%0aset%0d%0a$1%0d%0ax%0d%0a$1%0d%0ay%0d%0a可向Redis插入数据。 - Dict协议:探测端口信息(如
dict://127.0.0.1:22返回SSH标识)。
- Gopher协议:支持发送任意TCP数据包,可伪装成POST请求或Redis命令。
- URL解析混淆:
- 利用解析差异绕过黑名单:
- 十进制IP:
http://2130706433(等同于127.0.0.1)。 - 省略端口默认值:
http://127.0.0.1:80/与http://127.0.0.1可能被不同处理。
- 十进制IP:
- 特殊字符绕过:
- 使用
@符号:http://example.com@恶意IP。 - Unicode编码:将点号替换为
。(全角符号)或%2E。
- 使用
- 利用解析差异绕过黑名单:
- 重定向利用:
- 控制外部域名返回302跳转到内网地址,绕过直接URL检测。
示例:攻击者域名配置重定向到http://169.254.169.254/latest/meta-data/。
- 控制外部域名返回302跳转到内网地址,绕过直接URL检测。
防御绕过技术
- 黑名单绕过:
- 使用备用IP格式(如八进制IP
0177.0.0.1或IPv6缩写[::])。 - 域名指向内网IP:通过短域名服务或DNS别名解析。
- 使用备用IP格式(如八进制IP
- 白名单绕过:
- 利用子域名拼接:若白名单允许
*.example.com,可注册evil.com.example.com。 - 通过基本认证参数嵌入:
http://expected-domain.com@恶意IP。
- 利用子域名拼接:若白名单允许
- 协议封装:
- 将HTTP请求封装到其他协议(如FTP、SFTP)中,利用库函数解析差异。
防御措施
- 输入验证:
- 使用白名单校验协议(仅允许HTTP/HTTPS)和域名。
- 解析URL后提取主机名,避免通过正则表达式直接匹配。
- 网络层控制:
- 禁止服务器访问内网和元数据服务(通过防火墙规则或网络配置)。
- 使用中间代理隔离请求,仅允许访问公网资源。
- 代码层防护:
- 禁用非常用协议(如
file://、gopher://)的库支持。 - 对响应内容类型做严格检查,避免数据泄露。
- 禁用非常用协议(如
总结
SSRF防御需结合多层级措施:输入校验、网络隔离、最小化服务器权限。攻击者常利用系统组件差异(如URL解析库与业务逻辑不一致)实现绕过,因此需定期测试边界情况。