代码审计——SSRF详解

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-可观测链路OpenTelemetry版,每月50GB免费额度
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 代码审计——SSRF详解

01 漏洞描述



服务端请求伪造攻击(SSRF)也成为跨站点端口攻击,是由于一些应用在向第三方主机请求资源时提供了URL并通过传递的URL来获取资源引起的,当这种功能没有对协议、网络可信便捷做好限制时,攻击者可利用这种缺陷来获取内网敏感数据、DOS内网服务器、读文件甚至于可获取内网服务器控制权限等。

image.png


02 审计要点



服务端请求伪造攻击(SSRF)发生的根本原因是"服务器未限制"的情况下"用户可控的"失控请求资源行为。

1、参数是否用户可控?比如用户是否可以自定义输入URL来获取资源。

2、是否限制了请求范围?对URL获取资源的链接是否有白名单限制。

3、是否限制了请求协议?仅可以发起http请求还是file:///,gopher://,ftp:// 等均可使用?

03 漏洞特征



服务器端请求伪造是由服务器端发起的资源请求,根据URL从其他服务主机获取相关资源。若发起请求的URL可由攻击者来控制,那么就会导致服务端请求伪造攻击。

Java

String url = request.getParameter("url");

PHP

如下是PHP程序中常见的一个接收客户端URL,并将服务器资源的URL资源返回到浏览器端的功能:

<?php
if (isset($_POST['url'])) 
{
    
$content = file_get_contents($_POST['url']); 
$filename ='./images/'.rand().';img1.jpg'; 
file_put_contents($filename, $content); 
echo $_POST['url']; 
$img = "<img src=\"".$filename."\"/>"; 
} 
echo $img; 
?>

这段代码使用file_get_contents函数从用户指定的url获取图片。当攻击者构造http ://www.example.com/index.php?url=http://10.10.10.10:80时,即可用来判断内网服务器10.10.10.10是否开放了80端口。

04 漏洞案例

String url = request.getParameter("url")

若存在此类代码,且服务端未限制了请求范围、请求协议,将导致SSRF漏洞。漏洞存在示例如下

image.png

image.png

除此之外,这边列举常见的一些容易出现SSRF漏洞的功能点如下:

1、 从远程服务器请求资源(upload from url 如discuz!;import & expost rss feed 如web blog;使用了xml引擎对象的地方 如wordpress xmlrpc.php)。

2、未公开的api实现以及其他扩展调用URL的功能:可以利用google语法加上这些关键字去寻找SSRF漏洞,一些的url中的关键字:share、wap、url、link、src、source、target、u、3g、display、sourceURl、imageURL、domain……

3、社交分享功能:获取超链接的标题等内容进行显示。

4、转码服务:通过url地址把原地址的网页内容调优使其适合收集屏幕浏览。

5、在线翻译:给网址翻译对应网页内容。

6、图片加载/下载:例如富文本编辑器中的点击下载图片到本地;通过url地址加载或下载图片。

7、图片/文章收藏功能:主要网站会取url地址中title以及文本的内容作为显示以求一个好的用户体验。

8、云服务商:它会远程执行一些命令来判断网络是否存活等,所以如果可以捕获相应信息,就可以进行SSRF测试。

9、网站采集,网站抓取的地方:一些网站会针对你输入的url进行一些信息采集工作。

10、数据库内置功能:数据库的比如mongodb的copyDatabase函数.

11、邮件系统:比如接收邮件服务器地址。

12、编码处理,属性信息处理,文件处理:比如ffpmg,ImageMagick,docx,pdf,xml处理器等。

代码审计时搜索“URLConnection”、“URL”等关键字,然后根据数据流的过程,逐步向上回溯,定位到用户可控参数。

05 修复方案

1、过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。

2、 统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。

3、限制请求的端口为http常用的端口,比如,80,443,8080,8090。

4、黑名单内网ip。避免应用被用来获取获取内网数据,攻击内网。

5、禁用不需要的协议。仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp:// 等引起的问题。

目录
相关文章
|
3月前
|
XML JSON 安全
Web安全-XXE漏洞
Web安全-XXE漏洞
34 1
|
3月前
|
编解码 安全 生物认证
|
7月前
|
XML 云安全 安全
了解常见的web漏洞-XXE漏洞,日常如何做好web安全
随着网络技术的不断发展,网站安全问题日益受到人们的关注。当前随着技术发展,网站存在一些常见的可能被攻击者利用的漏洞,而在众多网站安全漏洞中,XXE(XML External Entity)漏洞是一个不容忽视的问题。今天我们就来分享了解一下关于XXE漏洞的概念、原理以及日常上有哪些可以措施可以防护网站安全。
|
SQL 安全 测试技术
常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
375 0
|
XML 安全 Java
代码审计——XXE详解
代码审计——XXE详解
258 0
|
SQL 安全 Java
代码审计——SQL注入详解
代码审计——SQL注入详解
365 0
|
存储 JavaScript 安全
代码审计——XSS详解
代码审计——XSS详解
339 0
|
安全 前端开发 应用服务中间件
YzmCMS代码审计
YzmCMS代码审计
221 0