web基础漏洞-ssrf

发布时间 2023-05-29 15:38:59作者: 挖洞404

1、介绍

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

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

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

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