实战 | 记一次某报表系统漏洞挖掘

实战 | 记一次某报表系统漏洞挖掘

原创 Xxia0hei04 小黑说安全 2024-04-08 00:03

0x01 前言

这是近期朋友发过来的一个站,

速帮忙
过了一遍,内容比较简单。

0x02 分析与利用

访问网站提示以下信息。

搜索关键字获取到代码。

拿到项目简单过了一遍,跑了一遍。

其实这里多个接口都能玩,这里就先看一个InputServlet吧,运行脚本发现在raqsoftReport.jar。

import os
import zipfile
import sys

# 确保有足够的命令行参数传入
if len(sys.argv) < 3:
    print("Usage: python tqu.py <directory_to_search> <text_to_search>")
    sys.exit(1)

# 第一个命令行参数是要搜索的目录
directory_to_search = sys.argv[1]
# 第二个命令行参数是要搜索的文本
text_to_search = sys.argv[2]

# 遍历目录
for foldername, subfolders, filenames in os.walk(directory_to_search):
    for filename in filenames:
        if filename.endswith('.jar'):
            # 构造完整的文件路径
            full_path = os.path.join(foldername, filename)
            try:
                # 打开JAR文件
                with zipfile.ZipFile(full_path, 'r') as jarfile:
                    # 遍历JAR文件内的每个文件
                    for name in jarfile.namelist():
                        # 打开JAR文件内的文件
                        with jarfile.open(name) as file:
                            if text_to_search.encode() in file.read():
                                print(f"Found '{text_to_search}' in {full_path}")
                                break  # 找到文本后跳出循环
            except zipfile.BadZipFile:
                print(f"Bad zip file: {full_path}")

代码很简单,根据action参数的值来判断走哪块逻辑。

这里的上传路径实际只有upFileName可控,经过下方代码拼接之后,
大概是类似”
var/cache/tmp_12345_example.txt
“的样子。

这里习惯性的测试../,发现可能是被过滤掉了。

然后fuzz了一下,发现当输入”/\”的时候居然将路径暴了出来,同时”/\”居然被解释成了”\”。

于是尝试使用”..\”跳三次,居然成功了。

最后帮到底吧,上了个马发过去了。

0x03 小密圈‍‍‍‍‍‍‍‍

最后送你一张优惠券,欢迎加入小密圈,好朋友。