今天是2026年8月21号
由于前几天电脑被我玩坏了,所以停了几天,今天继续分享Polar靶场WEB中等题第41-48题
Polar靶场
41.题目信息:你也玩铲吗

进入靶场:

注册:

登录:


在源码中可以看到线索:

我们用dirsearch扫一下看看:

进入/login_admin.html目录是一个管理员登陆入口:

我们可以在此页面看到存储中的cookie值:

我们根据之前的提示对user:admin进行base64编码后,把这里的值名改为auth,值改为base64编码:
编码:

改值:

刷新页面后在源码中可以看到admin.login.php点击到此页面拿到flag:


成功拿到flag:flag{polarCTFzhraiwanJCC}
42.题目信息:PolarCMS

进入靶场:

点击联系管理员能看到管理员名称:huangle

点击密码可以看到不允许的字符:

我们尝试输入任意一个不被允许的字符发现直接登录进去了(用户名随便填):


先看看上传文件,我们上传一个木马试试:

可以发现木马并没有被解析,再尝试别的方法,尝试后发现创建新页面里有xss漏洞:


我们再试试有没有其他漏洞:


经过一堆测试,发现里面存在伪SSTI模板注入,我们输入${7*7}并不会被求值,但是却可以这样写${exec('ls')},证明不是真正的模板注入,既然都拿到当前目录了,我们就直接寻找flag:

通过修改${exec('ls')}里面的ls参数,成功看到flag,直接读取:

成功拿到flag:flag{2c97920bc4798a23da9ae504f2e05f3b}
43.题目信息:Squirtle的论坛

进入靶场:

先用dirsearch扫一下:

扫到三个目录,我们一个一个看:
/admin.php:

/src/:

/upload.php:

从这三个目录可以得知我们需要更高的权限,主页中有一个提示:欢迎大家,这里的user可以是任何人,但master只能是Squirtle!!!,我们试试伪造cookie,添加cookie把值写入master=Squirtle:

可以发现成功进入管理员面板,可以在这里上传文件,我们试试上传木马:

由于这里用浏览器比较麻烦,所以改用BP了。可以看到我们的木马成功上传了,接下来我们打开蚁剑连接我们上传的地址:
http://c36ed7e0-3bb7-41c0-820d-190659959767.www.polarctf.com:8090/uploads/shell.php

连接成功,在根目录拿到flag:flag{PolarD&N_YYDS}

44.题目信息:狗黑子的舔狗日记

进入靶场:



我们先用dirsearch扫一下:

扫到了两个目录:
/www.zip:

里面是一个密码本,看看/flag.php目录:

666里面是情书,还有一首歌:樱花树下的约定。先不管这个了,在主页点退出登录可以到登录界面:

这里应该是要登录女神的号,但是我们现在没有账号,我们再看看别的:

我们在来回切换底部交互栏时可以发现地址栏多出了?page参数可能是文件包含,我们试试用它来访问/etc/passwd内容:

被拦截了,我又尝试了其他的文件,发现index.php没有被拦截,但是无输出:

我们用PHP伪协议尝试读取:

成功读取源码,我们对base64编码进行解码:

