phar文件包含实例:
打开靶场后显示一个文件上传的页面:
打开源码,得到有用的信息有lfi.php、upload.php、以及lfi.txt文件
lfi.php、upload.php文件源码空空如也
打开lfi.txt文件,得到有用信息为%s.php,会给上传的目标文件添加php后缀
- 在上图中可以看到,以 file 来接收参数,而且只允许包含php文件,还会在文件的末尾添加“.php”。
- 这里因为只能上传 txt 文件,那么就需要包含来解析了。但是会在文件的末尾添加“.php”,所以直接包含是找不到我们上传的 txt 文件的,而且%00也不能用。
- 这里用到了phar伪协议,比如:phar://1.jpg/2.php ,可以把1.jpg当成2.php解析。那么这里用如下的phar的利用方式:先把包含一句话的木马文件压缩,然后再改名字,上传后,用phar://1.txt/1.php 进行解析。
上传hack2.txt文件
使用phar伪协议进行文件包含
注意:链接末尾hack2无后缀
蚁剑连接成功
在html目录下,可进一步查看flag.php、upload.php
<?php
if(isset($_POST['submit'])){
$upload_name = $_FILES['file']['name'];
$tempfile = $_FILES['file']['tmp_name'];
$upload_ext = trim(get_extension($upload_name));
$savefile = "./files/".RandomString() . '.txt';
if ($upload_ext == 'txt') {
if(move_uploaded_file($tempfile,$savefile)) {
die('Success upload. FileName: '.$savefile);
}
else {
die('Upload failed..');
}
}
else {
die('You are not a txt file..');
}
}
function get_extension($file){
return strtolower(substr($file, strrpos($file, '.')+1));
}
function RandomString()
{
$characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
$randstring = "";
for ($i = 0; $i < 16; $i++) {
$randstring .= $characters[rand(0, strlen($characters)-1)];
}
return $randstring;
}
// make a lfi vulnerability
?>
<html>
</html>