freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

Server-Side Request Forgery分析与利用篇(一)
2022-04-27 21:17:00
所属地 浙江省

前言

很多人跟我说过,SSRF漏洞在面试过程中,会被问出“花样”,并且在了解我的伙伴们在面试中被问到的这些问题后,发现我个人对SSRF漏洞利用手法已经攻击构造都不是很深入,随即对这个漏洞以及扩展的攻击面、攻击手法做了比较仔细的研究,秉承“分享”原则,哈哈哈,当然也是为了练练文笔,随即准备开几篇分析利用文出来,方便新入门的和了解不太深入的小伙伴门参考。当然,如果哪位大佬有时间看到了我的文章,也欢迎指导批评!

一、定义与成因

SSRF(Server-side Request Forgery):服务器端跨站伪造,顾名思义,该漏洞就是由于服务器端接收输入功能位置处未对参数做严格的过滤,从而导致由攻击者构造形成服务器端发起请求的一个安全漏洞

【漏洞成因】

  • 从外网无法访问的内部系统(正是因为SSRF漏洞是由服务器端发起的,所以它能够请求到与它相连而外网隔离的内部系统)
  • 由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制。攻击者通常利用一个可以发起网络请求的服务当作跳板来攻击内部其他服务(访问读取内网文件、探测内网主机存货、扫描内网端口开放、攻击内网其他应用。。。),而这些服务或攻击手段是正常来说通过外部访问访问不到的、无法利用的,即请求由服务端发起!

二、不同语言利用难度

SSRF在php中危害较大,php中的相关函数file_contents()、readfile()、curl_exec()、fopen()、fsockopen()等一旦使用不当就会产生SSRF漏洞

SSRF在python和java中相对来说,利用会有一定的难度,因为很多常用的协议在库中不支持,并且还有语言版本的限制因素存在。但是还是可以利用的,只要路子野。。。(具体怎么野法,后续再讲,本期就bb清楚SSRF漏洞原理层面就好了)

三、SSRF常用协议

【file协议】:在有回显的情况下,利用file协议可以读取任意文件的内容

作用:主要是用于访问本机计算机中的文件(file://文件路径)

利用它可以直接读取系统文件,例如

ssrf.php?url=file:///etc/passwd

ssrf.php?url=file://c://boot.ini

与http/s协议的区别:

①file协议用于静态读取,http/s可用于动态解析

File访问的是服务器的一个静态的文件,而http/s访问的是服务器的html这种资源文件,即多了一个把访问的机器当作http服务器,解析请求后再去访问资源的过程

②file是不能跨域读取的而通过http/s可以访问的服务器则可以把自己当成http服务器,开放端口供他人访问的

【Gopher协议】:gopher支持发出GET、POST请求。可以先截获get请求包和post请求包,再构造成符合gopher协议的请求。Gopher协议是SSRF利用中一个最强大的协议(俗称万能协议)。可以用于反弹shell

Gopher协议是在http协议诞生前用来访问Internet资源的协议,可以理解为http协议的前身或简化版,虽然很古老但现在很多库还支持Gopher协议而且Gopher协议功能很强大

使用一条gopher协议命令可以完成复杂的操作,比如实现对mysql、Redis的攻击,这是由于Gopher允许数据包整合发送,这一点,与dict协议形成了对比

Gopher支持GET和POST请求

格式:gopher://<host>:<port>/<gopher-path>_后接TCP数据流

Eg:curl gopher://129.168.2.203:9999/_lcx 对面会接收到lcx(需要在正式要传递过去的数据前增加一个无用字符,否在第一个字符会接收不到)

或者传递

Curl gopher://192.168.25.203:9999/_hello%0alcx

对面会接收到

Hello

Lcx

注:如果用url访问需要再进行一次url编码

常见攻击例子:用gopher干redis,还可以攻击mysql、structs2、fastcgi、ftp。。。

【Dict协议】:泄露安装软件版本信息,查看端口,操作内网redis服务等

Gopher协议虽然是最好的,但是使用有环境限制,必要的时候可以尝试使用dict代替

Dict://serverip:port/命令:参数

Eg:dict://192.168.25.203:6379/get:name(当然也可以没有命令与参数)

相比gopher协议的允许集合成一条命令执行,dict需要一条一条的执行,且向服务器的端口请求为【命令:参数】时,会在末尾自动补上\r\n(CRLF)为漏洞利用增添了便利

常用例子:干redis

Dict://192.168.25.203:6379/info

Dict://192.168.25.203:6379/get:user

dict://192.168.25.203:6379/flushall

或者

反弹shell

【http/s协议】:探测内网主机存活

四、SSRF可能存在的功能位置

1.未公开的api实现以及其他扩展调用URL的功能

2.编码、属性信息、文件处理

3.邮件系统

4.数据库内置功能

5.网站采集、网站抓取的位置

6.图片/文章收藏位置

7.图片加载/下载位置

8.在线翻译

9.转码

10.社交分享

11.从远程服务器请求资源

……

五、漏洞验证及利用

【漏洞验证】

排除法

Dnslog等工具进行测试,看是否被访问

抓包分析发送的请求是不是由服务器端发送的,如果不是客户端发出的请求,则有可能是,接着找存在HTTP服务器的内网地址

直接返回的Banner、title、content等信息

bool型SSRF

【利用方式】

让服务器访问相应的网址

让服务器访问自己所处内网的一些指纹文件来判断是否存在相应的CMS

可以使用file、dict、gopher、ftp等协议进行请求访问相应的文件

攻击内网web应用

判断内网主机是否存活以及端口开放程度

Dos攻击

总结

好了,关于SSRF基础知识,这篇文章就总结到这里好了,本人水平有限,有什么还需要补充的,欢迎各位来指点!共同进步哈!溜了溜了溜了,再见再见再见!



# 渗透测试 # web安全 # 内网渗透 # 漏洞分析
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录