file to base64 error 没有文件目录_file_put_content和死亡杂糅代码之缘

1369a55da92209c795bacb306896649f.gif亲爱的,关注我吧 1369a55da92209c795bacb306896649f.gif

9/1

文章共计4652个词

今天的内容有一些图,流量用户注意哦

9月的第一天,和我一起阅读吧

文章转载来源:先知社区https://xz.aliyun.com/t/8163

如何优雅地写一篇文章是我一直以来不解的问题

之前打了WMCTF,题目还行,只是非预期很快乐,比赛时checkin2感觉很有意思,就来思考个专题;

首先来说,file_put_content大概有三种情形出现;

file_put_contents($filename,"<?php exit();".$content);

file_put_contents($content,"<?php exit();".$content);

file_put_contents($filename,$content . "\nxxxxxx");

这里我们的思路一般是想要将杂糅或者死亡代码分解掉;这里思路基本上都是利用php伪协议filter,结合编码或者相应的过滤器进行绕过;其原理不外乎是将死亡或者杂糅代码分解成php无法识别的代码;

1

首先对于第一种情况

直观的看到,我们的文件名和文件内容都是可控的,这种的相对来说简单的多,我们直接控制文件名,和文件内容即可,下面分享几种方式;

  • 1. base64编码绕过

原理其实很简单,利用base64解码,将死亡代码解码成乱码,使得php引擎无法识别;

$filename='php://filter/convert.base64-decode/resource=s1mple.php';$content = 'aPD9waHAgcGhwaW5mbygpOz8+';

这里之所以将$content加了一个a,是因为base64在解码的时候是将4个字节转化为3个字节,又因为死亡代码只有phpexit参与了解码,所以补上一位就可以完全转化;载荷效果如下:

a2671c5963defe4dbf8f01d015cdebc9.png

  • 2.rot13编码绕过

原理和base64一样,可以直接转码分解死亡代码;这里不再多说;直接看如下实验结果即可;

82471d98311fcffec6cb8a79a1acff25.png

只是这种方法有点尴尬的是;因为我们生成的文件内容之中前面的并没有分解掉,这时,如果服务器开启了短标签,那么就会被解析,所以所以后面的代码就会错误;也就失去了作用;

  • 3. .htaccess的预包含利用

利用 .htaccess的预包含文件的功能来进行攻破;自定义包含我们的flag文件。

$filename=php://filter/write=string.strip_tags/resource=.htaccess$content=?>php_value%20auto_prepend_file%20G:\s1mple.php

同时传入如上的代码,首先来解释$filename的代码,这里引用了string.strip_tags过滤器,可以过滤.htaccess内容的html标签,自然也就消除了死亡代码;$content即闭合死亡代码使其完全消除,并且写入自定义包含文件;实验结果如下所示:

3618709e4f0918374e15c39d780e35b1.png

但是这种方法也是具有一定的局限性,首先我们需要知道flag文件的位置,和文件的名字,一般的比赛中可以盲猜 flag.php flag /flag /flag.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值