智慧建站平台,千套网站模板,免费随心选!

您现在的位置: 首页>>网站教程

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

来源: 发布时间:2020-12-15热度:1573 ℃
PHPCMS使用教程介绍PHPCMSv9.6.1任意文件读取漏洞的挖掘推荐(免费):PHPCMS使用教程看到网上说出了这么一个漏洞,所以抽空分析了下,得出本篇分析。1.准备工作&漏洞关键点快速扫描1.···

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

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

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

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

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

1.1前置知识

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

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

  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);
                        }
                }
登录后复制

本文地址:http://yunji1.cn