专栏首页Gcow安全团队SSRF原理实战及修复方式

SSRF原理实战及修复方式

注:本文仅提供参考学习

SSRF定义 SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)

个人理解:就是接受了客户端输入的URL,然后服务器端拿你的URL去请求并返回给你。

SSRF原理 大都是因为服务端提供了从其他服务器获取数据功能并且没有对目标地址做过滤和限制才造成的。比如从指定URL获取网页加载图片下载等等等等。

php下面函数的使用不当可能会导致SSRF

curl()
file_get_contents()
fsockopen()

实战 观察URL,发现服务端提供了URL查询

尝试访问百度及本机3306端口

访问成功获取信息,确定存在ssrf漏洞 下面我们来查看一下源码到底为什么会导致这个漏洞

<?php
if (isset($_GET["url"])) {
if (!empty($_GET["url"])) {
    $url = $_GET['url'];
}
$ch = curl_init();//初始化curl会话
curl_setopt($ch, CURLOPT_URL, $url);//指定请求的url
curl_setopt($ch, CURLOPT_HEADER, 0);// 启用时会将头文件的信息作为数据流输出。参数为1表示输出信息头,为0表示不输出
curl_exec($ch);
curl_close($ch);
}

可以看到采用了curl函数请求URL资源回显在前端,并且没做任何过滤或限制。从而导致了用户可能可以通过这个漏洞进行一些内网服务探测等等。非常危险!

file_get_contents造成的SSRF
$url = $_GET['url'];
echo file_get_contents($url);
利用php://input伪协议
file_get_content如果访问一个不存在的地址,会爆出绝对路径

ssrf危害

1.  扫内网
2.  向内部任意主机的任意端口发送精心构造的Payload
3.  DOS攻击(请求大文件,始终保持连接Keep-Alive Always)
4.  攻击内网的web应用,主要是使用GET参数就可以实现的攻击(比如struts2,sqli等)
5.  利用file协议读取本地文件等(file_get_content函数,利用伪协议读取)

ssrf验证方式和常见的地方 1.因为SSRF漏洞是构造服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的来判断是否存在SSRF漏洞 2.在页面源码中查找访问的资源地址 ,如果该资源地址类型为 http://www.xxx.com/a.php?image=(地址)的就可能存在SSRF漏洞 排除法一:

你可以直接右键图片,在新窗口打开图片,如果是浏览器上URL地址栏是http://www.baidu.com/img/bd_logo1.png,说明不存在SSRF漏洞。

排除法二:

你可以使用burpsuite等抓包工具来判断是否不是SSRF,首先SSRF是由服务端发起的请求,因此在加载图片的时候,是由服务端发起的,所以在我们本地浏览器的请求中就不应该存在图片的请求.(host www.baidu.com就不是)

1分享:通过URL地址分享网页内容
2转码服务
3在线翻译(通过URL地址翻译对应文本的内容。提供此功能的国内公司有百度、有道等)
4图片加载与下载:通过URL地址加载或下载图片
图片加载远程图片地址此功能用到的地方很多,但大多都是比较隐秘,比如在有些公司中的加载自家图片服务器上的图片用于展示。(此处可能会有人有疑问,为什么加载图片服务器上的图片也会有问题,直接使用img标签不就好了?,没错是这样,但是开发者为了有更好的用户体验通常对图片做些微小调整例如加水印、压缩等,所以就可能造成SSRF问题)
5图片、文章收藏功能
此处的图片、文章收藏中的文章收藏就类似于功能一、分享功能中获取URL地址中title以及文本的内容作为显示,目的还是为了更好的用户体验,而图片收藏就类似于功能四、图片加载。
6未公开的api实现以及其他调用URL的功能
7从URL关键字中寻找

ssrf修复方式

可以采取白名单,限制内网Ip。
对返回内容进行识别
禁用一些不必要的协议
统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态

SSRF暂时总结到这里,继续加油!

本文分享自微信公众号 - Gcow安全团队(Gcow666)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-03-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • CVE-2020-0688-微软Exchange服务器静态密钥缺陷导致远程代码EXP

    在2020年2月发布的最新微软月度补丁程序中,Microsoft发布了一个重要的补丁程序,以修复Microsoft Exchange服务器中的远程代码执行漏洞。...

    Gcow安全团队
  • CVE-2017-11882及利用样本分析

    1.本文由复眼小组ERFZE师傅原创 2.本文略微偏向基础,首先介绍了该漏洞的成因,并且分析了该漏洞在蔓灵花,摩诃草,响尾蛇APT组织用于实际攻击活动中的详细调...

    Gcow安全团队
  • url跳转漏洞原理及绕过方式

    0x01 url跳转原理及利用 0x02 url跳转bypass 0x03 url跳转修复

    Gcow安全团队
  • SSRF原理实战及修复方式

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF...

    cn0sec
  • PowerBI 致敬 Tableau 10大表计算

    有伙伴说一段时间没有更新文章,这一次顶十次。明明能拆成十期的文章,非要一次写完,没办法,厚道。

    BI佐罗
  • 【NDN实验】ndnSIM: NDN simulator for NS-3 全文翻译

    Alexander Afanasyev, Ilya Moiseenko, and Lixia Zhang

    魏晓蕾
  • 干货 | C语言实现一款猜数字游戏【附源码】

    本文主要向大家介绍了C/C++知识点之用C语言实现一款猜数字游戏,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

    闫小林
  • 漫话:为什么计算机起始时间是1970年1月1日?

    1970-01-01对于开发者来说都是不陌生的,有些系统对于时间的处理如果不够好的话,就可能把时间显示成1970-01-01,所以经常有用户看到1970-01-...

    帅地
  • CTF---Web入门第十一题 PHP大法

    PHP大法分值:20 来源: DUTCTF 难度:中 参与人数:8205人 Get Flag:2923人 答题人数:3042人 解题通过率:96% 注意备份文件...

    Angel_Kitty
  • 让你的代码更加优雅的编程技巧-跳转表

    让我们实现一个简易计算器,我们首先能想到的方式是什么?switch语句或者if else语句。没错,初学就会想到的两种方式,我们来看看这种方式如何实现。这里我们...

    编程珠玑

扫码关注云+社区

领取腾讯云代金券