[i=s] 本帖最后由 zeke 于 2025-9-8 22:10 编辑 [/i]
WEB渗透测试工程师系统班250303期
第35节课作业
1、SSRF漏洞原理
SSRF漏洞的原理是:攻击者诱使服务器应用程序向攻击者指定的内部或外部网络地址发起非本意的HTTP请求。
简单说就是:利用一个网站作为“跳板”或“代理”,去攻击它自己能访问到的其他系统。
2、 SSRF漏洞用途
SSRF漏洞的主要用途
Ⅰ.攻击服务器本身(本地回环)
①端口扫描:探测服务器本地(127.0.0.1)开放的其他服务端口。
http://vuln-site.com/ssrf.php?url=http://127.0.0.1:22 (检查SSH)
http://vuln-site.com/ssrf.php?url=http://127.0.0.1:3306 (检查MySQL)
http://vuln-site.com/ssrf.php?url=http://127.0.0.1:6379 (检查Redis)
②读取本地文件:利用file://协议读取服务器上的敏感文件。
http://vuln-site.com/ssrf.php?url=file:///etc/passwd (Linux用户信息)
http://vuln-site.com/ssrf.php?url=file:///C:/Windows/System32/drivers/etc/hosts (Windows hosts文件)
http://vuln-site.com/ssrf.php?url=file:///proc/self/cmdline (查看当前进程命令)
Ⅱ.攻击内网其他系统(横向移动)
这是SSRF最危险的用途之一。Web服务器通常位于内网,可以访问许多外部用户无法直接访问的系统。
①.探测内网服务:扫描整个内网IP段,发现存活主机和开放端口。
http://vuln-site.com/ssrf.php?url=http://192.168.1.1:8080
http://vuln-site.com/ssrf.php?url=http://172.16.0.10:80
②.攻击特定内网应用:
Redis/Memcached:利用未授权访问执行命令(如您之前实验的gopher协议攻击)。
数据库:攻击MySQL、MongoDB等数据库的未授权或弱口令服务。
管理后台:访问Jenkins、Docker API、Kubernetes API、各类设备的Web管理界面等。
③.其他Web应用:攻击只有内网才能访问的OA系统、测试环境等。
Ⅲ.窃取云元数据(Cloud Metadata)
这是云环境中最致命的SSRF利用方式。云平台(AWS、阿里云、Azure、GCP等)通过一个固定的内网地址提供实例的元数据服务。
①.AWS:
http://vuln-site.com/ssrf.php?url=http://169.254.169.254/latest/meta-data/
可以获取IAM角色凭证、Access Key、Secret Key等,导致云服务器被完全接管。
②.阿里云:
http://vuln-site.com/ssrf.php?url=http://100.100.100.200/latest/meta-data/
③.腾讯云:
http://vuln-site.com/ssrf.php?url=http://metadata.tencentyun.com/latest/meta-data/
获取这些凭证后,攻击者可以直接通过API管理你的云资源,危害性极大。
Ⅳ. 绕过访问控制
①.绕过IP白名单:如果某个内部系统只允许公司IP或服务器IP访问,攻击者可以通过SSRF以服务器的身份访问它。
②.绕过身份验证:访问那些认为"来自localhost的请求就是可信的"的内部应用。
Ⅴ.发起其他协议的攻击
SSRF不仅限于HTTP,还可以利用其他协议发起更复杂的攻击:
①Gopher协议:可以构造任意TCP数据包,是攻击Redis、MySQL等服务的利器。
gopher://127.0.0.1:6379/_...(精心构造的Redis命令)...
②Dict协议:可以获取服务横幅信息,用于指纹识别和端口探测。
dict://127.0.0.1:22 (获取SSH服务信息)
Ⅵ.造成拒绝服务(DoS)
循环请求:让服务器不断请求自己或其他资源,消耗服务器资源。
http://vuln-site.com/ssrf.php?url=http://vuln-site.com/ssrf.php?url=...
3、 怎么找SSRF漏洞
寻找SSRF(Server-Side Request Forgery)漏洞是一个系统性的过程,需要结合手动测试、工具辅助和漏洞原理理解。
一、寻找可能存在SSRF的功能点
首先,你要在目标应用中寻找那些可能会让服务器发起网络请求的功能。这些是SSRF的“入口点”。
1. 明显的功能点:
- URL下载/预览:允许用户输入URL以下载或预览内容的功能。
- 例如:“分享到Twitter”、“URL预览”、“生成链接预览图”
- 文件处理:上传图片或文档的处理功能(服务器可能需要下载远程图片进行处理)。
- 数据采集/爬虫:任何声称可以从其他网站获取数据的功能。
- Webhook设置:允许用户设置Webhook URL的功能(测试时可能触发请求)。
- API接口:任何接受URL作为参数的API端点。
- 例如:
/api/fetch?url=http://example.com
2. 隐藏的功能点(需要更仔细地挖掘):
- 参数中包含URL:留意任何参数名如
url、path、redirect、view、image、load、file、host、api、endpoint等。
- 参数中包含IP地址:参数可能是IP格式,如
10.0.0.1。
- 参数中包含域名:参数可能是域名格式。
- 文件导入/导出:例如“从URL导入CSV”、“导出数据到S3”。
- SSO/OAuth登录:有时在回调阶段可能存在SSRF。
- 文档处理:例如Word/Excel在线查看器,可能会下载外部链接的内容。
二、手动测试方法
找到可疑功能点后,开始手动测试。
1. 基本探测:
- 尝试回环地址:将参数值改为
http://127.0.0.1或http://localhost,观察响应是否有变化(如错误信息、响应时间变长)。
- 尝试非HTTP协议:尝试
file:///etc/passwd、dict://localhost:22、ftp://example.com等。
- 尝试云元数据端点:直接访问
http://169.254.169.254/(AWS)或http://100.100.100.200/(阿里云)。
2. 使用Burp Suite Collaborator或Interactsh:
- 这是最有效的方法。生成一个Burp Collaborator或Interactsh域名,将其作为参数值提交。
- 如果服务器发起了请求,你会在Burp或Interactsh上看到DNS查询和HTTP请求,从而确认漏洞存在。
3. 观察响应:
- 直接输出:如果响应中直接包含了请求的内容,那么漏洞很容易被利用。
- 盲SSRF:即使响应中不返回任何信息,也可能存在“盲SSRF”。这时需要依靠DNS查询或时间延迟来判断。
- 错误信息:注意观察错误信息,它们可能泄露内部IP或端口信息。
4. 绕过技巧(如果初步测试被拦截):
- IP地址编码:
- 十进制IP:
127.0.0.1 -> 2130706433
- 十六进制IP:
127.0.0.1 -> 0x7f000001
- 八进制IP:
127.0.0.1 -> 0177.0.0.01
- URL编码:对
://、/、.等字符进行URL编码。
- 使用别名:
localhost -> 127.0.0.1 -> 0.0.0.0
- 域名重绑定:使用
rbndr.us等服务,绕过黑名单校验。
- 利用Redirect:提供一个URL,该URL会302重定向到
127.0.0.1。
三、自动化工具辅助
手动测试的同时,可以用工具提高效率。
- Burp Suite Professional:
- Scanner:自动扫描参数。
- Collaborator:检测盲SSRF的神器。
- Intruder:用于爆破内网IP段和端口。
- ffuf / dirsearch:
- SSRFmap:
- 专门的SSRF自动化利用工具,支持多种协议和自动攻击内网。
- Gopherus:
- 专门生成攻击Redis、MySQL等服务的Gopher payload。
4、 利用SSRF漏洞file读取文件实操(截图)
①构造漏洞环境,小皮搭建一个查询的网址

