一个php的小trick:file_put_contents

admin 2024年8月18日01:23:07评论10 views字数 855阅读2分51秒阅读模式

这里给个pwnhub的简化版的题

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function is_valid($title, $data){
$data = $title . $data;
return preg_match('|\A[ _a-zA-Z0-9]+\z|is', $data);
}

$title = $_GET['title'];
$data = $_GET['data'];
if (!is_valid($title,$data)){
exit("no!no!no!");
}
file_put_contents('a.php',$data);

先解释一下代码,传过来的title和data两个值拼接在一起,然后去匹配正则表达式,只能有字母、数字、空格和下划线,如果匹配成功,就使用file_put_contents将data的内容写进去a.php文件
可是我们想写一个马进去,至少也是要有?这些字符的,这里就利用到php的一个trick了

先来个官网介绍
一个php的小trick:file_put_contents
可以看见,filename是要被写入数据的文件名;data是写入的数据,类型可以是string,array;data可以是数组,但是不能是多维数组,相当于file_put_contents($filename,join(‘’,$array)),如果第二个参数传入的是数组,则它们会以字符串的形式拼接起来

这里有个可以利用的地方就是,我们第二个参数可以传入一个数组,这样在进行正则拼接的时候,数组会强制转化成字符串,也就是会变成$title.Array,这样当然是可以符合规则的,所以就可以绕过正则的限制了,而且很秀的是,刚刚好file_put_contents是可以执行数组的
最后的payload:

1
?title=s&data[]=<?php%0a&data[]=phpinfo();

最后我们可以看见,a.php确实写进了phpinfo(),至此,我们就可以利用这个漏洞写个马了
一个php的小trick:file_put_contents

最后补一句,其实这个漏洞在fopen(),fwrite(), fclose()也是存在的

FROM:Xi4or0uji

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年8月18日01:23:07
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一个php的小trick:file_put_contentshttps://cn-sec.com/archives/3074579.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息