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.总结

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

相关推荐
JaguarJack2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo2 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack3 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理3 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
QQ5110082853 天前
python+springboot+django/flask的校园资料分享系统
spring boot·python·django·flask·node.js·php
WeiXin_DZbishe3 天前
基于django在线音乐数据采集的设计与实现-计算机毕设 附源码 22647
javascript·spring boot·mysql·django·node.js·php·html5
一名优秀的码农3 天前
vulhub系列-14-Os-hackNos-1(超详细)
安全·web安全·网络安全·网络攻击模型·安全威胁分析
努力的lpp3 天前
SQLMap CTF 常用命令全集
数据库·web安全·网络安全·sql注入
努力的lpp3 天前
SQL 报错注入
数据库·sql·web安全·网络安全·sql注入
longxiangam3 天前
Composer 私有仓库搭建
php·composer