找回密码
 立即注册
首页 业界区 安全 【2025PolarCTF秋季个人赛】WEB方向部分wp

【2025PolarCTF秋季个人赛】WEB方向部分wp

旱由 2025-9-20 21:00:21
white

打开靶机,发现可以执行命令,但是进行了严格的过滤
可以执行的命令是一个白名单
  1. ls
  2. pwd
  3. whoami
  4. date
  5. echo
  6. base64
  7. sh
复制代码
白名单命令下方告知了过滤规则,比如禁止危险函数和过滤特殊字符等。有意思的是,这里虽然说过滤特殊字符(如;、&、|、@、!)等,但是我们随便输入一个被过滤的字符,会回显一个过滤字符的正则表达式
  1. /[;&`$\'"<>?*[\]{}()#@!%]/
复制代码
而这个正则表达式过滤掉的字符有
  1. / [ ; & \ $ ' " < > ? * [ ] { } ( ) # @ ! %`
复制代码
可以发现,并没有管道符 | 。所以管道符拼接就是本题的利用点。
回到白名单,可以发现有echo base64 sh等可以利用,这样解法就很清楚了。
首先给ls命令base64编码为bHM=,然后执行
  1. echo bHM=|base64 -d|sh
复制代码
发现可以正常回显,证明这种方法可行
tac /flag编码dGFjIC9mbGFn,执行
  1. echo dGFjIC9mbGFn|base64 -d|sh
复制代码
拿到flag
俄罗斯方块

是一个小游戏
游戏开始页面提示够10分给奖励,我们控制台修改score=10,然后消除一行,看到弹窗提示
好吧是个假的奖励。
我们去翻js源码
在下面可以看到一个路由地址,访问拿到flag
1.png
  1. flag{Polar_gift_of_Squirtle}
复制代码
狗黑子的舔狗日记

进去之后是一个类似微信的页面,我们到处点一点,发现只有消息、朋友圈、我和退出登录这几个页面可以有效访问
dirsearch扫一下,发现flag.php和源码泄露
2.png

flag.php是一个类似表白女神的页面,没什么有用信息
www.zip解压出来是一串弱密码,留着备用
然后我们观察切换页面时url的变化,是通过?page参数来改变访问的页面
考虑文件读取漏洞,尝试目录穿越,但是严格过滤了特殊字符,所以目录穿越不可行
然后考虑php伪协议读index.php源码,尝试发现可行,并且在源码中找到了一个base64加密的flag字符串
3.png

解base64发现关键信息
4.png

注意output编码改为utf-8,否则汉字输出时会乱码
知道了女神的微信号,猜测刚才的弱密码其中有女神微信密码,爆破
5.png

拿到密码直接登录,发现可以进到女神和狗黑子的聊天记录
6.png

随便发送一条消息即可得到女神名字
7.png

md5加密名字即可得到flag
8.png
  1. flag{aa1e3ea993e122de5de6e387db6c8609}
复制代码
VIP

vip内容需要VIP才能查看,我们抓包查看,发现有一个post参数
  1. vipStatus=no
复制代码
给他改成yes拿到flag
9.png

polar快递

下载备忘录
在里面找到默认普通账号和默认密码,此时登录发现当前是普通用户权限,无法查看flag
登录时抓包,我们看到一个post参数id=user,给他改成root,登录拿到flag
10.png

狗黑子的登录

dirsearch扫一下发现git泄露,githack拿到源码
index.php
  1. <?php
  2. session_start();
  3. if (isset($_SESSION['logged_in']) && $_SESSION['logged_in'] === true) {
  4.     header('Location: admin.php');
  5.     exit;
  6. }
  7. if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['seclients_can_register'])) {
  8.     $registerValue = $_POST['seclients_can_register'];
  9.     // 明确处理0和1两种情况
  10.     if ($registerValue == 1) {
  11.         $_SESSION['show_register'] = true;  
  12.     } elseif ($registerValue == 0) {
  13.         $_SESSION['show_register'] = false;
  14.     }
  15. }
  16. // 处理登录
  17. $error = '';
  18. if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['login'])) {
  19.     $username = $_POST['username'] ?? '';
  20.     $password = $_POST['password'] ?? '';
  21.    
  22.     require 'config.php';
  23.    
  24.     if (isset($users[$username]) && $users[$username] === $password) {
  25.         $_SESSION['logged_in'] = true;
  26.         $_SESSION['username'] = $username;
  27.         header('Location: admin.php');
  28.         exit;
  29.     } else {
  30.         $error = '用户名或密码不正确';
  31.     }
  32. }
  33. ?>
  34. <!DOCTYPE html>
  35. <html lang="zh-CN">
  36. <head>
  37.     <meta charset="UTF-8">
  38.     <title>狗黑子的小破站</title>
  39.    
  40. </head>
  41. <body>
  42.    
  43.         <h2>用户登录</h2>
  44.         <?php if ($error): ?>
  45.             <?php echo $error; ?>
  46.         <?php endif; ?>
  47.         
  48.         <form method="post">
  49.             
  50.                 <label for="username">用户名</label>
  51.                 <input type="text" id="username" name="username" required>
  52.             
  53.             
  54.                 <label for="password">密码</label>
  55.                 <input type="password" id="password" name="password" required>
  56.             
  57.             <button type="submit" name="login">登录</button>
  58.             
  59.             <?php if (isset($_SESSION['show_register']) && $_SESSION['show_register'] === true): ?>
  60.                 <button type="button"  onclick="window.location.href='register.php'">注册</button>
  61.             <?php endif; ?>
  62.         </form>
  63.    
  64. </body>
  65. </html>
