服务器端请求伪造漏洞

 

服务器端请求伪造(Server-Side Request Forger ,SSRF)漏洞是近年来比较常 见的一种漏洞。SSRF漏洞本身并不危险,与SQL注入或XSS相比较危害不大,但 近年来有人通过将SSRF结合未授权访问漏洞进行渗透,危害就非常严重了。并

且,因为SSRF漏洞本身危害不大,导致甲方对于这个漏洞不重视,更容易成为渗 透中的突破口。

 

 

 

 

 

 

5.5.1    简介

 

SSRF是一种攻击者构造恶意数据包,使服务器端向另一个服务器发起请求的 安全漏洞。大多数情况下,SSRF的目标是网站内部的系统。攻击者通过构造恶意 数据包,使服务器向内部系统发送恶意构造的请求,从而达到攻击目的。

1.SSRF常见的用处

SSRF的常见用处如下:

· 向外网、服务器所在内网、本地进行端口扫描,获取服务的banner信息等。

·攻击运行在内网或本地的应用(如Struts2 、SQL 、Redis等)。

·对内网Web应用进行指纹识别,通过访问默认文件实现(如readme等文 件)。

服务器端请求伪造漏洞_第1张图片

图5-14    SSRF常见应用场景

·利用file协议读取本地文件等。

2.SSRF应用场景

分享页面。一些Web程序应用为了提供更好的用户体验,在分享的功能中通

 

 

 

 

 

常会获取目标URL网页内容中的标签文本内容。如若此功能中没有对URL地址进 行过滤及限制处理,则可能存在SSRF漏洞,如图5-14所示。

在线翻译,加载图片、文章。上传头像、加载图片等处理常常会涉及远程加 载的功能,过分信任用户输入,没有做严谨的过滤限制,这也会造成SSRF漏洞, 如图5-15所示。

服务器端请求伪造漏洞_第2张图片

图5-15    图片加载

3.SSRF的常用绕过技巧

SSRF漏洞常用的绕过技巧如下:

服务器端请求伪造漏洞_第3张图片

图5-16    短网址

·利用@符号绕过,例如[email protected]

·利用短网址绕过,如图5-16所示。

·利用xip.io 127.0.0.1.xip.io绕过,如下所示:

服务器端请求伪造漏洞_第4张图片

 

 

 

 

·利用封闭式字母数字(Enclosed alphanumeric )绕过,如下所示:

服务器端请求伪造漏洞_第5张图片

 

 

 

 

 

5.5.2    检测方法

利用SSRF进行内网探测的攻击方式常见于进行内网端口扫描,以及对Redis 服务进行攻击。这里介绍内网扫描的情况。

判断是否存在SSRF ,只需在漏洞URL处输入公网服务器的Web应用地址,然 后在公网服务器上监控访问的数据,发现有存在漏洞的IP访问,便说明存在SSRF 漏洞。

比如https://www.target.com/ueditor/getRemote.jspx?upfile=xxx.xxx.xxx ,此处的 URL参数可控并且经过验证,确实可以通过修改参数中的地址实现访问。以此为 例,编写SSRF的内网探测脚本,具体步骤如下:

1)构造portscan方法,接收两个参数,第一个参数为拼接成SSRF漏洞的地 址,第二个参数作为内网探测地址。

2)通过访问构造的URL ,根据返回值判断端口是否开放:

# -*- coding-utf-8 -*-

import requests

def portscan(url,rurl) :

# 测试端口,可以根据需求添加或更改

ports = [21,22,23,25,80,443,445,873,1080,1099,1090,1521,3306,6379,27017] for port in ports:

try:

url = url + '/ueditor/getRemoteImage .jspx?upfile= ' + rurl +

' :{port} ' .format(port=port)

response = requests .get(url, timeout=6)

except :

超过6秒就认为端口是开放的,因为如果端口不开放, 目标肯定会发一个TCP REST, 连接会立刻中断,说明漏洞存在

print( '[+]{port} is open ' .format(port=port))

if __name__ == '__main__ ' :

# portscan( 'target site ', 'hacker test site ')

portscan('Target : Expect More. Pay Less. ', '192 .168 .23 .1 ')

192.168.23.1代表需要探测的内网地址,运行效果如图5-17所示。

 

 

 

 

 

服务器端请求伪造漏洞_第6张图片

图5-17    运行效果

 

 

 

 

 

 

5.5.3    防御策略

 

对于SSRF的防御策略,可以从漏洞的成因进行分析。造成SSRF漏洞的主要 原因在于:

·传入服务器需要访问的地址或者需要访问的参数用户可控。

·对于用户传入的参数,服务器端没有做校验限制。

严格控制传入参数的内容,校验参数的合法性,便能有效地防御此漏洞。比 如一个加载远程头像的功能点,就应该限制传入的参数必须为网址,而不是IP , 并且校验网址的后缀是否为图片的地址,否则将不予访问。按照此思路,对于不 同的功能点需求限制传入参数的特定作用范围,如此便能有效地防御此漏洞。

 

 

 

 

 

 

 

 

你可能感兴趣的:(笔记)