首页 > 代码库 > Gxlcms时间盲注+后台任意文件删除读取下载+getshell

Gxlcms时间盲注+后台任意文件删除读取下载+getshell

前台SQL时间盲注

在前台作品评分处

技术分享

Lib\Home\Action/CommAction.class.php

第56行

        $ting_id = $_GET["id"];

第133行

            $ting_gold = $mod->where("ting_id=‘$ting_id‘")->getField("ting_gold");

导致了可以时间盲注 因为回显不明确

技术分享

后台GetShell

技术分享

后台附件设置处

fuzz过程 输入php  被过滤成空  所以 phphpp  提交之后就会变成php

跟踪到\Lib\Admin\Action\AdminAction.class.php

$config["upload_class"] = trim(str_replace(array("php", "asp", "apsx", "txt", "asax", "ascx", "cdx", "cer", "cgi", "jsp", "html", "html", "htm", ",,"), "", strtolower($config["upload_class"])), ",");

技术分享

抓包 跟踪一下 发现同样的操作

$upload_class = str_replace(array("php", "asp", "apsx", "txt", "asax", "ascx", "cdx", "cer", "cgi", "jsp", "html", "html", "htm", ",,"), "", strtolower(C("upload_class")));
        var_dump(strtolower(C("upload_class")));

附件配置处的地方替换一次后写进config.php  这里从config.php中读出来的时候再替换一次  所以在附件设置的地方就该未雨绸缪构造一个两次替换后才是php的后缀 

这里我用的是ptxtptxthtxtptxthtxtp

替换一次是pphphp

替换两次就是php

技术分享

技术分享

后台任意文件删除

模板文件管理的地方和数据库恢复的地方

   public function del(){
        $id = admin_gxl_url_repalce(str_replace(‘*‘,‘.‘,trim($_GET[‘id‘])));
        //die($id);
        if (!substr(sprintf("%o",fileperms($id)),-3)){
            $this->error(‘无删除权限!‘);
        }
        @unlink($id);
        if (!empty($_SESSION[‘template_jumpurl‘])) {
            $this->assign("jumpUrl",$_SESSION[‘template_jumpurl‘]);
        }else{
            $this->assign("jumpUrl",‘?s=Admin/Template/Show‘);
        }
        $this->success(‘删除文件成功!‘);
    }

没有过滤  可以任意文件删除

任意文件下载

技术分享

GET /index.php?s=Admin-Data-Down-id-20170805_2978_1.sql HTTP/1.1

    public function down(){
        $filepath = DATA_PATH.‘_bak/‘.$_GET[‘id‘];
        //die($filepath);
        if (file_exists($filepath)) {
            $filename = $filename ? $filename : basename($filepath);
            $filetype = trim(substr(strrchr($filename, ‘.‘), 1));
            $filesize = filesize($filepath);
            header(‘Cache-control: max-age=31536000‘);
            header(‘Expires: ‘.gmdate(‘D, d M Y H:i:s‘, time() + 31536000).‘ GMT‘);
            header(‘Content-Encoding: none‘);
            header(‘Content-Length: ‘.$filesize);
            header(‘Content-Disposition: attachment; filename=‘.$filename);
            header(‘Content-Type: ‘.$filetype);
            readfile($filepath);
            exit;
        }else{
            $this->error(‘出错了,没有找到分卷文件!‘);
        }
    }

依然没有过滤  构造的时候用\\..\\..\\跨目录

 

任意文件读取

技术分享

 

后台添加广告的地方 抓包

    //后置操作
    public function _after_insert(){
        $array = $_POST;
        var_dump($array);
        //die(‘./‘.C(‘admin_ads_file‘).‘/‘.$array[‘ads_name‘].‘.js‘);
        write_file(‘./‘.C(‘admin_ads_file‘).‘/‘.$array[‘ads_name‘].‘.js‘,t2js(stripslashes(trim($array[‘ads_content‘]))));
        $this->success(‘添加广告位成功!‘);
    }

这里没有过滤  把js文件写在Template\gxlcms目录下 

技术分享

 

模板管理的地方就可以编辑   点编辑

    public function add(){
        $filename = admin_gxl_url_repalce(str_replace(‘*‘,‘.‘,trim($_GET[‘id‘])));
        if (empty($filename)) {
            $this->error(‘模板名称不能为空!‘);
        }
        $content = read_file($filename);
        $this->assign(‘filename‘,$filename);
        $this->assign(‘content‘,htmlspecialchars($content));
        

就可以跳目录读取任意文件了 但是很遗憾 更新的地方他写死了 只能修改白名单内的文件 所以不能getshell

尝试生成tt/2.js 然后访问tt 不能进行目录遍历

任意文件下载

技术分享

这里跟上面形成的原因一样 都是没有过滤造成的 

Gxlcms时间盲注+后台任意文件删除读取下载+getshell