本文所有渗透都是在靶机上进行的,仅供学习网络安全使用,请勿在未经允许的情况下攻击其他网站。
详细法律法规请见《中华人民共和国网络安全法》
http://www.cac.gov.cn/2016-11/07/c_1119867116.htm
在 Web 中上传东西是合理的,如果没有做合理的过滤或检测而导致用户绕过了我们的 Web 应用上传了一些程序文件,这个就是漏洞。
文件上传漏洞原理
- 文件上传(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 进行配置。
然后选择 Dann Vulnerable Web Application(该死的脆弱的Web应用程序)。
低安全级别的文件上传漏洞
目标靶机 OWASP 提供了三种安全模式。
我们先用 low 进行尝试,选择 Upload。
随便选择一个图片文件,上传,显示成功。
但上传一个 php 文件也能成功上传。
让我们来看看它提供的源码,点击页面右下角的 View Sourse,就会发现这段代码除了设置了路径啥也没做。
中安全级别的文件上传漏洞
现在切换到中级,再次尝试上传 .php 文件,发现已经上传不了了。
再次看看中安全级别的源码,可以发现代码中进行了 MIME 类型判断,不是规定的类型和大小就无法上传。
那我们把类型改成 “image/jpeg” 不就行了?这时我们就要用到 kali 里面的 BurpSuite。
原理就是 .php 的 content-type 是 application/octet-stream,直接上传肯定是不行的。我们可以使用一个代理/拦截工具,先把它拦截下来,然后对它的 content-type 改成 “image/jpeg” 然后再发送给 DVWA 就可以成功上传了。注意:这里需要使浏览器处于代理模式,IP 地址应该和靶机的 IP 地址一样;并打开 BurpSuite 的代理。
再次上传
在 kali 中看结果
上传成功
高安全级别的文件上传漏洞
可以提前给大家剧透一下,解决中级别的方法放到高级别完全没用,所以我们这次先来看看高安全级别下的源码。
这一次它对文件的后缀进行了限制。这意味着我们修改类型完全没用了。因为上传的文件的后缀还是 .php。那你可能会想到,我如果用 BurpSuite 拦截的时候,把文件后缀改成 shell2.php.jpg 不就行了?再预告一下,这种方式只能成功一部分,因为这种方式虽然也能用菜刀或蚁剑获取 URL,但这种获取是只读的,不能做相应的增删改查。
所以我们需要用到文件包含木马的渗透方式,我们上传的还是一张图片,不过这一次我们需要将我们的代码嵌入图片里面,这一次我们要用到的工具是 edjpgcom 。把下列代码传入一个 jpg 文件中。
<?fputs(fopen("shell20.php","w"),'<?php eval($_POST[lion]);?>')?> //POST里面的值是一个密码,可以自己修改
然后上传这张图片,显示的肯定是上传成功,因为我们本来上传的就是一张图片。
值得注意的是,单纯的上传这个图片是没用用的,是不能形成木马的,我们必修执行这段代码才可以。
在 File Inclusion 中进行操作
结果是这样就代表执行成功了。
在 Xshell 中检查一下有没有这个文件
shell200.php在这时才真正的存在,接着我们可以用菜刀或者蚁剑进行操作,这里我使用蚁剑
这时候我们就可以对这个网站进行各种操作了,比如文件管理,可以进行增删改查,其他功能可以自行摸索。
总结
以DVWA提供的网站为例