0x00 思考

1、什么是SSRF漏洞?
2、SSRF漏洞的利用方式
3、SSRF漏洞绕过
4、SSRF漏洞加固

0x01 什么是SSRF漏洞

定义:
SSRF漏洞,中文全称为服务端请求伪造漏洞,是一种由攻击者构造一定的利用代码导致服务端发起漏洞利用请求的安全漏洞。一般情况下,SSRF攻击的应用是无法通过外网访问的,所以需要借助目标服务端进行发起,目标服务器可以链接内网和外网,攻击者便可以通过目标主机攻击内网应用。

漏洞成因:
由于业务需要,服务端程序需要从其他服务器应用中获取数据,例如获取图片、数据等,但是由于服务器没有对其请求的目标地址做过滤和限制,导致黑客可以利用此缺陷请求任意服务器资源,其中就包含隐匿在内网的应用。很多企业认为服务器在内网不会受到黑客攻击,便放任漏洞不管,不做补丁修复和版本升级,弱口令遍布内网。但是在SSRF漏洞面前这些漏洞都会成为黑客的“盘中餐”。
SSRF漏洞一般为HTTP/HTTPS方式出现,但类似TCP Connect方式也可以探测内网的IP活跃状态和端口的开放情况,但此类危害较小。

SSRF漏洞出现的位置:
服务器主动发起网络请求,例如HTTP/HTTPS/Socket
分享功能,通过URL分享网页内容,微博SSRF
图片加载、下载功能
邮件系统
api远程调用
只要是服务器可以主动发起网络请求便可能出现

SSRF漏洞的危害:
1. 对目标服务器所在的内网进行IP存活性扫描和端口扫描
2. 利用扫描的指纹信息判断开放的服务,从而对内网的主机进行攻击
3. 识别内网WEB应用指纹,判断应用类型进行攻击
4. 使用特定协议攻击应用(gopher、dict、file、FTP/SFTP等)

0x02 SSRF漏洞的利用方式

产生漏洞的函数
(1)file_get_contents()
(2)fsockopen()
(3)curl_exec()

file_get_contents函数:

 1 <?php
2 if(isset($_POST['url']))
3 {
4 $content=file_get_contents($_POST['url']);
5 $filename='./images/'.rand().'.img';\
6 file_put_contents($filename,$content);
7 echo $_POST['url'];
8 $img="<img src=\"".$filename."\"/>";
9 }
10 echo $img;
11 ?>

以上代码是获取post参数url中的值地址,通过file_get_contents获取url中的图片内容,保存到image目录下,然后显示。
file_get_contents函数使用前需要将php.ini的allow_url_fopen设置为ON。
以上的漏洞代码是存在SSRF漏洞的,可以控制url参数,自定义任意的URL,包括内网的URL,例如现在验证内网192.168.0.118是否开启了6379端口,可以做以下访问

根据上图的报错信息可以看出开启了6379,接下来测试是否开启了8888端口

测试8888端口时,根据上图提示,显示错误信息,说明端口未开放。接下来测试80端口,看显示结果(因为109的80端口是开放的,所以测试下,看回显内容)

访问109的80端口并未报错,此时,查看图片内容(选中图片,点复制链接),如下图:

发现请求的80端口的数据被写入到了图片问题中,符合代码预期。除了可以探测端口,也可以做文件包含漏洞的利用,这里不再细说文件包含的知识。

fsockopen函数:

