4.5 SSRF

https://book.hacktricks.xyz/pentesting-web/ssrf-server-side-request-forgery

简介

原理

SSRF Server Side Request Forgery,服务端请求伪造。

通常出现在网站请求 url 资源的情况下。如果服务端对用户传入的 url 未适当检查,就可以使网站服务器请求自身敏感资源或者探测内网内其它机器(探针),或利用可以通过 url 触发的漏洞(利用)。

即端口扫描、与漏洞利用。

实际中的限制

进行端口扫描时,受限于不同编程语言对 url 协议的支持程度与配置情况。详见文末

例如,php 可禁用 allow_url_fopen ,以禁止对 url 风格的文件的支持。

如何攻击

主要是寻找攻击面,然后尝试突破防御,最后进行利用。

  • 攻击面:留意数据包中的 url 参数。可以结合参数名和参数值根据经验判断。

  • 突破常见代码防御,见下文。

  • 进行利用,见下文。

如何防御

ssrf 属于输入验证不当,可以从这点进行防御,设定过滤规则良好的正则表达式。

此外还可以通过禁用某些参数,例如 php 中 allow_url_fopen 等。

常见防御绕过

  • 不严谨的 url 检验方式。

  • 更改其它协议。

  • 常见的 本地 ip 替换形式,参考

    # 本地ip 127.0.0.1 的替代形式
    
    127.1
    localhost
    127.127.127.127 # cdir
    0x7f000001      # 16 进制
    2130706433		# 10 进制
    017700000001	# 8 进制
    
  • DNS 解析指向本地 ip ,参考

    # 以下域名进行解析都会返回 127.0.0.1
    
    127.0.2.1.nip.io
    customer1.app.localhost.my.company.127.0.0.1.nip.io
    spoofed.burpcollaborator.net
    
  • dns 重绑定。

    大致原理:当防御机制进行检测时,第一次请求 dns 时,返回正常ip。然后更改 dns 将其重绑定为 127.0.0.1,当代码中第二次请求时,就会返回 127.0.0.1。

    参考 完整技术细节 、可用工具:singularitydnsFookup

利用手法

ssrf 利用工具

端口扫描

因为 url 格式中有多种协议,可以利用不同的协议进行探测。不同编程语言对 url 协议的支持度不同。

scheme:[//[user[:password]@]host[:port]][/path][?query][#fragment]

只要不显式 connect refuse ,那么就是 开放端口。

下表是利用中常见的一些协议,详见 这篇文章

http://		#获取敏感功能网页(对外不开放),扫描端口
file://		#获取服务器本地文件
dict://		#端口扫描
SFTP://		#端口扫描
LDAP://		#端口扫描
Gopher://	#可以构造其它协议请求 参考 https://zhuanlan.zhihu.com/p/112055947

若要探测版本信息,需要符合应用层协议,可以参考 nmap 中 banner 脚本

应用层协议属于应用程序通讯语法规则,若应用程序收到非法数据包,依据应用程序的处理规则可能进行响应,也可能不会响应。

漏洞利用

因为 ssrf 本质是发送 url 请求,所以只能利用可以通过 url 触发的漏洞。例如 Struts2-045

可以通过 url 触发的漏洞 。云主机、云服务器的 利用方式

盲 ssrf ,几乎无法利用,只能碰运气。可以用已知的通过 url 利用的漏洞盲打。

其它

不同编程语言支持的不同协议。

4.5 SSRF

上一篇:SSRF-服务端请求伪造


下一篇:WEB安全之:SSRF