首页 > 其他分享 >[Zer0pts2020]Can you guess it?

[Zer0pts2020]Can you guess it?

时间:2024-05-02 14:45:16浏览次数:15  
标签:index guess basename SERVER source Zer0pts2020 php config

[Zer0pts2020]Can you guess it?

打开环境没有什么特殊的地方,可以点击按钮查看源码

fj3146IVa2Ecv0B0C-uyUA55sSN9oCCwtkbmdThu-Is

<?php
include 'config.php'; // FLAG is defined in config.php

if (preg_match('/config\.php\/*$/i', $_SERVER['PHP_SELF'])) {
  exit("I don't know what you are thinking, but I won't let you read it :)");
}

if (isset($_GET['source'])) {
  highlight_file(basename($_SERVER['PHP_SELF']));
  exit();
}

$secret = bin2hex(random_bytes(64));
if (isset($_POST['guess'])) {
  $guess = (string) $_POST['guess'];
  if (hash_equals($secret, $guess)) {
    $message = 'Congratulations! The flag is: ' . FLAG;
  } else {
    $message = 'Wrong.';
  }
}
?>

提示了flag在config.php中

第一个if判断中,$_SERVER用于获取当前执行脚本的文件名,与document root有关。例如,在地址为 http://xxx/test.php/foo.bar 的脚本中使用$_SERVER['PHP_SELF']将得到 /test.php/foo.bar

如果url是:http://xxx/index.php/a.php/a/b/c/d/?a=1

$_SERVER['PHP_SELF']的值就是index.php/a.php/a/b/c/d/ (忽略传参)

并且PHP在根据URI解析到对应文件后会忽略掉URL中多余的部分,即若访问存在的index.php页面,如下两种url均会访问到。

/index.php
/index.php/dosent_exist.php

这里判断$_SERVER获取到的值是否以config.php/* 结尾。相当于要求config.php/后不能有可读文件,如果是则退出。

第二个if如果传入了source参数,就highlight_file 高亮显示$_SERVER中经过basename后提取到的文件

basename可以理解为对传入的参数路径截取最后一段作为返回值,但是该函数发现最后一段为不可见字符时会退取上一层的目录,即:

$var1="/config.php/test"
basename($var1) => test
$var2="/config.php/%ff"
basename($var2) => config.php

绕过正则可以使用不存在于ascii码表中的字符,比如中文符号?、《》、中文等,例如index.php/config.php/??source(第一个为中文问号),此时正则就会失效,SERVER获取到的就是index.php/config.php(忽略传参),经过basenmae后就是config.php,这样既可以绕过正则匹配,也可以绕过basename的过滤

payload如下:

/index.php/config.php/??source
/index.php/config.php/%ff?source

OxxhcUFFKZ5fO9afl5dhBU9EXatQfF5qKhNEJk1g7cA

标签:index,guess,basename,SERVER,source,Zer0pts2020,php,config
From: https://www.cnblogs.com/fishjumpriver/p/18170179

相关文章

  • CF1765C Card Guessing 题解
    考虑期望的线性性,求每种情况猜对的概率和,最终再除掉\({4n\choosen,n,n,n}\)。考虑枚举最少的出现次数\(mn\),记四种卡的出现次数分别为\(c_1,c_2,c_3,c_4\),\(c_1+c_2+c_3+c_4=i\lek\),则这种情况的方案数为:\[{i\choosec_1,c_2,c_3,c_4}{4n-i\choosen-c_1,n-c_2,n-c_3,n-c_......
  • 猜数游戏[USACO2008] Haybale Guessing G
    $Haybale\Guessing\G$(猜数游戏)解题报告\(Diffculty:\)\(\color{purple}省选/NOI-\)传送门1:(HZOIER)传送门2:(vjudge)传送门3:(luogu)题面为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力。游戏开始前,一头指定的奶牛会在牛棚后......
  • P2898 [USACO08JAN] Haybale Guessing G 题解
    题目传送门前置知识二分答案|并查集解法对条件的合法性判断其他题解已经讲得很明白了,这里不再赘述。这里主要讲一下用并查集实现黑白染色问题。以下内容称被覆盖为黑色,不被覆盖为白色。本题因为是单向染色,即从白到黑,故可类似luoguP1840ColortheAxis和D的并查集或......
  • Codeforces Global Round 17 A. Anti Light's Cell Guessing
    给一个\(n\timesm\)的网格,里面藏了一个炸弹\((x_0,y_0)\)。你可以选择\(k\)个坐标\((x_1,y_1),(x_2,y_2),\cdots,(x_k,y_k)\)。第\(i\)次选择计算机会回复你一个数\(d_i=|x_0-x_i|+|y_0-y_i|\)。至少需要选出多少个坐标才能确定\((x_0,y_0)\)的位......
  • CF1864E Guess Game
    原题翻译非常好的一道题,不过前半部分的逻辑推理比较难理解,这很博弈由于或运算是有\(1\)就为\(1\),因此我们对于一对数\((a,b)\),我们不需要看\(a|b\)中为\(0\)的那些位,因此我们只需要考虑\(a|b\)全\(1\)的情况即可我们考虑一下如果\(Alice\)说"我不知道"说明什么?说明在\(a\)和\(......
  • Pwn-guess[攻防世界]
    0x01基础分析题目中共有两个附件guess和libc-2.27.so先运行guess:captain@ubuntu:~/Desktop$./guess1.Logintoguess2.ExitChoice:和密码账户相关,应该是硬编码写入了程序中,下面通过IDA分析尝试获取密码账户0x02IDA逆向分析一、main函数__int64__fastcallmain(......
  • 北大ACM poj3589 Number-guessing Game
    Number-guessingGameTimeLimit:1000MS MemoryLimit:65536KTotalSubmissions:5805 Accepted:4204DescriptionLarrylikesplayingthenumber-guessinggame.Twoplayersareneededinagame.SupposetheyareXandY,andXpresentsanumberforYtogu......
  • Druid连接池更换Guess数据源
    目录1.遇到的问题2.更换数据源操作步骤1.添加pom依赖2.更改jdbc.properties3.初始化Druid连接池1.遇到的问题工作中有个db国产化的需求,需要在一个老项目中把DB从mysql更换为openGuess,将对应的驱动和Druid数据源改造后启动程序报错如下:java.lang.IllegalStateException:dbTy......
  • Python 报错 Could not guess image MIME subtype
    Python报错CouldnotguessimageMIMEsubtype问题描述:使用MIMEImage打包图片时,报错CouldnotguessimageMIMEsubtypefromemail.mime.imageimportMIMEImageidentification=uuid.uuid4().hexwithopen(abspath,"rb")asf:content=f.read()img=MIMEIm......
  • [ACTF新生赛2020]outguess
    首先拿到文件查看图片信息社会主义核心价值观编码,直接解码用kali里面的outguess隐写解一下outguess-k'abc'-rmmm.jpgflag.txt之后catflag.txt......