首页 > 其他 > 详细

Automated CMS category, version identification (CMS vulnerability detection)

时间:2015-10-28 22:42:32      阅读:331      评论:0      收藏:0      [点我收藏+]

catalog

1. 引言
2. 不同CMS版本标的文件路径调研

 

1. 引言

微软解决大量CVE补丁更新的检测时候,采取的思路不是根据MD5对单个漏洞文件(.dll、.sys)进行漏洞检测,而是采取基线检测的思路,对目标的.dll、.sys文件进行版本检测,如果当前版本不是最新的,则报告对应的可能存在的疑似漏洞

0x1: 技术方案

1. 识别WEB路径
    1) 进程启动参数
    2) 解析WEB容器配置文件
2. 定位CMS类型
    1) 从WEB根目录进行递归查找
    2) 根据相对路径、文本正则特征进行CMS类型定位
    3) 所有的规则(SEARCHPATHRULE)是逻辑与的关系,必须同时成立后,才能100%定位到该CMS类型
4. 识别CMS版本
对于CMS版本的识别,通用的思路如下
    1) 寻找每个版本100%一定都会变化的"标的文件",计算它的MD5值,和事先计算好的最新版的"标的文件"的MD5进行对比
    2) 根据相对路径寻找一个"版本信息文件",此文件中明文保存着当前的版本信息
5. 计算当前获取的版本信息是否"小于"规则库中的版本信息(这里的小于可能需要在格式转换的基础上进行比较)
6. 特征的匹配、版本信息的提取采取正则规则进行,在正则规则中使用了一些非捕获分组、前后环视控制符,在提取结果的时候需要提取"第一个捕获子组匹配到的文本"

权衡之下,在判断版本的方案中,如果采用方案1的话如果规则库不及时更新的话,可能会造成大规模误报(用户本机的CMS版本高于规则中的版本,但是因为MD5不同也被报出来了),所以采用方案2是相对较合理的方案,这种方案要求规则制定的时候需要case by case地调研不同CMS标识版本信息的路径文件

Relevant Link:

http://www.cnblogs.com/LittleHann/p/4497977.html

 

2. 不同CMS版本标的文件路径调研

0x1: DEDECMS

<CMSVERSIONINFO>
    <ITEM>
        <NAME>DEDECMS</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\plus\mytag_js.php</PATH>
                <PATTERN>\$pv->SetTemplet</PATTERN>
            </RULE>
            <RULE>
                <PATH>\plus\ad_js.php</PATH>
                <PATTERN>\$dsql->GetOne</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\data\admin\ver.txt</PATH>
            <PATTERN>[0-9]{8}</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20150618</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0X2: DISCUZ-X

<CMSVERSIONINFO>
    <ITEM>
        <NAME>DISCUZ-X</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\api\uc.php</PATH>
                <PATTERN>API_RETURN_SUCCEED;</PATTERN>
            </RULE>
            <RULE>
                <PATH>\config\config_global.php</PATH>
                <PATTERN>\$_config\[admincp\]</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\source\discuz_version.php</PATH>
            <PATTERN>(?<=DISCUZ_RELEASE)(?:.*?)([0-9]{8})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20150609</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x3: DISCUZ

Discuz的版本存在2个分支,Discuz(number)是老的分支现在已经不维护了,Discuz-X是新的分支,所以原则上如果检测到当前CMS为数字系列的,都一律报告存在低版本风险

Discuz!版本
版本维护级别
一般性使用问题
严重性使用问题
一般性安全问题
高危安全问题
Discuz!X3.2
Discuz!X3.1
x
Discuz!X3.0
×
x
Discuz!X2.5
×
×
x
Discuz!X2
×
×
×
Discuz!X1.5.1
×
×
×
Discuz!X1.5
×
×
×
≤ Discuz! 7.x
x
x
x
x
         
放弃维护版本
Discuz!X1.0、 Discuz!1.0~Discuz!7.2
<CMSVERSIONINFO>
    <ITEM>
        <NAME>DISCUZ</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\api\uc.php</PATH>
                <PATTERN>API_RETURN_SUCCEED;</PATTERN>
            </RULE>
            <RULE>
                <PATH>\manyou\userapp.php</PATH>
                <PATTERN>userapp.php\?script=user</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\discuz_version.php</PATH>
            <PATTERN>(?<=DISCUZ_RELEASE)(?:.*?)([0-9]{8})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20101225</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x4: PHPMYADMIN

<CMSVERSIONINFO>
    <ITEM>
        <NAME>PHPMYADMIN</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\libraries\core.lib.php</PATH>
                <PATTERN>PMA_ifSetOr</PATTERN>
            </RULE>
            <RULE>
                <PATH>\libraries\common.inc.php</PATH>
                <PATTERN>PHPMYADMIN</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\libraries\Config.class.php</PATH>
            <PATTERN>(?<=PMA_VERSION)(?:.*?)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>4.5.1</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x5: ASPCMS

