web基础漏洞-ssrf

1、介绍

ssrf,server-server request forgery服务端对服务端的请求伪造,有时也理解为server side request forgery服务端侧的请求伪造。

指服务端借助用户请求中的参数,向服务器内部或者其他服务器发起请求,而这个过程对发起方是信任的,导致出现危害。

攻击者发送链接,由服务端去请求。这种方式常常可以用来绕过网络的限制,攻击我们无法直接访问的网络。

  • 从广义上来说,任何前端提交的数据都有可能成为ssrf的参数。但实际来说,只有当请求中存在url绝对路径时,才会考虑ssrf测试。尤其是主机名称为局域网内部地址时,进一步增加ssrf可能性
  • 除了绝对路径参数,同时存在的其它参数也可能作为ssrf参数被拼接提交。但实际来说,测试效率相当低
  • ssrf相当于增加了可渗透目标,理论上来说可以进行中间件、逻辑漏洞、sql注入等。但实际来说,主要是进行主机发现和端口开发测试

2、原理

服务端提供了从其他服务器获取数据的功能,但没有对内网目标地址做过滤和限制。

一般,服务器与内网资源通过参数进行操作,该参数可以被前端用户修改影响。

参数一般是url形式。

主要方式:

  • 对外网、服务器所在内网、本地进行端口扫描,获取Banner信息
  • 测试运行在内网或本地的应用程序
  • 利用file协议读取本地文件等

学习参考:新浪微博某处SSRF漏洞 | wooyun-2016-0214334| WooYun.org (2xss.cc)

3、场景

  • 1)分享:通过URL地址分享网页内容
  • 2)在线翻译
  • 3)图片的加载与下载:通过URL地址加载或下载图片,要注意区分是客户端发送的请求还是服务端发送的请求
  • 4)图片,文章收藏功能
  • 5)未公开的api实现以及其他调用URL的功能

4、漏洞代码分析

php可能借用curl库

ssrf读取文件

http://192.168.1.10/ssrf_test.php?url=file:///c:/widnows/win.ini

5、测试

在前端选择路径参数或者看起来是url一部分的参数,比如&=结构。然后分析其作用方向,分析影响结果。

6、防范

严格限制路径和参数范围

7、产生ssrf漏洞的php函数

很多web应用都提供了从其他的服务器上获取数据的功能。使用用户指定的url,web应用可以获取图片,下载文件,读取文件内容等。这个功能如果被恶意使用,可以利用存在缺陷的web应用作为代理攻击远程和本地的服务器。这种形式的攻击称为ssrf。

ssrf可能存在任何语言编写的应用。

  • file_get_content():从用户指定的url获取图片,然后把它用一个随机文件名保存在硬盘上,并展示给用户
  • fsockopen():该函数实现获取用户指定的url(文件或html)。该函数使用socket跟服务器建立tcp连接,传输原始数据。
  • curl_exec():用于发送请求获取数据

8、漏洞利用

SSRF利用 – 内网资源访问_哔哩哔哩_bilibili

参考ssrf代码

<?php
if(isset($_GET['url'])){
$link = $_GET['url'];
$curlobj = curl_init($link);
curl_setopt($curlobj, CURLOPT_HEADER, 0);
curl_setopt($curlobj, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curlobj);
echo $result;
curl_close($curlobj);
}
?>

一般情况下将web应用程序暴露在互联网可以通过web浏览器进行访问。但是会将内网资源封闭起来,避免与外部交互。如果存在ssrf漏洞,可以进行内网资源访问。

提交对应参数url包含ip地址:端口号 测试端口状态。

http://127.0.0.1/ssrf/ssrf.php?url=http://127.0.0.1:3306

posted @ 2023-05-29 15:33  挖洞404  阅读(15)  评论(0编辑  收藏  举报