web安全第九天:服务器端请求伪造漏洞SSRF

1.1服务器端请求

是从客户端发起一个请求到服务端,服务端再向另外的服务端发起请求的过程称之为服务器端请求。
以寄快递为例子︰我们自己(客户端)首先需要把物品交给快递员(服务端),快递员再把这个物品交到对方手里(服务器)。

1.2服务器请求伪造

SSRF (server-side request forgery,服务端请求伪造)
是一种由攻击者构造形成由服务器端发起请求的
一个漏洞。让服务器去请求你通常请求不到的东西。一般用来
在外网探测或攻击内网服务。

1.3形成原因

一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。漏洞形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发送请求,并返回对该目标地址请求的数据。
最常见的例子:攻击者传入一个未经验证的URL,后端代码直接请求这个URL,就会造成SSRF 漏洞。

1.4形成的危害

获取 web应用可达服务器服务的banner信息,以及收集内网web应用的指纹识别,根据这些信息进行下一步的渗透
攻击运行在内网的系统或应用程序,获取内网系统弱口令进行内网漫游,对有漏洞的内网web应用实施攻击

2.1 WEB功能

通过URL地址分享网页内容:获取超链接的标题进行显示
文件处理、编码处理、转码等服务:通过URL地址把原地址的网页内容调优使其适合手机屏幕浏览在线翻译:给网址翻译对应网页的内容
通过URL地址加载与下载图片:例如富文本编辑器中的点击下载图片到本地;通过URL地址加载或下载图片
图片、文章收藏功能:主要网站会取URL地址中 title以及文本的内容作为显示以求好的用户体验未公开的api 实现及其他调用URL的功能

2.2 url关键字寻找

share、wap、url、link、src、source、target、u、3g、display、sourceURI、imageURL、domain …如果利用google语法(inugl:url=)加上这些关键字去寻找SSRF 漏洞,耐心的验证,现在还是可以找到存在的SSRF漏洞。

3.1相关函数

PHP中的函数:
curl_exec()、 file_get_contents()、fsockopen()
Java中相关类:
仅支持 HTTPHTTPS协议的类: HttpClient类、HttpURLConnection类、 OkHttp类、 Request类支持sun.net.www.protocol所有协议的类:URLConnection类、URL类、 lmagelO

3.1.1curl_exec()

前端传进来的url被后台使用curl_exec()进行了请求,然后将请求的结果又返回给了前端。
web安全第九天:服务器端请求伪造漏洞SSRF_第1张图片

3.1.2 file_get_contents()

这段代码使用file_get_contents函数从用户指定的url获取图片。然后把它用一个随即文件名保存在硬盘上,并展示给用户。
web安全第九天:服务器端请求伪造漏洞SSRF_第2张图片

3.1.3 fsockopen()

fsockopen函数实现获取用户制定url的数据(文件或者html )。这个函数会使用socket跟服务器建立tcp连接,传输原始数据
web安全第九天:服务器端请求伪造漏洞SSRF_第3张图片
服务端请求伪造漏洞

4.1分类

有回显:从页面中可以看到返回内容。无回显:无法从页面中看到返回内容。

4.2有回显判断存在

通过目标服务器去请求url,如果返回了该网站的信息,则说明存在服务端请求伪造。

4.3 无回显判断存在

dnslog
web安全第九天:服务器端请求伪造漏洞SSRF_第4张图片

读取敏感文件

1.1 file协议

本地文件传输协议,用于访问本地计算机中的文件。好比通过Windows的资源管理器中打开文件或者通过右键单击‘打开’一样。
格式: file://filepath

1.1.1读取/etc/passwd

在Linux中 letc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。
web安全第九天:服务器端请求伪造漏洞SSRF_第5张图片

1.1.2读取/etc/hosts

hosts文件主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定。可以用文本文件打开!当用户在浏览器中输入一个网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,浏览器会立即打开对应网页,如果没有找到,则浏览器会将网址提交DNS服务器进行IP地址解析。
web安全第九天:服务器端请求伪造漏洞SSRF_第6张图片

1.2 file协议与http协议的区别

file协议主要用于读取服务器本地文件,访问的是本地的静态资源
http是访问本地的html文件,相当于把本机当作http服务器,通过http访问服务器,服务器再去访问本地资源。简单来说file只能静态读取,http可以动态解析
http服务器可以开放端口,让他人通过http访问服务器资源
但file不可以

2.1 dict协议

属于字典服务器,在ssrf中常用于探测目标服务器端口上运行的服务版本信息.
格式: dict://ip:port

2.1.2探测内网redis

REmote Dlctionary Server(Redis)是一个由Salvatore Sanfilippo写的 key-value存储系统,是跨平台的非关系型数据库。
Redis一般绑定在本地的6379端口上,如果在没有开启认证的情况下,可以导致仕意用尸利用SST洞河以击内网中的未授权Redis以及读取Redis的数据。
web安全第九天:服务器端请求伪造漏洞SSRF_第7张图片

3.1 dict协议攻击redis

攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行redis的用户是root用户,攻击者可以通过写定时任务的方式进行反弹shell。

3.1.1写定时任务

centos,在/varlspool/cron/目录下
ubuntu的定时任务在/var/spool/cron/crontabs/目录下
web安全第九天:服务器端请求伪造漏洞SSRF_第8张图片
web安全第九天:服务器端请求伪造漏洞SSRF_第9张图片

3.2 gopher办议攻击redis

gopher协议是比 http 协议更早出现的协议,现在已经不常用了,但是在SSRF 漏洞利用中 gopher可以说是万金油,因为可以使用gopher发送各种格式的请求包,可以攻击内网的FTP、Telnet、Redis、Memcache,也可以进行GET、POST请求,还可以攻击内网未授权MySQL
gopher协议默认端口70,所以需要指定web端口,而且需要指定方法。数据部分需要进行url编码。回车换行使用%0d%0a
后接TCP数据流
基本协议格式:URL:gopher://:/

3.2.1Gopherus的运用

在SSRF易受攻击的站点上生成 Gopher负载以利用Ss
RF并获得RCE。
可以攻击的应用: MySQL、FastCGl、Memcached、Redis、Zabbix、SMTP
2736892
项目地址: https:7/github.com/tarunkant/Gopherus

你可能感兴趣的:(web安全,网络,服务器)