<?php
$host=$_GET['url'];
$port=$_GET['port'];
# fsockopen(主机名称,端口号码,错误号的接受变量,错误提示的接受变量,超时时间)
$fp = fsockopen($host, intval($port), $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Connection: Close\r\n\r\n";
# fwrite() 函数将内容写入一个打开的文件中。
fwrite($fp, $out);
# 函数检测是否已到达文件末尾 ,文件末尾(EOF)
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?>

以上函数是接受url和port来制定socket访问的地址和端口,由于地址和端口用户可控,所以可以用来SSRF漏洞的利用。
例如可以做以下访问可以探测104的3306端口是否开放:

curl_exec函数

1 <?php
2 $url = $_GET['url'];
3 $curlobj = curl_init($url);
4 echo curl_exec($curlobj);
5 ?>

curl_exec函数是危害最大的函数,也是需要重点讲的函数。以上代码是获取参数url的值,使用curl进行访问。
curl_exec的使用需要3个条件:
1、PHP版本>=5.3
2、开启extension=php_curl.dll
3、--wite-curlwrappers(编译PHP时用,此时不需要,可忽略)
使用dict协议探测22端口(后面会讲dict协议)

0x03 SSRF绕过方式

在SSRF漏洞利用时,经常被pass,接下来讲一下常规的绕过方法。
(1)攻击本机
  http://127.0.0.1:80
  http://localhost:22
(2)利用@绕过
  http://example.com@127.0.0.1
  # 这里的example.com可以任意替换,
(3)利用短地址绕过
  http://127.0.0.1可以变为http://suo.im/5UHEvD
  # 转换地址you很多,可以采用http://tool.chinaz.com/tools/dwz.aspx
(4)特殊域名绕过
  http://127.0.0.1.xip.io/
  http://www.margin.com.127.0.0.1.xip.io/
(5)利用Enclosed alphanumerics
  利用Enclosed alphanumerics
  ⓔⓧⓐⓜⓟⓛⓔ.ⓒⓞⓜ  >>>  example.com
  List:
  ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ⑩ ⑪ ⑫ ⑬ ⑭ ⑮ ⑯ ⑰ ⑱ ⑲ ⑳
  ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽ ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇
  ⒈ ⒉ ⒊ ⒋ ⒌ ⒍ ⒎ ⒏ ⒐ ⒑ ⒒ ⒓ ⒔ ⒕ ⒖ ⒗ ⒘ ⒙ ⒚ ⒛
  ⒜ ⒝ ⒞ ⒟ ⒠ ⒡ ⒢ ⒣ ⒤ ⒥ ⒦ ⒧ ⒨ ⒩ ⒪ ⒫ ⒬ ⒭ ⒮ ⒯ ⒰ ⒱ ⒲ ⒳ ⒴ ⒵
  Ⓐ Ⓑ Ⓒ Ⓓ Ⓔ Ⓕ Ⓖ Ⓗ Ⓘ Ⓙ Ⓚ Ⓛ Ⓝ Ⓞ Ⓟ Ⓠ Ⓡ Ⓢ Ⓣ Ⓤ Ⓥ Ⓦ Ⓧ Ⓨ Ⓩ
  ⓐ ⓑ ⓒ ⓓ ⓔ ⓕ ⓖ ⓗ ⓘ ⓙ ⓚ ⓛ ⓜ ⓝ ⓞ ⓟ ⓠ ⓡ ⓢ ⓣ ⓤ ⓥ ⓦ ⓧ ⓨ ⓩ
  ⓪ ⓫ ⓬ ⓭ ⓮ ⓯ ⓰ ⓱ ⓲ ⓳ ⓴
  ⓵ ⓶ ⓷ ⓸ ⓹ ⓺ ⓻ ⓼ ⓽ ⓾ ⓿
(6)利用句号代替点绕过
  127.0.0.1 变为127。0。0。1
(7)使用其他进制绕过,例如127.0.0.1
  1、8进制格式:0177.0.0.1
  2、16进制格式:0x7F.0.0.1
  3、10进制整数格式:2130706433(转16进制,在转10进制)
  4、16进制整数格式:0x7F000001
  5、还有一种特殊的省略模式,例如127.0.0.1这个IP可以写成127.1
(8)特殊域名绕过(DNS解析)
  http://127.0.0.1.xip.io/
  # 会解析道本地的127.0.0.1

0x04 SSRF漏洞加固

1. 禁止302跳转,或者没跳转一次都进行校验目的地址是否为内网地址或合法地址。
2. 过滤返回信息,验证远程服务器对请求的返回结果,是否合法。
3. 禁用高危协议,例如:gopher、dict、ftp、file等,只允许http/https
4. 设置URL白名单或者限制内网IP
5. 限制请求的端口为http的常用端口,或者根据业务需要治开放远程调用服务的端口
6. catch错误信息,做统一错误信息,避免黑客通过错误信息判断端口对应的服务

SSRF服务器端请求伪造漏洞基础的更多相关文章

  1. SSRF服务器端请求伪造

    SSRF漏洞原理 SSRF(Server-Side Request Forgery:服务器端请求伪造)是一种由恶意访问者构造形成由服务端发起请求的一个安全漏洞一般情况下,SSRF访问的目标是从外网无法 ...

  2. 5.SSRF服务器端请求伪造

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

  3. SSRF(服务端请求伪造)漏洞

    目录 SSRF SSRF漏洞的挖掘 SSRF漏洞利用 SSRF漏洞防御 SSRF SSRF(Server-Side Request Forgery,服务器端请求伪造)漏洞,是一种由攻击者构造请求,由服 ...

  4. Weblogic服务端请求伪造漏洞(SSRF)和反射型跨站请求伪造漏洞(CSS)修复教程

    一.服务端请求伪造漏洞 服务端请求伪造(Server-Side Request Forgery),是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助 ...

  5. Pikachu-SSRF(服务器端请求伪造)

    SSRF(Server-Side Request Forgery:服务器端请求伪造) 其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制 导致攻击者可 ...

  6. WordPress Cart66 Lite插件跨站请求伪造漏洞

    漏洞名称: WordPress Cart66 Lite插件跨站请求伪造漏洞 CNNVD编号: CNNVD-201310-524 发布时间: 2013-10-23 更新时间: 2013-10-23 危害 ...

  7. WordPress Ultimate Auction插件跨站请求伪造漏洞

    漏洞名称: WordPress Ultimate Auction插件跨站请求伪造漏洞 CNNVD编号: CNNVD-201306-396 发布时间: 2013-09-11 更新时间: 2013-09- ...

  8. WordPress Event Easy Calendar插件多个跨站请求伪造漏洞

    漏洞名称: WordPress Event Easy Calendar插件多个跨站请求伪造漏洞 CNNVD编号: CNNVD-201309-083 发布时间: 2013-09-11 更新时间: 201 ...

  9. WordPress HMS Testimonials 多个跨站脚本漏洞和跨站请求伪造漏洞

    漏洞名称: WordPress HMS Testimonials 多个跨站脚本漏洞和跨站请求伪造漏洞 CNNVD编号: CNNVD-201308-199 发布时间: 2013-08-22 更新时间: ...

随机推荐

  1. Tableau如何绘制双柱折线组合图2

    一.数据源准备 二.创建计算字段月度-拖拽至列-右键-精确日期 CASE[指标] WHEN "同期"then DATETRUNC('day',[日期])-5 WHEN " ...

  2. Python解释器下载安装

    一.简介 吉多·范罗苏姆(Guido van Rossum)在1989年的圣诞节期间,编写能够解释Python语言语法的解释器. 解释器版本 第一个数字是大版本号 数字不同功能上可能会有很大差异 py ...

  3. [BUUCTF]PWN——[V&N2020 公开赛]warmup

    [V&N2020 公开赛]warmup 附件 步骤: 例行检查,64位程序,除了canary,其他保护都开 本地运行一下,看看大概的情况 64位ida载入,从main函数开始看程序 看到程序将 ...

  4. CF1104A Splitting into digits 题解

    Content 给定一个数字 \(n\),试将这个数分成若干个数,使得这些数都相等,输出任意一个方案均可. 数据范围:\(1\leqslant n\leqslant 1000\). Solution ...

  5. CF433B Kuriyama Mirai's Stones 题解

    Content 有一个长度为 \(n\) 的数组 \(a_1,a_2,a_3,...,a_n\).有 \(m\) 次询问,询问有以下两种: \(1~l~r\),求 \(\sum\limits_{i=l ...

  6. mysql联合查询更新数据库例子

    mysql联合查询更新数据库例子,用户表,部门表,把用户表中的部门属性更新为部门表的主键UPDATE user_table AS utINNER JOIN belongdept AS bd ON bd ...

  7. Linux(centos) 设置MySQL数据库不区分大小写

    1.修改配置文件 vim /etc/my.cnf 在[mysqld]节点下,加入一行: lower_case_table_names=1 2.重启数据库服务 service mysqld restar ...

  8. Tomcat高级特性及性能调优

    Tomcat对Https的支持 HTTPS简介 Https,是以安全为目标的Http通道,在Http的基础上通过传输加密和身份认证保证了传输的安全性.HTTPS在HTTP的基础上加入SSL层,HTTP ...

  9. 【剑指Offer】数值的整数次方 解题报告(Python)

    [剑指Offer]数值的整数次方 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews ...

  10. 涛思数据 TDengine集群搭建

    一.准备 1.设置主机名 hostnamectl set-hostname a.com hostnamectl set-hostname b.com hostnamectl set-hostname ...