CTFweb类型(二十五)ssrf介绍、相关php函数及demo演示

2020-03-02 4,419

SSRF系列问题比较有趣,很多题目其实可以千变万化,这边大致的讲一些基本原理和几个利用场景。


基本概念


图片1.png

最初普遍不认为SSRF是漏洞,后来因为利用手段多了才开始重视。

场景:一家公司存在一个模型,服务器1在内网之中,服务器2是对外的属于web服务端的,web端比较好攻击,如果想攻击1的比较困难,因为它是在一个局域网之中的,也就是所谓的内网,有防火墙,就攻击不到1。


图片2.png

或者说只分配了一个内网IP,你的电脑无法去直接拿到它的地址。但是可以通过2这台作为跳板机去攻击1。当真的去攻击了2之后,再从2去攻击1的时候,它发出的请求其实是由2这台服务器发出的,请求来源是2的地址,如果说2站点上存在一个能够对外发请求的服务,利用2发送请求的功能去对1发出请求,欺骗2向1发出请求,这种叫做服务器端请求伪造。

我们来看一个服务器端请求伪造的一个情况,比如百度翻译,输入的是文字会直接翻译,如果是翻译网址要先去获取这个网站的内容。

图片3.png

去访问网站拿到翻译需要的原文:

图片4.png

这个概念应该理解了,现在可能没有感觉到什么危害,后面我们会讲到它的一些危害和利用场景。首先一定要去理解漏洞的概念以及什么场景下会出现,刚才看了之后,应该有感觉,就是说能够对外发请求,就有可能去实现一个利用,比如说我们真的去做渗透,你其实很多时候会拿到目标的真实IP地址,很多时候你拿不到,因为它有CDN做防护的话,你真的要去拿到IP地址,思路有很多,如果说你能够发起一个SSRF请求,那么你拿到的肯定是当时那个服务器的一个真实地址,所以这是一种拿服务器真实IP地址的一个方法。

危害(利用)

 

图片5.png


接下来就讲到了它的一些危害和利用,刚才你们已经看到了,它能够对外发起一个请求,这时候你就可以理解到都要发请求。

图片6.png


比如百度去访问了3网站,3和2相当于是平行的一个站。想去攻击一个百度的内部网站,正常情况下你访问不到的,因为有网域的划分。一旦存在SSRF的时候,就有可能做一些额外的操作。就是2能够对外请求访问三次访问外网,2肯定自己存在一个对应内网的一个地址,其实是能够访问到跟2所在同一个网段的一个内网的站,不是我们从外部能够访问到的一些站。比如说内网IP 192.168.10.11 还有一个2.1 没有对外开web端口,地址是12。这个时候一旦我们拿到了,发现2有SSRF请求,不用去拿到这个站的getshell,也能通过它能够对2.1发起请求。

图片7.png

由于和2是有一个关联的,通过2去发起请求是能够访问到2.1的。所以如果是存在SSRF能够发请求,那么它就能够对应去针对这个网段去做扫描。这个时候就有可能去携带回一些结构,比如说一堆服务器的框架,一系列的服务,中间件服务器的。

所以说肯定能够扫描,还有去攻击运营在内网或本地的应用程序,指纹识别也是一样的。其实还有一种方法,如果是存在SSRF也而且无限制,很多协议也可以去配合利用起来,后面我们也会讲到。

所以这部分只是列了一些比较常见的能够理解到的一些危害,都是依赖于它能够发请求,包括5的file协议文件读取,能够发请求。


漏洞判断


图片8.png

接下来就讲一下SSRF的漏洞类型判断,如何判断SSRF的存在,我们可以先看一个简单的demo。比如说百度会做一个请求,这个请求肯定是对外发起,然后才会有数据带回来,很明显它能够对外发起请求。但是实际过程中,真的想去挖他们的洞,或者发现这种缺陷,去找这种东西的话,其实没有那么容易,很多时候我们就要去判断这个地方能否对外发起请求,发起请求的验证其实就是一个其中的一个点。验证思路也比较简单,之前讲的类似的一个思路,现在能回显它会返回百度的页面,其实很好理解了,发了一个请求把信息给带回来,这个没什么好说的。


延时


比如百度它带的回来,访问一个谷歌,非常慢,一直转等待响应,然后这里就会形成一个差异。差异的对比是非常重要的,能够去验证你的思路就是能是否成功,那么延时就是一个非常好的判断依据。

DNS请求


DNS请求也是一样的,有的时候也很难判断。很多大的厂商他们只要是返回失败的,都不会有任何的回显,显示回来延时你也可能体会不到,但是它还是有可能去发出一个真实请求的,很难去验证。比如说我这里给一个ceye.lo

图片9.png

 比如说去NC监听端口

图片10.png

只要能够去验证它能够发起请求,它就有可能说存在一个SSRF,发请求不代表它肯定存在,有可能存在,这时候你才再去做一个深挖,看有没有什么利用空间。


相关函数


接下来看一下SSRF的相关函数。SSRF相关的函数其实肯定是有共同特点,就是能够对外发请求,只要能够对外发请求,就有可能成为SSRF利用的漏洞,只不过它的危害大小有个区分度而已。