得到源码:
<?php
session_start();
define('PAGE_WECHAT', 'xiaoxi.php');
define('PAGE_MOMENTS', 'pengyouquan.php');
define('PAGE_PROFILE', 'wode.php');
$defaultPage = PAGE_MOMENTS;
$currentPage = $_SESSION['current_page'] ?? $defaultPage;
$allowedPages = [PAGE_WECHAT, PAGE_MOMENTS, PAGE_PROFILE];
if (isset($_GET['page']) && in_array($_GET['page'], $allowedPages)) {
$currentPage = $_GET['page'];
$_SESSION['current_page'] = $currentPage;
chdir(dirname(__FILE__));
$is_dangerous = false;
if ($is_dangerous) {
echo "只允许当前目录";
}
}
if (isset($_GET['page'])) {
$requestedPage = $_GET['page'];
$baseDir = dirname(__FILE__);
if (strpos($requestedPage, 'php://') === 0) {
if (preg_match('/resource=([^&]+)/', $requestedPage, $matches)) {
$resource = $matches[1];
$resource = urldecode($resource);
if (strpos($resource, '/') !== false || strpos($resource, '\\') !== false || strpos($resource, '..') !== false) {
die("不支持其他操作");
}
include($requestedPage);
exit;
}
}
$fullPath = realpath($baseDir . DIRECTORY_SEPARATOR . $requestedPage);
if ($fullPath === false || dirname($fullPath) !== $baseDir) {
die("不支持其他操作");
}
include($requestedPage);
chdir(dirname(__FILE__));
$is_dangerous = false;
if ($is_dangerous) {
echo "只允许当前目录";
}
exit;
}
$flag='ZmxhZ3vlpbPnpZ7nmoTlkI3lrZdtZDXliqDlr4Z9CnRpcHMgIOWls+elnuW+ruS/oeWPt++8mm52c2hlbg==';
if (in_array($currentPage, $allowedPages)) {
include($currentPage);
} else {
include(PAGE_MOMENTS);
}
if (isset($_GET['action']) && $_GET['action'] === 'logout') {
session_destroy();
header('Location: src/denglu.php');
exit;
}
?>
在源码中我们可以找到一串疑似flag的base64编码,我们对其解码看看:

得到了一些线索,flag是女神名字的md5加密和女神微信号是nvshen,我们尝试用这个微信号+我们之前获得的密码本来爆破女神的微信:

开始攻击:

爆破成功,拿到女神微信密码,我们用女神的微信号和密码来登录女神微信:

登进去是一个聊天界面,可以看到舔狗在给我们发消息,我们回一个不去试试(这里回什么都一样):

成功得到女神的名字,我们对其进行md5加密,成功得到flag:flag{aa1e3ea993e122de5de6e387db6c8609}

45.题目信息:polar快递

进入靶场:

是一个登录系统,我们先看看备忘录,在这里可以看到各个权限可以干的事:

在底部可以看到账户信息:

在备忘录中可以看到默认账号和密码,但是只有普通账号密码,管理员只有一个账号,我们先用普通账号密码登录:

当前是普通用户,在这里并没有发现什么有用的东西,我们用BP抓个包看看:

在登录时抓包可以看到有一个POST参数id,值为user,这让我联想到了备忘录中的权限说明,我们尝试将其改为高权限试试:

尝试了改为admin但没用,改为root发包成功拿到flag:flag{welcome_to_polarctf}
46.题目信息:狗黑子的跳转

进入靶场:

鼠标放上去会按钮会跑开,我们可以禁用JavaScript或在前端将mousedown和mouseover这两个取消勾选来点击按钮:

成功进入,里面是一个上传点,仔细看看可以发现地址栏多了参数:

经过尝试得知,这里只能上传图片,我们试试抓包改后缀:

弹出了文件上传成功,但没有给我们目录,我们试试改地址栏里的参数来尝试读取木马:

提示不是有效文件,在之前我们可以看到地址栏中有一个参数为ghzgouheizi.php,这里是上传点,那肯定有题目源码,我们尝试用php伪协议来读取,payload:
ghzgouheizi.php?gou=php://filter/read=convert.base64-encode/resource=ghzgouheizi.php

成功拿到base64编码,我们对其解码:

