[渗透测试] SSRF 服务端请求伪造

发布于:2024-07-01 ⋅ 阅读:(12) ⋅ 点赞:(0)

SSRF 服务端请求伪造

1. SSRF 简介

SSRF 是一种 Web 安全漏洞,允许攻击者通过服务器端发送 HTTP 请求。利用 SSRF,攻击者可以访问服务器内部的资源,比如内部网络中的服务或敏感数据。

2. SSRF 的工作原理

SSRF 攻击通常发生在服务器接受了用户输入,并将其用来生成一个请求。在没有对输入进行适当的校验和过滤的情况下,攻击者可以控制请求目标,发送恶意请求。

示例代码:
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 部署)

<Directory "c:\www\phpMyAdmin">
	#Order allow,deny
	Order deny,allow
	deny from all
	allow from 127.0.0.1
	
<Directory>

可以利用ssrf来进行攻击

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
. . .

网站公告

今日签到

点亮在社区的每一天
去签到