图片11.png

 

首先来看一个,第1个就是file_get_contents。这个函数应该比较好理解。就是读取文件但是我们知道读取文件,其实也是能够对外发起请求的。看一下他demo,大致的思路,这些代码其实网上都有可以去找,我这里只是为了基本演示,后面的话会讲到一些利用场景。

图片12.png

通过file_get发起请求,刚刚看到这个图片里面,我随便去选一张图片,随便去选它的一个地址,请求一下。

图片13.png

 要验证SSRF漏洞是否存在就是去验证它能否对外网发起一个请求探测。

图片14.png

如果说它换成一个内网址,这时候会发现这里存有一张图片

图片15.png

十六进制打开来试试看,这时候你会看到它其实是有东西的,这个其实就是网页的源码,它会保存下来,保存到一张图片。

图片16.png

外部能够访问到这种错误显示,下载后拿到这次请求的内容,那么它其实就是能够对内网做出一个HTTP请求,也就是说明存在SSRF的漏洞。


过程

比如说像这个场景2作为网站,首先我们给了一个内网地址,对2.1发出一个请求,2.1  response获取后没有直接echo到当即页面上来,但是把response保存到一个png文件中,可以拿到png文件,SSRF它是有回显的一个SSRF那么他就能够去类似去探测的概念在这里了。它能够去探测整个网站中存在的一个服务,web服务起码是可以探讨的,或者说任何他的HTTP,response是带那种特征的,都可以拿到,就可以去为攻击做进一步的铺垫做准备了。

图片17.png

所以这个地方就简单的可以去引申到一个利用场景。


说一个现实中的场景,你去注册用户,肯定遇到过一个情况,上传图片的场景下想要去利用,可以考虑试着突破上传限制,去上传一下webshell去找他的黑名单、白名单、过滤、条件、竞争等等这一系列手段。还有一种情况,会允许传入一张图片的网址,如果说允许你传了一张图片的网址就要去理解一下,第一种情况下,直接偷了那张图片,图片当时的链接作为显示给你看的,它的imagsrc就等于一张图片的网址,这个就比较坏了。这个的话它其实就不存在SSRF因为这个请求是没有发出去的,只是把它作为一个引用。第二种情况下,就像现在这样子,显示一张图片,这张图片其实是我请求发出去之后,把response信息保存在本地,显示给你看,说明我就有了作出请求的这一环节,那么就有可能存在SSRF 这个地方就能够做一个探测。


图片18.png

 

fsockopen


图片19.png

fsockopen觉得它比较抽象,说起来不太好理解的一种类型。它是打开一个网络连接,linux套接字连接。可以理解的就是肯定会对外发起一个请求,然后你会看到它的参数,第1个host name,肯定是一个IP或者就是主机名,port就是个端口号。


Demo


图片20.png

图片21.png

url和port加了注释,执行一下返回如下结果:

图片22.png

5.5.23,3306口是mysql的端口,正常情况下可以做远程连接,远程连接是因为开放了对外远程连接的端口。

可以看一个场景,一个服务器里面可以看到他开的端口,

图片23.png

你会发现这里开了一个3306 6379端口,这里运行了三个服务,用nmap去扫描这台机器,发现我这边探到的端口就开了一个80端口:

图片24.png


探测这台服务器中是否存在MySQL端口,web根本不知道,通过SSRF请求,让SSRF这种能够对内发请求的方式去做一个请求发出来,是能够去探测到这个端口的存在的。针对3389端口会发现请求非常慢,可能真实情况下,还不能确定这个口到底开不开放。但是换成23,会发现返回结果是:

图片25.png

它返回的信息是会不一致的,就是说你可以根据他的这种response是否有区别来作出判断。


curl_exec


图片26.png


调用curl利用会有一些不同的地方,刚才我们在这边看到通过看到支持的一些协议,它支持协议非常多,也就意味着调动时刻能够发起请求,而且能控制协议的话能做的事情将会变得非常多,将会极大的去扩展攻击面。

图片27.png

说明它其实能够能够去实现一个对他的一个访问,发现它返回。

图片28.png

对他的一些操作一样是有办法去实现的,后面我们会讲到SSRF对mysql的一些攻击,是非常普遍的场景获取信息的一个过程。还有什么利用呢?刚才提到了可以配合协议,像file协议讲php威胁的时候,讲到过,能够去实现个文件读取。像file肯定是和文件有关系,同样它也能够去实现个文件读取。SSRF配合不同协议的利用能够实现很大的攻击面扩展。

图片29.png


 phpinfo在很多利用场景下非常容易,可以帮助我们去思考一些攻击方式。



本文作者:牛油果 1472301220

本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/124139.html

Tags:
评论  (0)
快来写下你的想法吧!

牛油果 1472301220

文章数:16 积分: 151

微信同QQ 1472301220 认证相关问题随便问我都知道 我是可爱的小姐姐

安全问答社区

安全问答社区

脉搏官方公众号

脉搏公众号