<CMSVERSIONINFO>
    <ITEM>
        <NAME>ASPCMS</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\inc\AspCms_CommonFun.asp</PATH>
                <PATTERN>createStreamFile</PATTERN>
            </RULE>
            <RULE>
                <PATH>\inc\AspCms_SettingClass.asp</PATH>
                <PATTERN>setcharset</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\inc\AspCms_Version.asp</PATH>
            <PATTERN>(?<="AspCms)(?:.*?)([0-9]{8})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20150901</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x6: WORDPRESS

<CMSVERSIONINFO>
    <ITEM>
        <NAME>WORDPRESS</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\wp-admin\credits.php</PATH>
                <PATTERN>wp_credits</PATTERN>
            </RULE>
            <RULE>
                <PATH>\wp-admin\canonical.php</PATH>
                <PATTERN>redirect_canonical</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\wp-includes\version.php</PATH>
            <PATTERN>(?<=wp_version)(?:.*?)([0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>4.3.1</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x7: ECSHOP

<CMSVERSIONINFO>
    <ITEM>
        <NAME>ECSHOP</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\api\uc.php</PATH>
                <PATTERN>API_RETURN_SUCCEED;</PATTERN>
            </RULE>
            <RULE>
                <PATH>\includes\cls_template.php</PATH>
                <PATTERN>make_compiled</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\includes\cls_ecshop.php</PATH>
            <PATTERN>(?<=RELEASE)(?:.*?)([0-9]{8})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20121106</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x8: phpcmsv9

<CMSVERSIONINFO>
    <ITEM>
        <NAME>PHPCMSV9</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\phpcms\base.php</PATH>
                <PATTERN>load_sys_class;</PATTERN>
            </RULE>
            <RULE>
                <PATH>\phpsso_server\api.php</PATH>
                <PATTERN>pc_base::load_sys_class</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\caches\configs\version.php</PATH>
            <PATTERN>(?<=pc_release)(?:.*?)([0-9]{8})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20150812</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x9: JOOMLA

<CMSVERSIONINFO>
    <ITEM>
        <NAME>JOOMLA</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\libraries\cms\application\cms.php</PATH>
                <PATTERN>afterSessionStart</PATTERN>
            </RULE>
            <RULE>
                <PATH>\libraries\cms\class\loader.php</PATH>
                <PATTERN>loadClass</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\libraries\cms\version\version.php</PATH>
            <PATTERN>(?<=RELEASE)(?:.*?)([0-9]{0,1}\.[0-9]{0,1})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>3.4</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0X10: EMPIRECMS

<CMSVERSIONINFO>
    <ITEM>
        <NAME>EMPIRECMS</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\e\web\atom.php</PATH>
                <PATTERN>RepSpeRssStr</PATTERN>
            </RULE>
            <RULE>
                <PATH>\e\DoInfo\ecms.php</PATH>
                <PATTERN>eCheckAccessDoIp</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\e\class\EmpireCMS_version.php</PATH>
            <PATTERN>(?<=EmpireCMS_LASTTIME)(?:.*?)([0-9]{12})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>201502071030</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x11: PHPWEB

<CMSVERSIONINFO>
    <ITEM>
        <NAME>PHPWEB</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\member\includes\member.inc.php</PATH>
                <PATTERN>membertypelist</PATTERN>
            </RULE>
            <RULE>
                <PATH>\includes\codeimg.inc.php</PATH>
                <PATTERN>SetDraw</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\version.php</PATH>
            <PATTERN>(?<=PHPWEB_RELEASE)(?:.*?)([0-9]{8})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20100925</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x12: METINFO: 无法找到版本文件
0x13: drupal: 无法找到版本文件
0x14: coldfusion: 无法找到版本文件
0x15: z-blog: 无法找到版本文件

0x16: DESTOON

<CMSVERSIONINFO>
    <ITEM>
        <NAME>DESTOON</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\module\brand\brand.class.php</PATH>
                <PATTERN>get_list</PATTERN>
            </RULE>
            <RULE>
                <PATH>\module\brand\admin\setting.inc.php</PATH>
                <PATTERN>update_setting</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\version.inc.php</PATH>
            <PATTERN>(?<=DT_RELEASE)(?:.*?)([0-9]{8})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>20151028</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x17: qibosoft: 无法找到版本文件

0x18: SHOPEX

<CMSVERSIONINFO>
    <ITEM>
        <NAME>SHOPEX</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\core\admin\controller\ctl.cent_save.php</PATH>
                <PATTERN>make_shopex_ac</PATTERN>
            </RULE>
            <RULE>
                <PATH>\core\admin\controller\member\ctl.member.php</PATH>
                <PATTERN>show_detail</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\core\version.txt</PATH>
            <PATTERN>(?<=app)(?:.*?)([0-9]{0,1}\.[0-9]{0,1}\.[0-9]{0,1})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>4.8.5</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

0x19: ECMALL

<CMSVERSIONINFO>
    <ITEM>
        <NAME>ECMALL</NAME>
        <SEARCHPATHRULE> 
            <RULE>
                <PATH>\includes\models\partner.model.php</PATH>
                <PATTERN>reset_error_handler</PATTERN>
            </RULE>
            <RULE>
                <PATH>\admin\includes\priv.inc.php</PATH>
                <PATTERN>\$menu_data</PATTERN>
            </RULE> 
        </SEARCHPATHRULE>
        <VERSIONINFO> 
            <PATH>\eccore\ecmall.php</PATH>
            <PATTERN>(?<=VERSION)(?:.*?)([0-9]{0,1}\.[0-9]{0,1}\.[0-9]{0,1})</PATTERN>
        </VERSIONINFO> 
        <NEWESTVERSION>2.3.0</NEWESTVERSION>
    </ITEM> 
</CMSVERSIONINFO>

Relevant Link:

http://blog.sina.com.cn/s/blog_67c986fc0100w77z.html

 

Copyright (c) 2015 LittleHann All rights reserved

 

Automated CMS category, version identification (CMS vulnerability detection)

原文:http://www.cnblogs.com/LittleHann/p/4916633.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!