SSRF漏洞

Posted zhangqianxi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SSRF漏洞相关的知识,希望对你有一定的参考价值。

SSRF参考视频 (源自哔哩哔哩): https://www.bilibili.com/video/BV1p4411X7UZ?p=60

参考文章 :

https://www.freebuf.com/column/157466.html

https://www.sohu.com/a/241307328_653604

https://www.secshi.com/36469.html

https://blog.csdn.net/fageweiketang/article/details/88983921

https://www.freebuf.com/tag/ssrf%E6%BC%8F%E6%B4%9E

https://blog.csdn.net/qq_37133717/article/details/94647789

https://blog.csdn.net/weixin_34015566/article/details/88678240?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase                                                                                     <衷心感谢!!!!!>


 

0X -1  SSRF漏洞解释

SSRF定义:是一种构造请求,由服务端发起的安全请求漏洞。

SSRF与CSRF的区别就是,一个是服务端向内网发起的请求,一个是客户端向服务端发起的请求。

什么是SSRF
SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。

技术图片

 

正常情况下,客户端无法直接获取内网资源,只能通过先服务器请求,然后服务器再向内网资源发送请求,内网资源把数据传回给服务器,服务器在传回给客户端,(也就是说,服务器和内网之间是相互串通的,服务器可以访问任何内网的资源,但是客户端不可以直接向内网请求获取数据),在正常情况下,客户端对服务器的请求是有限制的,也就是说只能请求一部分内网的资源,但是如果服务器端存在SSRF 漏洞,客户端就可以随便向服务端发送请求,也就是说,客户端可以任意访问内网资源,造成内网资源泄露产生更大影响。

 


 

0X-2 SSRF漏洞代码分析

//存在SSRF漏洞代码
<?php
   function curl($curl){
            
            $ch = curl_init();       //初始化代码
            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt($ch,CURLOPT_HEARER,0);
            curl_exec($ch);      //执行访问URL
            curl_close($ch);     //关闭连接
   }
   $url = $_GET[‘url‘];      //GET请求获取URL
   curl($url);
?>

PHP cURL 函数


概述

PHP支持的由Daniel Stenberg创建的libcurl库允许你与各种的服务器使用各种类型的协议进行连接和通讯

libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。

PHP中使用cURL实现Get和Post请求的方法

这些函数在PHP 4.0.2中被引入。

 技术图片

 

 

 

 这里也可以使用burpsuite对文件的路径(C:/windows/win.ini)进行猜解。

 

0x00 PHP伪协议
file:// — 访问本地文件系统 http:// — 访问 HTTP(s) 网址 ftp:// — 访问 FTP(s) URLs php:// — 访问各个输入/输出流(I/O streams) zlib:// — 压缩流 data:// — 数据(RFC 2397) glob:// — 查找匹配的文件路径模式 phar:// — PHP 归档 ssh2:// — Secure Shell 2 rar:// — RAR ogg:// — 音频流 expect:// — 处理交互式的流

 

 


 

0X-3  产生SSRF漏洞的代码分析

 


 

0X-4 SSRF利用方式&&漏洞挖掘

SSRF可以做什么

  • 敏感数据的读取 : 可以对外网服务器所在的内网、本地进行端口扫描,获取一些服务的banner信息  
  • 攻击运行在内网或者本地的应用程序。 
  • 对内网web应用进行指纹识别,通过访问默认文件实现 。
  • 内外网主机应用程序漏洞的利用 : 攻击内外网的web应用。sql注入、struct2、redis等。
  • 利用file协议读取本地文件等。

  【SSRF漏洞挖掘】

PHP相关函数:

    file_get_content()
    curl -> curl_exec()
    socket - fsockopen()


一、从web功能上寻找
1、分享:通过URL地址分享网页内容

技术图片

 


2、转码服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览
3、在线翻译:通过URL地址翻译对应文本的内容   提供此功能的百度、有道等。有道翻译某处SSRF可通网易内网:
4、图片加载与下载:通过URL地址加载或下载图片  
     图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家图片服务器上的图片用于展示。(此处可能会有人有疑问,为什么加载图片服务器上的图片     也会有问题,直接使用img标签不就好了,没错是这样,但是开发者为了有更好的用户体验通常对图片做些微小调整例如加水印、压缩等,就必须要把图片下载到服务器的本地,所以就可能造   成SSRF问题)。
5、图片、文章收藏功能

二、从URL关键字中寻找

share  

wap

url        

link

src       

source

target  

u

3g        

display

sourceURL  

imageURL

domain

.....          配合fofa或者sodan

 

三. 通用的SSRF实例

    Weblogic配置不当,天生ssrf漏洞
    Discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞

 

【SSRF漏洞的验证】

一、基本判断(排除法)
排除法一:
你可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞

排除法二:
使用burpsuit等抓包工具来判断是否不是SSRF,首先SSRF是由服务端发起的请求,因此在加载图片的时候,是由服务端发起的,所有,在我们本地浏览器的请求中就不应该存在图片的请求,在此例子中,如果刷新当前页面,有如下请求,则可以判断不是SSRF。(前提是burpsuit截断图片的请求,默认是放行的)
技术图片

 

 


用排除法的原因:
http://read.*******.com/image?imageUrl=http://www.baidu.com/img/bd_logo1.png
现在大多数修复SSRF的方法基本都是区分内外网来做限制(暂不考虑利用此问题来发起请求,攻击其他网站,从而隐藏攻击者IP,防止此问题就要做请求的地址的白名单了),如果我们请求
http://read.******.com/image?imageUrl=http://10.10.10.1/favicon.ico
而没有内容显示,我们是判断这个点不存在SSRF漏洞,还是http://10.10.10.1/favicon.ico这个地址被过滤了,还是http://10.10.10.1/favicon.ico这个地址的图片文件不存在,如果我们事先不知道http://10.10.10.1/favicon.ico这个地址的文件是否存在的时候是判断不出来是哪个原因的,所以我们采用排除法。

二、


三 、验证是否可以探测内网

经过简单的排除验证之后,我们就要验证看看此URL是否可以来请求对应的内网地址。在此例子中,首先我们要获取内网存在HTTP服务且存在favicon.ico文件的地址,才能验证是否是SSRF漏洞。
找存在HTTP服务的内网地址:
1、从漏洞平台中的历史漏洞寻找泄漏的存在web应用内网地址
2、通过二级域名暴力猜解工具模糊猜测内网地址

 

0X-5  SSRF漏洞练习

下载bWAPP靶场安装包下载地址:https://sourceforge.net/projects/bwapp/files/bWAPP/    直接导入到 phpstudy中访问/install目录即可安装

进入到SSRF练习模块, 这个模块是文件包含加上SSRF漏洞利用,

技术图片

 

 可以看到,当language = 百度 的时候,直接就把百度的页面给包含了进来,这个题的主要思路是让你先文件包含进而利用SSRF漏洞

详细的文件包含漏洞可以看这里    https://www.freebuf.com/column/157466.html

 

 

 

 

技术图片

 

 

以上是关于SSRF漏洞的主要内容,如果未能解决你的问题,请参考以下文章

Java代码审计之路二(SSRF漏洞审计)

SSRF漏洞

SSRF漏洞原理攻击与防御(超详细总结)

SSRF漏洞梳理

SSRF漏洞简单分析

SRC挖洞之SSRF与XXE漏洞的实战案例