SSRF介绍及利用


一、介绍

  定义:SSRF(Server-Side Request Forgery:服务器端请求伪造)通过篡改 HTTP 请求中的资源地址发送给服务器,服务器没有校验请求的合法性,服务器解析用户传递过来的请求,处理之后返回给用户。简单理解就是将WEB服务器作为了一个跳板(代理)去请求更深层(内网)的资源。   危害及利用: 1.外网的端口和服务扫描 2.主机本地敏感数据的读取(任意文件读取) 3.内外网主机应用程序漏洞的利用 4.内外网 Web 站点漏洞的利用   产生的原因: 1.参数用户可控 2.后端使用了一些危险函数。例如 
PHP中下面函数的使用不当会导致SSRF:
file_get_contents() 可以读取PHP文件
fsockopen()
curl_exec() 不能读取PHP文件
  一句话来说,SSRF是为了攻击我们直接打不到的地方。内网一般来说太脆弱了,通过SSRF很容易就攻破了。

二、实战(靶场为pikachu)

1.端口扫描

在靶场的SSRF内容里面

我们只要将 /pikachu/vul/ssrf/ssrf_info/info1.php 换成对应的端口号,然后进行爆破(bp或者自己写脚本),就可以了解哪些端口是开放的。

这里注意有时候http协议不好用,我们可以将http协议换成dict协议

2.SSRF任意文件读取

(1)简单基础文件

在这里我们要注意,web服务器的权限 ,读取的文件一定是web服务器权限所允许的,不然权限不够无法读取。

示例如下:

 注意我们这里利用了file协议去读取文件,读取 / 根目录下的etc下的passwd文件。

 至于SSRF能用哪些协议,每一个站点都不一样,需要自己去测试。

 补充:file协议不能读取php文件。我们要利用以下方法。

(2)PHP文件读取

用到的方法介绍

           官方回答太复杂了,简单来说就是利用 php://filter来读取一个数据流。固定写法:php://filter/read=convert.base64-encode/resource=

看如下示例:

 然后我们解码获取到的数据即可。

3.gopher协议对内网服务发送GET or POST请求 

  Gopher 在 HTTP 协议前是非常有名的信息查找系统,但是 WWW 万维网出现之后 Gopher 逐渐没落,但是在 SSRF 漏洞中 Gopher 协议让洞利用更加灵活,利用此协议可以对 ftp,memcache,mysql,telnet,redis,等服务进行攻击,可以构造发送 GET,POST 请求包。   语法格式:       gopher://:/_后面接 TCP 数据流   这里注意有一个下划线,是因为gopher协议默认吃掉第一个字符。

(1)GET请求

(2)POST请求

相关