首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kali Linux Web渗透测试手册-6.2-文件包含和文件上传

翻译来自掣雷小组

成员信息:

thr0cyte,Gr33k,花花,MrTools,R1ght0us,7089bAt

标记红色的部分为今日更新内容。

标记红色的部分为今日更新内容。

6.0、介绍

6.1、寻找文件包含漏洞

6.2、文件包含和文件上传

6.3、手工验证SQL注入

6.4、基于错误的SQL注入

6.5、确认并利用sql盲注漏洞

6.6、使用SQLMap查找和利用SQL注入

6.7、利用XML外部实体注入

6.8、检测和利用命令注入漏洞

6.2、文件包含和文件上传

我们在前面的章节中了解到的,当开发人员对用户上传的文件所在的路径不做安全校验或者用户恶意上传文件使其包含当前路径的某些源码时,就会发生文件上传或者文件包含漏洞。如今的服务端开发语言比如PHP,它从5.2.0版本开始就默认关闭了远程文件包含的功能,所以从2011年到如今,PHP的RFI已经不是那么轻易就能被发现了。

在本篇小节中,我们将学到通过上传一个恶意的文件,也就是WebShell(可以在服务器上执行命令的web页面)并且使用LFI执行它。

环境准备

在这个章节,我们会在服务器上上传一个文件。我们需要知道上传文件的存储位置以便于我们能通过程序去访问它。在DVWA中找到一个可以上传文件的地方,任意上传一张JPG格式的图片,如果上传成功,那么当前页面会显示上传文件的存储路径,像../../hackable/uploads/这样的格式,由此我们就可以得知上传后的文件的相对路径。

现在我们创建一个名叫webshell.php的文件,它的内容如下:

特别注意一点,action参数写入的值是我们通过测试上传一个图片后的提示信息中得来的存储路径。

实战演练

打开DVWA并登陆,将安全等级设置为中级,然后就可以开始了:

1. 首先,我们在DVWA的上传点上传webshell.php文件:

当你尝试上传后缀为.php的文件时,会发现上传失败,这是因为DVWA的中级限制对上传的文件后缀做了安全检查,只允许上传图片,所以在这里我们需要绕过这个限制上传webshell.php

2. 说道绕过上传限制的手段,你可能首先会想到直接将webshell.php改为webshell.jpg,这种直接更改后缀的办法确实能够绕过对后缀的检查,但是这样的上传是没有意义的,因为服务器只会根据后缀来识别文件,所以webshell.jpg就会被当做图片,当然写在webshell.php中的PHP代码是不会被执行的。正确的办法是使用Burpsuite;

3. 在上传选项中选中webshell.php文件

4. 打开Burpsuite的拦截开关,然后点击上传,数据包就会被拦截下来,如下图:

简单分析这个请求可以发现,请求是多部分的,并且每一部分都是对应的标题。尤其注意上图中第二个Content-Type,它包含了上传文件的内容,并且告诉服务器它是一个PHP文件

5. 将第二个Content-Type中的值修改为image/jpeg后再放行请求包,然后你就会看到上传成功的信息:

6.上传成功后,我们要使用上传的webshell.php来对服务器执行命令。返回到DVWA的File Inclusion选项;

7.使用page参数来包含webshell.php,截图如下:

8.我们可以看到webshell.php被成功地加载,并且会有一个文本框,在文本框中输入/sbin/ifconfig然后敲下回车键,你就可以看到出现了文本提示信息,这代表代码被成功执行,如下图:

原理剖析

首先,我们发现WEB应用程序会对上传的文件进行安全检查,当然,安全检查的手段是多种多样的,常见的是对后缀名的检查和Content-Type的类型检查,本小节就是后者的情况。要绕过这种保护,我们需要更改浏览器为文件设置的默认Content-Type值,如上,我们将application/x-php更改为image/jpeg,因为php内容是不被服务器所接受的,但是image确是可以的。

在webshell.php中,我们使用GET请求来获取CMD的值,然后将CMD的值放在PHP函数system()中执行,再将执行的结果以文本的形式反馈在页面中。

Webshell.php被上传后,我们即可使用LFI文件包含漏洞来包含webshell.php,然后通过它执行系统命令。

另请参阅

一旦我们能在服务器上执行代码,那么这个服务器就岌岌可危了,它已经是你的囊中之物了。

我们可以使用正向连接,从服务器反弹一个shell然后在客户端连接它,下面是一个简单的例子:

nc -lp 12345 -e /bin/bash

使用nc监听本地的12345端口然后等待客户端的连接,当连接成功后便会执行/bin/bash,接收输入,然后通过网络将输出信息反馈给连接者,我们可以尝试使用kali来连接到受害者的服务器,使用一下命令:

nc 192.168.56.10 12345

通过服务器开放的12345端口后,便可以在服务器上执行命令了,包括提权等。

--------------------------------------------------------------------

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190103B1AQLA00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券