SSRF 服务端请求伪造
1. SSRF 简介
SSRF 是一种 Web 安全漏洞,允许攻击者通过服务器端发送 HTTP 请求。利用 SSRF,攻击者可以访问服务器内部的资源,比如内部网络中的服务或敏感数据。
2. SSRF 的工作原理
SSRF 攻击通常发生在服务器接受了用户输入,并将其用来生成一个请求。在没有对输入进行适当的校验和过滤的情况下,攻击者可以控制请求目标,发送恶意请求。
示例代码:
python
import requests
def fetch_url(url):
response = requests.get(url)
return response.text
# 用户输入的 URL
user_input = "http://example.com"
# 直接使用用户输入生成请求
data = fetch_url(user_input)
print(data)
在上面的例子中,user_input
可以被攻击者控制,如果输入一个恶意 URL,比如内部 IP 地址或某个敏感资源的地址,服务器将会向该地址发送请求。
3. SSRF 攻击的类型
SSRF 攻击可以分为两类:
- 普通 SSRF:攻击者直接发送 HTTP 请求到内部资源。
- 盲 SSRF(Blind SSRF):攻击者无法直接看到响应结果,但可以通过一些侧信道获取信息。
4. SSRF 攻击的利用场景
- 访问内部网络中的敏感服务(如数据库、Redis、内网管理后台等)。
- 进行端口扫描,发现内部网络中的开放端口。
- 通过读取元数据服务,获取云服务中的凭证和配置信息(如 AWS 的 EC2 元数据服务)。
- 读取本地文件
内网应用指纹识别(httpd.conf 部署)
plain
<Directory "c:\www\phpMyAdmin">
#Order allow,deny
Order deny,allow
deny from all
allow from 127.0.0.1
<Directory>
可以利用ssrf来进行攻击
http
http://192.168.109.100/ssrf/ssrf_curl.php?url=http://127.0.0.1/phpmyadmin
5. 防御 SSRF 攻击的方法
-
输入验证和过滤:严格限制和验证用户输入,确保只能访问允许的资源。
-
使用白名单:仅允许访问特定的、安全的 URL 或 IP 地址。
-
网络隔离:将内部服务与外部访问隔离,避免外部请求直接访问内部网络。
-
最小权限原则:限制服务器和服务的访问权限,避免不必要的网络访问权限。
-
监控和检测:实时监控服务器请求行为,检测异常请求和潜在的 SSRF 攻击。
6. 学习资源
7. 实战演练
通过一些在线的练习平台,如 Hack The Box 或者 DVWA(Damn Vulnerable Web Application),可以进行 SSRF 漏洞的实战演练,进一步加深理解和掌握防御技术。
8. SSRF挖掘
Web功能 | URL关键字 |
---|---|
分享 转码服务 在线翻译 图片加载与下载 图片、文章收藏功能 未公开的API实现 . . . | share wap url link src source target u 3g display sourceURL imageURL domain . . . |