## 1. 描述
本文章将概述一些经典的SSRF漏洞利用原理,从Fuzz扫描开放的服务到漏洞的自动化利用,刚好腾讯的这个漏洞点,非常适合做为案例来演示。
### 1.1 漏洞信息
> 腾讯微博应用
> http://share.v.t.qq.com
> SSRF利用点,参数: url
> http://share.v.t.qq.com/index.php?c=share&a=pageinfo&url=http://wuyun.org
### 1.2 服务端回显
当从ssrf利用点发起一个远程请求,如果url资源存在,且MIME类型为HTML,服务端的脚本会分析出HTML页面内的title、img 等等资源,返回给客户端。如果MIME是其它类型,将直接返回原文。
#### 例1 请求远程服务器的22端口,直接回显OpenSSH的banner信息
#### 例2 请求远程服务器的80端口,回显HEAD和图片资源
#### 例3 请求不存在的服务器或未开放的端口
### 1.3 利用场景
Loction 302跳转辅助脚本 [302.php][1]
### 1.4 服务端支持协议
#### Dict协议 -> dict://fuzz.wuyun.org:8080/helo:dict
/302.php?s=dict&ip=fuzz.wuyun.org&port=8080&data=helo:dict
#### Gopher协议 -> gopher://fuzz.wuyun.org:8080/gopher
/302.php?s=gopher&ip=fuzz.wuyun.org&port=8080&data=gopher
#### File协议 -> file:///etc/passwd
这里需要一个辅助脚本
服务器请求302跳转,直接读取到服务器本地文件
#### 综上所述得出结论
从回显结果可以判断服务端的curl为低版本的 7.15.1,支持dict,ftp,gopher,dict等协议
## 2. 漏洞利用
鉴于gopher://是一个万金油的服务,这里不对该协议进行利用描述,相关技术大家可以自行Google,本文重点讲解如何探测开放的网络服务和漏洞利用,在乌云峰会结束后,还会进行内容的更新,加入一些其他利用方法。
### 2.1 对开放的网络服务进行探测
这个漏洞地址是t.qq.com,腾讯微博的,确定内网地址,只需要开启域名穷举即可,比如:
PING demo.t.qq.com (10.133.42.26) ,就大概知道腾讯微博的内网地址
针对固定的10.网络 B段、C段进行遍历探测
随机针对内网10.网段进行探测
### 2.2 对已开放的服务进行漏洞利用
这里描述的利用内容,使用的dict协议,dict提供了一个非常棒的功能
> dict://serverip:port/name:data
> 向服务器的端口请求 name data,并在末尾自动补上\r\n(CRLF),为漏洞利用增添了便利
REDIS Server的命令接收格式为:
> command var data \r\n
实战利用代码如下:
shell.php 辅助脚本 [shell.php][3]
## 3. 漏洞证明
配置利用变量
### 3.1 针对redis进行漏洞利用
根据上面的原理做成利用脚本
查询远程Redis服务器的信息
成功获得Redis服务器Shell
### 3.2 Struts2 命令执行规则表
### 3.5 其它乌云峰会后待续
[1]: http://fuzz.wuyun.org/src/302.php
[2]: http://fuzz.wuyun.org/src/file.php
[3]: http://fuzz.wuyun.org/src/shell.php