SSRF
0x01、ssrf基础
成因
SSRF形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。
形成
首先,我们要对目标网站的架构了解,脑子了要有一个架构图。比如:A网站,是一个所有人都可以访问的外网网站,B网站是一个他们内部的OA网站,我们普通用户只可以访问a网站,不能访问b网站。但是我们可以通过a网站做中间人,访问b网站,从而达到攻击b网站需求。
正常用户访问网站的流程是:
输入A网站URL–>发送请求–>A服务器接受请求(没有过滤),并处理–>返回用户响应
【那网站有个请求是www.1234.com/xxx.php?image=URL】
那么产生SSRF漏洞的环节在哪里呢?安全的网站应接收请求后,检测请求的合法性
产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致A网站可以从其他服务器的获取数据
用途(攻击者)
- 可以对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息;
- 攻击运行在内网或本地的应用程序(比如溢出);
- 对内网web应用进行指纹识别,通过访问默认文件实现;
- 攻击内外网的web应用,主要是使用get参数就可以实现的攻击(比如struts2,sqli等);
- 利用file协议读取本地文件等。
0x02、ssrf常见位置
- 通过URL地址分享网页内容
- 转码服务
- 在线翻译
- 图片加载与下载:通过URL地址加载或下载图片
- 图片、文章收藏功能
- 未公开的api实现以及其他调用URL的功能
- 从URL关键字中寻找share、wap、url、sr……
/所有通过调取外部资源的参数都有可能存在SSRF/
0x03、ssrf绕过
利用解析URL出现的问题
在某些情况下,后端程序可能会对访问的URL进行解析,对解析出来的host地址进行过滤。这时候可能会出现对URL参数解析不当,导致可以绕过过滤。
http://123.com@192.168.0.1/
@后是访问地址,前面是用户名
0x04、SSRF原理
file_get_contents:SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的ssrf攻击可能存在任何语言编写的应用,我们通过一些php实现的代码来作为样例分析。代码的大部分来自于真实的应用源码。
<?php
if(isset($_POST['url']))
{
$content = file_get_contents($_POST['url']);
$filename = './images/'.rand().';img1.jpg';
file_put_contents($filename,$content);
echo $_PoST['url'];
$img = "<img src=\"".$filename."\"/>";
echo $img;
?>