SSRF漏洞
概述
SSRF(Server-Side Request Forgery:服务器端请求伪造)
其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制
导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据
数据流:攻击者----->服务器---->目标地址
根据后台使用的函数的不同,对应的影响和利用方法又有不一样
PHP中下面函数的使用不当会导致SSRF:
file_get_contents()
fsockopen()
curl_exec()
如果一定要通过后台服务器远程去对用户指定(“或者预埋在前端的请求”)的地址进行资源请求,则请做好目标地址的过滤。
靶场
SSRF(curl)
这里有一个a标签,我们点击一下看看
我们可以看到它传了一个URL到后台,我们可以先直接看一下源码
我们可以看到,它这边会直接获取前端传进来的URL,然后就直接通过curl_init做了一个初始化,然后最终通过curl_exec对他进行了一个请求,然后把请求返回来的数据返回到了前端。如果这个时候我们传进来一个其他的地址会产生什么样的后果呢?我们试一下
我们在这里可以试着传一个百度
它就直接把百度的数据给我们显示出来了,这里并不是我们的浏览器直接去请求的百度,而是我们的浏览器把这个参数传到了后端,后端的服务器通过curl_exec这个方法去请求的百度,又把百度返回的数据返回到我们前端。
那就意味着我们可以通过SSRF这个漏洞去对后端服务器同一个网络里面的其他服务器去进行一个探测。比如我们可以通过http://127.0.0.15:22去看一下这个服务器的22号端口开着没有。这就是我们常说的SSRF可以用来打内网的原因。
curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP
SSRF(file_get_content)
这里和上一个看着差不多,也是一个a标签
也是传了一个对应的地址,我们看一下源码
其实和刚才差不多,但是这里使用的是file_get_contents这么一个函数,这个函数可以对本地的文件进行读取,也可以对远程的文件进行一个读取,他也支持很多协议,比如http,我们还是拿百度来试一下
同样的它也能通过http把百度的资源通过后端服务器返回到前端。
读取PHP文件的源码:php://filter/read=convert.base64-encode/resource=ssrf.php
我们可以通过这个内置的php方法去读取相关的源码
进入这个页面往下滑到最下面,我们就可以看到它就直接把我们这个文件的base64的编码返回到了前端,我们直接把这段编码去用base64解码,就能知道这个php文件对应的源码是什么了
SSRF这个漏洞利用的途径和方法还是很多的,主要是取决于后台用了哪一个对应的函数,我们要去研究这个对应的函数支持哪些网络协议,我们通过这些网络协议去构造相关的利用方法
SSRF这个漏洞利用的途径和方法还是很多的,主要是取决于后台用了哪一个对应的函数,我们要去研究这个对应的函数支持哪些网络协议,我们通过这些网络协议去构造相关的利用方法