成功拿到题目源码,我们分析一下源码:
<?php
if (!isset($_GET['gou'])) {
header("Location: ?gou=ghzgouheizi.php");
exit;
}
$gou = $_GET['gou'];
if (strpos($gou, '../') !== false) {
die("不允许访问上级目录!");
}
$blockProtocols = ['php://input', 'data://', 'phar://'];
foreach ($blockProtocols as $proto) {
if (strpos($gou, $proto) === 0) {
die("禁止使用危险协议!");
}
}
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$file = $_FILES['file'];
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif'];
if (!in_array($file['type'], $allowedTypes)) {
die("只允许上传图片文件!");
}
$ext = pathinfo($file['name'], PATHINFO_EXTENSION);
if (empty($ext)) {
die("文件缺少扩展名!");
}
$originalName = $file['name'];
$base64Name = base64_encode($originalName);
$md5Name = md5($base64Name);
$filename = $md5Name . '.' . $ext;
$uploadDir = './uploads/';
if (!is_dir($uploadDir)) {
mkdir($uploadDir, 0755, true);
}
$uploadPath = $uploadDir . $filename;
if (move_uploaded_file($file['tmp_name'], $uploadPath)) {
echo "文件上传成功!";
} else {
die("文件上传失败!");
}
}
$currentFile = basename(__FILE__);
if ($gou !== $currentFile) {
$includePath = './' . $gou;
if (strpos($gou, 'php://filter') === 0) {
include($gou);
} elseif (is_file($includePath)) {
include($includePath);
} else {
die("包含的文件不存在或不是有效文件!");
}
exit;
}
?>
在源码中我们可以得到一些关键线索,题目禁用了几个伪协议,我们用的是php://filter伪协议刚好绕过,还有我们上传的文件名会被重新命名,命名规则为:先base64编码后md5加密,然后会被放到./uploads/目录下,我们可以给我们上传的木马名这样加密一下就可以得到上传后的文件名了,PHP加密代码:
<?php
$name='shell.php';
echo md5(base64_encode($name));
?>

成功拿到文件名,我们在?gou接口来访问我们的木马文件:

看到文件头了,证明我们成功了,接下来可以用蚁剑连接或直接发POST请求,我这里图方便直接发请求了,先看一下根目录:

发现flag,直接读取:

成功拿到flag:flag{06d22add0cf74c46feffe95e7f8}
47.题目信息:aa

进入靶场:

在网页源码中可以看到i.php文件,点进去是题目:

分析一下代码,代码是在做计算,会把rawX的值放到decodeX函数里进行base64解码,会把rawY的值放到processY函数里进行md5加密然后返回前8个字符,会把rawZ的值放到decodeZ函数里进行url解码,最后flag就等于它们拼接起来。经过计算得到:$X = 6547、$Y = caf1a3df、$Z = 25,可以写个脚本来验证一下:
<?php
$rawX = 'NjU0Nw==';
$rawY = '123';
$rawZ = '17%2B8';
function decodeX($value) {
return intval(base64_decode($value));
}
function processY($value) {
$reversed = strrev($value);
$md5Result = md5($reversed);
return substr($md5Result, 0, 8);
}
function decodeZ($value) {
$decoded = urldecode($value);
return eval("return $decoded;");
}
$X = decodeX($rawX);
$Y = processY($rawY);
$Z = decodeZ($rawZ);
$flag = $X + (int)$Y + $Z;
var_dump($X,$Y,(int)$Y,$Z,$flag);
echo "flag{".$X.$Y.$Z."}";
?>

成功得到flag:flag{6547caf1a3df25}
48.题目信息:PolarShop

进入靶场:

我们先花1积分看看留言:

发现被坑了,我们可以在前端修改积分参数:


得到了一些信息,店主的名字是Squirtle,店铺账单:

这一看就是密码本,肯定是要我们爆破后台,接下来我们用dirsearch扫一下看看:

扫出了/admin.php,应该是后台地址,我们访问看一看:

确实是后台,我们用得到的账号和密码本对其进行爆破:

开始爆破:

成功爆出密码:5qu1rtle,我们用此密码进行登录:

成功来到了管理员后台,但还是查看不了店主秘密,我们在存储->cookie中可以看到user=test的值:

我们把test改成店主:Squirtle,再次查看秘密:

成功拿到flag:flag{d104c607a29d48eb99f2eece12281a7f}
今天就到这里。
“万般折腾,终有归处。”
今日做题分享
本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
评论交流
欢迎留下你的想法