LFI

版权声明:如需转载,请注明原文出处,作者:vergilben https://blog.csdn.net/weixin_42751456/article/details/88735456

LFI漏洞

本地文件包含(Local File Include)是php脚本的一大特色,程序员们为了开发方便,常常会用到包含。比如把一系列功能函数都写进function.php中,之后当某个文件需要使用时直接调用定义的函数。 本地包含漏洞是php中一种典型的高危漏洞,由于程序员未对用户可控变量的输入进行检查,导致用户可以控制被包含的文件,成功利用时可以使web server将特定文件当成php执行,从而导致用户获取颐一定的服务器权限。

实例

下面展示一个存在漏洞的服务器脚本(test.php):

<?php
if ($_GET['func']) {
    include $_GET['func'];
} else {
    include 'default.php';
}
?>
//示例

在正常的使用中,http://www.xxx.com/test.php?func=fuction就包含了function这个文件,但是由于参数没有进行过滤,我们可以自己提交参数内容,这时就会导致文件包含漏洞。比如,我们提交:http://www.xxx.com/test.php?f=hello.txt
根据合天提供的实验环境,我们直接访问test.php,不赋值func参数,则默认包含同一,目录下的defualt.php
在这里插入图片描述
访问:
在这里插入图片描述
接下来我们赋值func参数为/etc/passwd,由于test.php脚本位于Linux下的/var/www目录下,所以必须先返回到服务器根目录下再包含/etc/passwd,即:http://10.1.1.137/test.php?func=../../etc/passwd
访问:
在这里插入图片描述接下来我们自己上传文件并实现包含
这里主要是结合服务器一些文件上传点,比如头像上传、上传照片至相册等,假设我们可以自定义上传头像,头像文件在网站根目录下的upload下,具体目录可以传上去之后查看图片的url信息。
先制作包含恶意代码的图片文件:

  1. 在windows下用copy命令,shell.php为一句话木马(我们用phpinfo()代替,注意在代码前面加上一些其它字符,否则在合成时‘<’会被‘吃掉’):
    在这里插入图片描述
    随便在windows中找一张图片,与shell.php放在同一个目录下,接下来在windows命令中执行:copy 123.jpg /b + shell.php /a eval.jpg:
    在这里插入图片描述我们查看一下eval.jpg:
    在这里插入图片描述可以看到合成成功了,我们的图片木马文件制作完成。

  2. 恶意上传图片
    在这里插入图片描述
    上传成功,并且得到了图片的存储路径:
    在这里插入图片描述

  3. 结合LFI漏洞将恶意图片进行包含,即将func参数赋值为upload/eval.jpg:
    在这里插入图片描述

包含webserver日志文件

apache的日志文件在LFI漏洞的利用中是非常常见的。因为不管我们提交的Get请求或者Post请求都会被apache记录到日志文件里。所以我们可以控制请求内容,将恶意代码写入日志文件,从而实现包含。首先可以包含apache2.conf查看日志文件位置以及文件名格式配置(这里不是想象中的httpd.conf配置文件,这里要说明的是apache2的配置文件是apache2.conf,而不是httpd.conf)。
接下来开始操作。

  1. 先查看apache2.conf
    在这里插入图片描述在error.log同一目录下有个access.log访问日志文件,所以我们访问http://10.1.1.137/test.php?file=../<?php phpinfo();?>.php会被记录下来,这样我们便将php代码写进了access.log文件,这个过程还需要burpsite的帮助。

  2. 开始写入php代码
    先启动burpsite并配置代理
    在这里插入图片描述
    接下来对url进行解码,转码成功如下所示
    在这里插入图片描述在这里插入图片描述
    点击Forward,关闭burpsite恢复代理。

  3. 包含access日志文件
    访问:http://10.1.1.137/test.php?func=../log/apache2/access.log
    在这里插入图片描述

  4. 注意
    在实际利用中,需要注意一下几个问题:
    1)Access.log和error.log过大,这时候有可能会导致超时。所以如果能包含其他文件那就包含其他文件,或者使用诸如此类的木马<?php $c=fopen('/tmp/g','w');fwrite($c,'<?php eval($_POST["1"]);?>');?>,打开包含日志文件时就会新创建另外一个一句话木马。
    2)写入的代码被转义。比如我们提交test.php?func=../<?php phpinfo();?>.php时,在<?php 后面紧跟着一个空格,这个空格如果被转义成%20就会导致php代码执行失败,还有时候写进access.log文件里的还可能是将两个尖括号<>也转义了的。在实际测试中,用火狐、谷歌、IE都会转义,对于所有以上情况,可以使用如上所诉的burp进行抓包解码

  5. 包含其他日志文件
    文件包含漏洞的实质是包含我们可以控制文件内容的文件,所以其他日志文件如果我们可控的话也是可以进行包含利用的。这里以VSFTPD的日志文件为例进行演示。实际利用过程中要先得到目标系统的linux发行版本号、FTP server的版本号,而后找默认日志目录。

第一步是测试权限,看是否有权限读取文件(vsftpd的日志位置路径为 /var/log/vsftpd.log):http://10.1.1.137/test.php?func=../log/vsftpd.log
在这里插入图片描述可以看到是可以包含的,接下来我们登陆服务器ftp,但是填写用户名为:<?php phpinfo();?>,密码随意。
在这里插入图片描述这时我们的“恶意代码”已经写入了vsftpd日志文件,接下来包含一下试试:
在这里插入图片描述成功包含。

包含环境变量文件

  1. 包含环境变量文件
    Linux下有一个文件/proc/self/environ,这个文件里保存了系统的一些变量。内容如下
    在这里插入图片描述
    用户可以通过修改浏览器的useragent信息插入自己的内容到该文件,将php代码写入进去之后再利用LFI进行包含就可以实现对漏洞的利用。首先验证访问权限,看是否有权限读取该文件内容:http://10.1.1.137/test.php?func=../../proc/self/environ
    在这里插入图片描述可以看到红框里的内容,当前的USER_AGENT变量被写进了这个文件,而USER_AGENT是可以伪造的,这里我们利用firefox的UAControl进行伪造,先编辑UAControl对于这个网站的USER_AGENT信息。点开工具栏的工具——>UAControl,在弹出的窗口进行如下操作
    在这里插入图片描述接下来我们对environ文件进行包含
    在这里插入图片描述可以看到包含成功。

如需转载,请注明原文出处,作者:vergilben

猜你喜欢

转载自blog.csdn.net/weixin_42751456/article/details/88735456
LFI
今日推荐