复制代码
admin.php
  1. <?php
  2. session_start();
  3. if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
  4.     header('Location: index.php');
  5.     exit;
  6. }
  7. if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['seclients_can_upload']) && $_POST['seclients_can_upload'] == 1) {
  8.     $_SESSION['show_upload'] = true;
  9. }
  10. $upload_message = '';
  11. if (isset($_SESSION['show_upload']) && $_SESSION['show_upload'] === true && $_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
  12.     $target_dir = "uploads/";
  13.     if (!file_exists($target_dir)) {
  14.         mkdir($target_dir, 0777, true);
  15.     }
  16.    
  17.     $target_file = $target_dir . basename($_FILES["file"]["name"]);
  18.     $uploadOk = true;
  19.    
  20.     if ($_FILES["file"]["size"] < 200 * 1024) {
  21.         $upload_message = "文件太小了。";
  22.         $uploadOk = false;
  23.     }
  24.    
  25.     $image_types = array('image/jpeg', 'image/png', 'image/gif', 'image/webp');
  26.     $file_type = $_FILES["file"]["type"];
  27.    
  28.     if (!in_array($file_type, $image_types)) {
  29.         $upload_message = "只允许上传图片文件 (JPG, PNG, GIF, WEBP)。";
  30.         $uploadOk = false;
  31.     }
  32.    
  33.     if ($uploadOk && move_uploaded_file($_FILES["file"]["tmp_name"], $target_file)) {
  34.         $upload_message = "文件 " . htmlspecialchars(basename($_FILES["file"]["name"])) . " 上传成功。";
  35.     } elseif ($uploadOk) {
  36.         $upload_message = "文件上传失败。";
  37.     }
  38. }
  39. ?>
  40. <!DOCTYPE html>
  41. <html lang="zh-CN">
  42. <head>
  43.     <meta charset="UTF-8">
  44.     <title>狗黑子的小破站</title>
  45.    
  46. </head>
  47. <body>
  48.     <h1>恭喜进来<?php echo htmlspecialchars($_SESSION['username']); ?>!</h1>
  49.     <p><button>退出登录</button></p>
  50.    
  51.     <?php if ($upload_message): ?>
  52.         
  53.             <?php echo $upload_message; ?>
  54.         
  55.     <?php endif; ?>
  56.    
  57.     <?php if (isset($_SESSION['show_upload']) && $_SESSION['show_upload'] === true): ?>
  58.         
  59.             <h2>文件上传</h2>
  60.             <form method="post" enctype="multipart/form-data">
  61.                 <input type="file" name="file" id="file">
  62.                
  63.                 <input type="submit" value="上传文件" name="upload">
  64.             </form>
  65.         
  66.     <?php endif; ?>
  67. </body>
  68. </html>
复制代码
思路很简单,首先注册,登录,然后传马拿flag
首先post传参seclient_can_register=1拿到注册按钮,注册账号
这里注意账号密码需要保持统一
注册后登录
在admin.php页面post传seclient_can_upload=1拿到文件上传按钮,这里只检测MIME类型和文件大小,我们在shell.php中写入一句话木马,后面跟上200k的数据即可
[code]

相关推荐

您需要登录后才可以回帖 登录 | 立即注册