②用file读取文件

注:在linux环境里,用file读取需要目标有安装相关的 curl 扩展
5、 利用dict协议实操SSRF(截图)
dict:用于获取目标服务器端口上运行的服务版本信息
命令:dict://192.168.110.225:80

6、实操课程内讲解的相关靶场(截图)
复现操作:kali为受害者,物理机为攻击者,在物理机上用工具生成gopher代码,往kali里面打入一个shell.php文件(注:物理机没python2环境,换成用kali生成gopher攻击代码)
①攻击者物理机上搭建ssrf2.php
②受害者kali上面布置redis环境



③kali下载针对redis环境的攻击工具

④启动攻击工具,生成恶意gopher代码


⑤将127.0.0.1改为受害者(kali)的IP,为192.168.174.141
复制这段gopher代码,输入到ssrf2.php的输入框内,进行攻击

⑥攻击成功,受害者kali被打入shell.php文件

Yakit靶场
Less-2 SSRF JSON Body SSRF
在该漏洞案例中,攻击者构造了一个 JSON 请求,其中包含一个名为 "ref" 的字段,其值为恶意的 URL(如 https://www.atacker.com)。 当服务器解析该 JSON 请求时,会发起一个 GET 请求到指定的 URL。攻击者可以通过设置恶意 URL 来访问受限制的内部资源、绕过防火墙、探测内网服务等。

一、笔记标题:WEB渗透系统班-SSRF服务端请求伪造(一)+SSRF服务端请求伪造(二)
二、文章内容:
1.课程内容概要
主要知识点1:SSRF原理
主要知识点2:SSRF用途
主要知识点3:SSRF实操
2.重点知识与细节
概念解析
概念1:SSRF原理
概念2:
关键步骤(SSRF攻击)
步骤1:下节课总结
步骤2:
步骤3:
相关代码:
①curl扩展的检查和安装命令
php -m | grep curl
apt-get install php-curl
②ftp:端口探测是否开放
如果响应时间是 2s,说明目标服务器没有开放该端口
如果是 10s甚至更长,说明该端口开放
命令:ftp://有漏洞环境的IP地址:探测的端口
③ssrf2.php

3.实操练习和解析
如作业
4.个人总结
本节课最大的收获是:学习了SSRF攻击的原理,对SSRF漏洞进行了实操
仍然存在疑问的地方:暂无
需要课后深入学习的内容:yakit靶场的SSRF章节