NO.3-10 [Zer0pts2020]Can you guess it?

2024-03-05 01:59
文章标签 no.3 guess zer0pts2020

本文主要是介绍NO.3-10 [Zer0pts2020]Can you guess it?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

知识点

  • basename函数

WP

进入页面,审一下源码:

<?php
include 'config.php'; // FLAG is defined in config.phpif (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.';}
}
?>
<!doctype html>
<html lang="en">
<head><meta charset="utf-8"><title>Can you guess it?</title>
</head>
<body>
<h1>Can you guess it?</h1>
<p>If your guess is correct, I'll give you the flag.</p>
<p><a href="?source">Source</a></p>
<hr>
<?php if (isset($message)) { ?><p><?= $message ?></p>
<?php } ?>
<form action="index.php" method="POST"><input type="text" name="guess"><input type="submit">
</form>
</body>
</html>

去查了一下hash_equals,基本没可能从这里入手,只可能从上面那段代码入手了:

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();
}

比如$path是/var/www/html/index.php,那么basename($path);得到的就是index.php。
因此要从这里来highlight_file这个config.php。但是存在正则匹配,需要绕过。这里的绕过也是利用了basename这个点。写一个代码来fuzz一下:

<?php
function check($str){return preg_match('/config\.php\/*$/i', $str);
}for($i=0;$i<255;$i++){$str="/index.php/config.php/".chr($i);if(!check($str)){echo $i.":".basename($str);echo "<br>";}
}

可以看到,从%81开始,basename就会忽略了,既绕过了正则匹配,而且basename得到的也是config.php,因此就可以直接读到flag了。
但是经过测试,其实%80同样可以做到。

其实好好了解一下这个函数,会发现它会去掉文件名开头的非ASCII值。也就是这个函数在实际使用的时候会出的一个问题,如果文件的开头是中文,他只会得到中文后面的部分。因此结合实际的问题,也可以解决这个题目:


 

原文链接:https://blog.csdn.net/rfrder/article/details/110929280

 

这篇关于NO.3-10 [Zer0pts2020]Can you guess it?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/774969

相关文章

UVALive 4255 Guess

题意: 给你半个矩阵  如果(i,j)的位置是'-'  则说明sum[i...j]<0  如果是'+'  说明sum>0  如果是'0'  说明sum=0  给出一种满足这个矩阵的序列  序列元素绝对值在10以内 思路: 很容易想到的是将sum[i...j]转化为sum[j]-sum[i-1]  即用前缀和来表示  那么题中的矩阵就可以转化成前缀和之间的大小比较  也就是说  我们可以通过

UVA11995I Can Guess the Data Structure!(stack + queue + priority_queue)

题目:UVA11995I Can Guess the Data Structure!(stack + queue + priority_queue) 题目大意:给你两种指令,1代表让1后面的数字进入这个数据结构,2代表无差错的从数据结构中取出这个数字,问这个数据结构是stack还是queue还是priority_queue,还是不确定,还是以上均不可能。 解题思路:用STL中的这些

LeetCode-374. Guess Number Higher or Lower

问题:https://leetcode.com/problems/guess-number-higher-or-lower/?tab=Description We are playing the Guess Game. The game is as follows: I pick a number from 1 to n. You have to guess which number I pi

UVA - 11995 I Can Guess the Data Structure!

题意:求满足操作的数据结构 思路:模拟 #include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <stack>#include <queue>using namespace std;int n,o,e,cs,s,q,pq;int main(){while (scanf("%

[Zer0pts2020]easy strcmp 分析与加法

查壳 Ubuntu上的64位程序 第一步应该尝试运行一下   啥也不是 (这里我改了程序,原来应该是a1>1) 但是我动调发现a1值是1 我就改了判断 但是还是没什么用 也找不到a2的引用 找一下有没有什么improt调用 发现还是啥也不是 思路这里断了 刚好这个程序几个代码而已 函数看完! 这个比较像哈 但是你会发现没有什么引用?????

Codeforces Round #312 (Div. 2) D. Guess Your Way Out! II 贪心排序

D. Guess Your Way Out! II time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard output Amr bought a new video game “Guess Your Way Out! II”. The goal

Codeforces Round #287 (Div. 2) C. Guess Your Way Out! 数学

C. Guess Your Way Out! time limit per test1 second memory limit per test256 megabytes inputstandard input outputstandard output Amr bought a new video game “Guess Your Way Out!”. The goal of the

【leetcode73】经典算法-Guess Number Higher or Lower

题目描述: 从1~n中,随便的拿出一个数字,你来猜测。 提示 提供一个guess(int num)的api,针对猜测的数字,返回三个数值。0,-1,1 0;猜中返回num-1:比猜测的数值小1:比猜测的数值大 例如: n = 10, I pick 6. Return 6. 原文描述: We are playing the Guess Game. The game is as fo

checking build system type... configure: error: cannot guess build type; you must specify one

今天在用configure生成Makefile时,出现了如下错误: checking build system type... configure: error: cannot guess build type; you must specify one 我用的命令是./configure --host=arm-linux- --prefix=/txk/build/install 根

每日一练 no.3

问题来源玩蛇网http://www.iplaypy.com/python-100/7097.html 问题: 一个整数,它加上100和加上268后都是一个完全平方数 解答: 一个数整数分别加上100和268,开方,判断结果是否为整数: 由于268-100=168,两个平方数只差最小为1,假设为1 由(168-1)/2=83.5, 可知平方数不会大于84, 84**2 = 7056,可知i不