首页 > 其他分享 >[鹤城杯 2021]EasyP

[鹤城杯 2021]EasyP

时间:2024-01-28 15:56:18浏览次数:23  
标签:鹤城 EasyP 匹配 utils SERVER PHP 2021 题目 php

我来到博客园的第一篇记录
题目复现链接:https://www.nssctf.cn/problem/463

题目源码:

<?php
include 'utils.php';

if (isset($_POST['guess'])) {
    $guess = (string) $_POST['guess'];
    if ($guess === $secret) {
        $message = 'Congratulations! The flag is: ' . $flag;
    } else {
        $message = 'Wrong. Try Again';
    }
}

if (preg_match('/utils\.php\/*$/i', $_SERVER['PHP_SELF'])) {
    exit("hacker :)");
}

if (preg_match('/show_source/', $_SERVER['REQUEST_URI'])){
    exit("hacker :)");
}

if (isset($_GET['show_source'])) {
    highlight_file(basename($_SERVER['PHP_SELF']));
    exit();
}else{
    show_source(__FILE__);
}
?> 

审计代码第一眼可以看到只需要POST传参guess,使其值为secret即可获取到flag
但四处寻找无果,只能转换思路,尝试从utils.php文件中入手
代码中存在highlight_file函数,可以读取文件,这里便是题目的突破点

知识点

$_SERVER超全局变量

查阅官方文档,$_SERVER 是一个包含了诸如头信息(header)、路径(path)、以及脚本位置(script locations)等信息的 array。这个数组中的条目由 Web 服务器创建,所以不能保证每个 Web 服务器都提供全部条目;服务器可能会忽略一些,或者提供此处没有列举出来的其它内容。

简单来说,这是一个包含了各种信息的数组,而在题目中:
$_SERVER['PHP_SELF']用于获取当前正在执行的脚本文件的路径和名称
$_SERVER['REQUEST_URI']用于获取当前请求的URI(统一资源标识符),包括路径和查询参数部分。

他们在仅访问某脚本时返回的值完全一样:

但当传递参数则会有不同的返回:

basename()函数

该函数返回路径中的文件名部分,可以近似地认为是返回最后一个/之后的内容

该函数有一个利用的点在于当传入的参数为非ASCII码、乱码、中文等特殊字符时会将其抛弃

PHP参数解析特性

PHP会自动将参数转换为有效的变量名:
1.删除空白符
2.将特殊字符[+ .转化成下划线_

正则表达式/utils.php/*$/i

utils\.php:匹配字符串中的"utils.php"部分,因为"."在正则表达式中是一个元字符,需要使用转义符""来匹配实际的点号。
\/:匹配斜杠字符"/"。
*:表示前面的斜杠可以出现0次或多次,即"/"可以出现0个或多个。
$:表示匹配字符串结尾。
i:表示忽略大小写。

Payload

知识点已经罗列完毕,现在回到题目中
思路已经明确了:修改URI,绕过waf,利用代码中的文件读取函数去进行文件读取
最终payloado:
/index.php/utils.php/%ff?show[source=1

其中%ff用来绕过第一个匹配,[用来绕过第二个匹配,payload经过PHP_SELFbasename()的作用后只剩下utils.php,达到读取文件的结果

标签:鹤城,EasyP,匹配,utils,SERVER,PHP,2021,题目,php
From: https://www.cnblogs.com/Atln1as/p/17992940

相关文章

  • [经验] cdr2021怎么设置默认字体
    1、cdr怎么设置默认字体CDR是一种名为CorelDRAW的矢量图形设计软件,它可用于制作各种美术设计、商业图形、字体和桌面出版设计等。在使用CDR进行设计时,我们通常需要按照自己的需要设置字体、字号等风格属性。那么,我们如何设置CDR的默认字体呢?以下是具体步骤:第一步:首先打开CD......
  • 动手学深度学习v2(李沐2021版),from d2l import torch as d2l报错
     点击查看代码%matplotlibinline#该项事实也无法运行fromd2limporttorchasd2l#此行报错如下所示点击查看代码---------------------------------------------------------------------------ImportErrorTraceback(mostrecentcal......
  • 2020-2021 ICPC Southwestern European Regional Contest (SWERC 2020)
    Preface经典前期天胡开局,70min的时候就已经过6题+会另外3题了,本来以为又要像昨天那样提前下班了后面好家伙FGH连着卡,最后磕磕碰碰刚好在结束前写完10个题,强行续上班时长了属于是A.Gratitude签到,注意出现次数相同的字符串的处理#include<cstdio>#include<iostream>#includ......
  • P7563 JOISC 2021 Day4 最悪の記者 4 (Worst Reporter 4)
    P7563JOISC2021Day4最悪の記者4(WorstReporter4)线段树合并好题,通过线段树合并特别的方式优化了树形dp。思路根据图中的不等关系连边建图,不难发现最后的图将会是基环树森林和普通的树的森林,我们先考虑对于一棵树要怎么办。将\(h_i\)离散化,\(m\)为离散化上界,使用树......
  • 2020-2021 ICPC NERC (NEERC), North-Western Russia Regional Contest (Northern Sub
    Preface最近事情挺多积压了三天没训练,本来计划着去补CF的题,但后面还是溜去写WA2杂谈了今天重归训练结果碰上超级毒瘤场,2h30min9题后剩下题目都难得飞起,最后还是靠徐神大力切了L题(我早就提前下班了)评价是这就是Russia场的威力吗,后面的Hard题是一点不可做啊A.Archivist纯签到......
  • Redis整形溢出漏洞(CVE-2021-32761)及修复脚本
    今天的计划是修复线上的redis漏洞Redis整形溢出漏洞(CVE-2021-32761)及修复脚本目的:修复生产的redis漏洞,主要是整数溢出漏洞,但是过程中发现还有反弹shell漏洞(次要,毕竟需要密码)计划:获取生产的redis版本账号和密码在测试环境搭建反正环境漏洞的研究与证实测试环......
  • Xmas Contest 2021 D Determinant?
    由Amitsur-Levitzki定理,当\(n\ge2k\)时,答案为\(0\)矩阵。否则我们考虑答案矩阵的某一位\(b_{i,j}\),其必然由某些路径\(i=p_0\top_1\to\\cdots\top_n=j\)贡献而来,一条路径的贡献为\(\text{sgn}(\sigma)\cdot\prod\limits_{i=1}^nA_{\sigma(i),p_{i-1},p_{i}}\)。......
  • 如何进行H.265视频播放器EasyPlayer.js的中性化设置?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC、fmp4等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能......
  • 如何进行H.265视频播放器EasyPlayer.js的中性化设置?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,可支持H.264与H.265编码格式,性能稳定、播放流畅,能支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC、fmp4等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时直播等功能......
  • 洛谷 P9843 [ICPC2021 Nanjing R] Paimon Sorting 题解
    Descirption给出一个排序算法(用伪代码表示):SORT(A)forifrom1tonforjfrom1tonifa[i]<a[j]Swapa[i]anda[j]算出对于一个序列\(A=a_1,a_2,\cdots,a_n\)的所有前缀\(A_k=a_1,a_2,\cdots,a_k\)(\(1\lek\len\)),\(\operatorname{SORT}(A_......