代码审计——SSRF详解

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
注册配置 MSE Nacos/ZooKeeper,118元/月
函数计算FC,每月15万CU 3个月
简介: 代码审计——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:// 等引起的问题。

目录
相关文章
|
4月前
|
XML 云安全 安全
了解常见的web漏洞-XXE漏洞,日常如何做好web安全
随着网络技术的不断发展,网站安全问题日益受到人们的关注。当前随着技术发展,网站存在一些常见的可能被攻击者利用的漏洞,而在众多网站安全漏洞中,XXE(XML External Entity)漏洞是一个不容忽视的问题。今天我们就来分享了解一下关于XXE漏洞的概念、原理以及日常上有哪些可以措施可以防护网站安全。
|
SQL 安全 测试技术
常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
常见的Web安全漏洞有哪些,Web安全漏洞常用测试方法介绍
329 0
|
XML 安全 Java
代码审计——XXE详解
代码审计——XXE详解
226 0
|
SQL 安全 Java
代码审计——SQL注入详解
代码审计——SQL注入详解
314 0
|
存储 JavaScript 安全
代码审计——XSS详解
代码审计——XSS详解
301 0
|
安全 前端开发 应用服务中间件
YzmCMS代码审计
YzmCMS代码审计
203 0
|
XML 安全 数据格式
pikachu靶场通过秘籍之XXE漏洞攻击
pikachu靶场通过秘籍之XXE漏洞攻击
161 0