ssrf

Posted wd404

tags:

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

1、定义

ssrf,server-server request forgery服务对服务的请求伪造,用户发送请求携带到服务端,服务端A未经过充分检测,将数据拼接到新的请求中发送给另一个服务端B,从而造成危害。

一般,用户是无法直接访问服务端B,而基于这种方式,相当于用户可以直接访问。

  • 可以进行内网渗透
  • 可以进行内网的ip和端口扫描

2、利用过程

一般是直接在前端构造参数测试,观察响应

3、测试步骤

一般是发现请求中存在url参数,其未参与到已知的业务中,推测是ssrf服务。

篡改该url中的ip和端口及其他新,观察响应输出

4、防护

对需要ssrf服务的参数,进行严格检查,比如进行敏感字符过滤、长度限制,白名单限制

SSRF漏洞简单分析

什么是SSRF漏洞

SSRF(服务器端请求伪造)是一种由攻击者构造请求,服务器端发起请求的安全漏洞,所以,一般情况下,SSRF攻击的目标是外网无法访问的内部系统。

SSRF漏洞形成原理。

SSRF的形成大多数是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤和限制,比如操作服务端从指定URL获取网页文本,加载指定地址的图片,利用的是服务端的请求伪造。所以,SSRF是利用存在缺陷的Web应用作为代理,攻击远程和本地的服务器。
主要的攻击方式:

  • 对外网所在内网、本地进行端口扫描,获取一些服务的banner信息。
  • 攻击运行在内网或本地的应用程序。
  • 对内网Web应用进行指纹识别,识别企业内部的资产信息。
  • 利用file协议读取本地文件等等
    参考文献:《Web安全攻防》

SSRF漏洞代码分析

<?php
function curl($url){
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_HEADER,0);
    curl_exec($ch);
    curl_close($ch);
}
$url = $_GET[‘url‘];
curl($url);
?>

在ssrf页面中,程序获取GET请求url,通过curl_init()初始化curl组件后,将参数带入curl_setopt($ch,CURLOPT_URL,$url),然后调用curl_exec请求该url,服务会将banner信息返回客户端。功能是获取url的内容并返回页面上。例如,请求百度。
技术图片

简单利用

如果我们将url改为本地文件路径,我们可以通过file协议读取本地文件。例如我们在参数url后面接file:///c:/windows/win.ini
技术图片

SSRF修复建议

  1. 限制请求的端口只能为Web端口,只允许访问HTTP/HTTPS的请求
  2. 限制不能访问内网IP
  3. 屏蔽返回的详细信息




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

SSRF漏洞简单分析

Blind SSRF vulnerabilities:盲SSRF漏洞实例

-SSRF服务端请求伪造

-SSRF服务端请求伪造

SSRF漏洞理解进阶&SSRF+gopher打内网(redismysqlfastcgi)& SSRF相关基础概念

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