SSRF(Server-Side Request Forgery,服务端请求伪造)是指攻击者向服务端发送包含恶意 URL 链接的请求,借由服务端去访问此 URL ,以获取受保护网络内的资源的一种安全漏洞。SSRF 常被用于探测攻击者无法访问到的网络区域,比如服务器所在的内网,或是受防火墙访问限制的主机。
SSRF 漏洞的产生,主要是因为在服务端的 Web 应用,需要从其他服务器拉取数据资源,比如图片、视频、文件的上传/下载、业务数据处理结果,但其请求地址可被外部用户控制。
请求地址被恶意利用的话,如下图所示,就能够以服务端的身份向任意地址发起请求,如果是一台存在远程代码执行漏洞的内网机器,借助 SSRF 漏洞就可以获取该内网机器的控制权。
危害
主机信息收集,内网WEB应用指纹识别 获取服务banner信息。
攻击内网和本地的应用程序。
根据识别出的应用针对性发送payload攻击。
读取本地文件。
内网,本地端口扫描 获取开放端口信息。
穿防火墙。
SSRF 常见漏洞代码 将代码黏贴至php文件中
如图
运行代码并添加常见常见的?url=http://www.baidu.com 页面就会跳转到baidu的搜索页
同时获取的资源文件会保存在./Windows中 并以时间戳命名
下面利用pikachu 实现漏洞运用 通过curl 传输
Curl介绍:
1.cURL是一个利用URL语法在命令行下工作的文件传输工具,1997年首次发行。它支持文件上传和下载,所以是综合传输工具,但按传统,习惯称cURL为下载工具。cURL还包含了用于程序开发的libcurl。
2.打开pikachu后端源文件代码
3.可以看到它是用get获取了前端的url请求,curl_init函数会对它进行初始化,然后curl_exec函数会去执行请求,最终又将请求结果返回到前端。
4.后端源文件在pika/vul/ssrf下
5.运行pikachu 发现url传递
了?url=http://127.0.0.1/pikachu/vul/ssrf/ssrf_info/info1.php
6.修改url后面的信息获取本地hosts 前端传递参数,后端通过curl_exec去请求,最后把请求结果返回到前端
?url=file://c:\windows\system32\drivers\etc\hosts
7.可以看到成功获取了本地的hosts信息 并返回到了前端页面
SSRF(file_get_content函数)
1.利用file_get_content函数对本地系统任意文件读取。
和上面一样打开pikachu 点击SSRF file_get_content
2.查看后端代码 跟刚刚一样
3.查看代码发现使用的是file_get_contents,而file_get_contents函数不但可以对本地文件进行读取,还可以对远程文件进行读取。
查看发现是通过get获取了前端的file请求,file函数会对它进行初始化,然后file_get_contents函数会去执行请求,最终又将请求结果返回到前端。
4.试试利用file_get_contents 函数进行传输 将url后面参数修改为baidu.com
5.可以看到页面跳转到了baidu的搜索框
6.file_get_contents漏洞可以读取本地或者读取远程文件信息 (读取远程修改一下ip即可)
7. 制造恶意的payload去获取后台的PHP源码并将结果转换为base64:
file=php://filter/read=convert.base64-encode/resource=ssrf.php
8.将base64进行转换源码就出来了
Curl和file_get_contentslo区别
Curl支持:http\https\ftp\gopher\dict\file\ldap\get\模拟cookie登录,爬取网页、FTP上传下载\fopen
file_get_contentslo 只支持get方式传输
防范
禁⽌服务端跳转,防⽌以跳转⽅式绕过HTTP协议限制
对于SSRF,回显是能够成功利⽤的重要条件,所以过滤返回信息,验证远程服务器对请求的响应是⽐较容易的⽅法。如果WEB应⽤
是去获取某⼀种类型的⽂件,那么在把返回结果展⽰给⽤户之前先验证返回的信息是否符合标准。
禁⽤不需要的协议,仅仅允许HTTP和HTTPS请求。可以防⽌类似于file://、gopher://、ftp://等引起的问题
设置URL⽩名单或者限制内⽹IP,避免应⽤被⽤来获取内⽹数据,攻击内⽹
限制请求的端⼝为HTTP常⽤的端⼝,例如80、443、8080、8090
最后就好了,微信关注 “天银安全 ”回复XSS获取视频课程,或者私聊
今天真是美好的一天,而我却收不到关注