讲解PHPCMSv9.6.1任意文件读取漏洞的挖掘和分析过程

   2025-07-02 admin00100

PHPCMS使用教程介绍PHPCMSv9.6.1任意文件读取漏洞的挖掘

推荐(免费):PHPCMS使用教程

看到网上说出了这么一个漏洞,所以抽空分析了下,得出本篇分析。

1.准备工作&漏洞关键点快速扫描

1.1前置知识

这里把本次分析中需要掌握的知识梳理了下:

  1. php原生parse_str方法,会自动进行一次urldecode,第二个参数为空,则执行类似extract操作。

    立即学习“PHP免费学习笔记(深入)”;

  2. 原生empty方法,对字符串""返回true。

  3. phpcms中sys_auth是对称加密且在不知道auth_key的情况下理论上不可能构造出有效密文。

1.2 快速扫描

先diff下v9.6.0和v9.6.1,发现phpcms/modules/content/down.php中有如下修改:

--- a/phpcms/modules/content/down.php+++ b/phpcms/modules/content/down.php@@ -14,12 +14,16 @@ class down {                $a_k = sys_auth($a_k, 'DECODE', pc_base::load_config('system','auth_key'));                if(empty($a_k)) showmessage(L('illegal_parameters'));                unset($i,$m,$f);+               $a_k = safe_replace($a_k);^M                parse_str($a_k);                if(isset($i)) $i = $id = intval($i);                if(!isset($m)) showmessage(L('illegal_parameters'));                if(!isset($modelid)||!isset($catid)) showmessage(L('illegal_parameters'));                if(empty($f)) showmessage(L('url_invalid'));                $allow_visitor = 1;+               $id = intval($id);^M+               $modelid  = intval($modelid);^M+               $catid  = intval($catid);^M                $MODEL = getcache('model','commons');                $tablename = $this->db->table_name = $this->db->db_tablepre.$MODEL[$modelid]['tablename'];                $this->db->table_name = $tablename.'_data';@@ -86,6 +90,7 @@ class down {                $a_k = sys_auth($a_k, 'DECODE', $pc_auth_key);                if(empty($a_k)) showmessage(L('illegal_parameters'));                unset($i,$m,$f,$t,$ip);+               $a_k = safe_replace($a_k);^M                parse_str($a_k);                                if(isset($i)) $downid = intval($i);                if(!isset($m)) showmessage(L('illegal_parameters'));@@ -118,6 +123,7 @@ class down {                                }                                $ext = fileext($filename);                                $filename = date('Ymd_his').random(3).'.'.$ext;+                               $fileurl = str_replace(array('<','>'), '',$fileurl);^M                                file_down($fileurl, $filename);                        }                }
 
举报收藏 0打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  RSS订阅
Powered By DESTOON