bugku-web-聪明的php

文章讲述了如何利用PHP参数漏洞,通过绕过特定函数过滤,尝试使用passthru等命令执行功能来查看和遍历文件,最终在根目录找到隐藏的flag文件。
摘要由CSDN通过智能技术生成

传递一个参数,提示flag的文件名随意

这里就是要传递参数filename,其值随意

直接得到内部逻辑代码

<?php
include('./libs/Smarty.class.php');
echo "pass a parameter and maybe the flag file's filename is random :>";
$smarty = new Smarty();
if($_GET){
    highlight_file('index.php');
    foreach ($_GET AS $key => $value)
    {
        print $key."\n";
        if(preg_match("/flag|\/flag/i", $value)){
            
            $smarty->display('./template.html');


        }elseif(preg_match("/system|readfile|gz|exec|eval|cat|assert|file|fgets/i", $value)){


            $smarty->display('./template.html');            
            
        }else{
            $smarty->display("eval:".$value);
        }
        
    }
}
?> 

这里应该是一个命令指定漏洞
要想办法绕过过滤,让value中的恶意执行代码成功执行
常见的php命令执行函数有
system、exec、passthru等,这里已经禁止了部分,尝试passthru

这里的php版本为php5,值得一试
一定要注意,这里指定php代码时要将其用{}扩起来,表示这时php代码,不然执行不成功

直接得到所有当前目录下文件
直接查看这些文件,但是cat被过滤,所以不能使用linux命令,直接使用php函数进行查看

这里就是php文件读取的九大命令
因为这里对字段的过滤,带有file的都不行
选择show_source
挨个读取文件,有的文件没有回显,是空文件

将这些文件全部读取结束后,居然没有发现flag

命令执行语句

{passthru(ls)}


文件查看语句

{show_source()}

再细看这些没有反馈的文件名,你说有没有可能这写没有反馈和后缀的名称,是一个个文件夹
利用命令执行进行挨个查看

发现libs中包含大量文件

Autoloader.php Smarty.class.php SmartyBC.class.php debug.tpl plugins sysplugins


再次查看

果然这些文件包含大量信息

反之接下来就是整体电脑文件的全部查询了,直到找到flag文件的存放位置
最终在根目录下找到一个全是数字的文件

直接读取

得到flag

  • 31
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值