freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

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

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

FreeBuf+小程序

FreeBuf+小程序

初识文件上传
2020-07-24 09:24:20

原理

在文件上传的功能处,如果服务端的脚本语言没有对上传的文件进行严格的验证和处理,导致恶意用户上传恶意脚本时,就有可能获取执行服务端命令的能力,这就是文件上传漏洞

那在服务器中,webshell怎么才能运行呢?

以LAMP环境为例,想要运行PHP脚本有两个要求:

1、路径。脚本要在网站目录中,如果不在目录中就无效

2、后缀名。能够使服务端解析的后缀名,Apache用来解析后缀并能够设置可解析的文件后缀

在代码中,PHP是怎么用来接收文件的呢

​ $_FILES['file']:文件

​ $_FILES['file'][]:文件名称

​ $_FILES['file']['temp_file']:临时文件

​ $_FILES['file']['type']:文件内容

​ $_FILES['file']['size']:文件大小

在将一句话木马上传后,我们又应该怎么连接呢

在一句话木马上传后,我们可以使用中国菜刀、蚁剑等webshell连接工具进行连接

要想连接上我们上传上去的一句话木马,首先就要找到文件上传后所存放的位置

举个栗子:

目标网址:http://192.168.11.221/upload_1.php

(1)一句话木马文件为404.php,上传后显示存放路径:

​ /var/www/html/uoloads/404.php

在连接时的地址就是:http://192.168.11.221/uploads/404.php

(2)若上传后显示存放路径为:

​ ./uploads/404.php

那在连接时的地址就是:http://192.168.11.221/admin/uploads/404.php

(3)又或者上传后显示存放路径为:

​ ../uploads/404.php

在连接时的地址又会变成:http://192.168.11.221/uploads/404.php

有时我们在将一句话木马上传上去之后,发现网站并没有将存放的路径显示给你,直接提示上传成功

这时我们就要结合功能来判断上传后的存储路径了

1、首先上传一张正常无害的图片

2、去首页找到图片获取到路径

3、再上传webshell,根据已有的路径进行分析

文件上传测试内容

其实应该说,如何判断上传点对上传文件进行那种过滤

首先我们要知道,文件上传测试,主要是测试三个方面:

1、内容

2、类型

3、后缀

我们使用burp抓包,来看看上传时抓包的内容

从抓包的内容我们来看,能看到上传文件的名称和文件类型,还能看到文件内容。

在了解测试时要测试的三个方面后,我们再来了解下文件上传的检测分类

文件上传检测分类

首先我们要知道相册、头像;视频、照片分享;附件上传;文件管理器都是文件上传漏洞的高危触发点

既然都是高危的触发点,那在网站开发者编写网站时,就会对这些高危的点进行一些防护,以防止恶意用户破坏网站。在做防护时就会有一下几种方法

##分类

直接上传

前端JS过滤

MIME-TYPE(文件类型)检测

文件头检测

基于黑名单的文件件拓展名检测

基于白名单的文件件拓展名检测

直接上传

如果网站开发者没有对上传处进行校验,任意用户可以上传任意文件的话,100%可能这个网站就会被getshell,最后GG

前端JS过滤

如果这时网站开发人员发现了上传处没做过滤,因为这个原因自己的网站被黑了无数次,最终对网站进行了修改。但是虽然对用户上传进行了校验,可是通过前端JS代码来完成的。

这时黑客又发现这个漏洞,非常嚣张的使用了3种方法进行绕过

1、禁用前端JS选项

使用火狐浏览器,打开web控制台设置禁用JavaScript

2、直接前端删除JS代码

F12打开开发者工具,删除前端过滤代码

3、使用burp抓包上传

抓取数据,将filename改为所允许的文件名

MIME-TYPE(文件类型)检测

这时网站开发人员抓狂了,气急败坏的又对文件的类型进行检测。但是对于黑客来说还是小菜一碟

继续使用burp抓包来修改文件的类型来绕过检测

文件头检测

在找到问题原因后,网站的开发人员发现问题所在,又将文件头进行了过滤,禁止PHP文件的上传。这依然没有难倒这位黑客,随手就生成了一张图片马,点击上传,getshell

制作一张图片马

首先准备一张图片和一个一句话木马文件

yjh.php中的一句话木马内容为

<?php @eval($_POST[yjh]);?>

打开DOS命令窗口写入copy tp.jpg/b+yjh.php tpyjh.jpg

就会新生成一个叫tpyjh.jpg的图片一句话木马

基于黑名单的文件拓展名检测

网站开发者的怒气值之线上升,一气之下,又使用黑名单禁止:.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2|pHp1|.Html|.Htm|.pHtml|.jsp|.jspa|.jspx|.jsw|.jsv|.jspf|.jtml|.jSp|.jSpx|.jSpa|.jSw|.jSv|.jSpf|.jHtml|.asp|.aspx|.asa|.asax|.ascx|.ashx|.asmx|.cer|.aSp|.aSpx|.aSa|.aSax|.aScx|.aShx|.aSmx|.cEr|.sWf|.swf 后缀文件进行上传!

心里还想着:这下你这个黑客没办法上传了吧!

黑客尝试了一些方法:

1、通过大小写进行绕过。如:1.php改为1.PHP

注意:这是最简单的方法,由于Windows系统不区分大小写所以无效,但是Linux系统区分大小写所以是有作用的。

但是黑客发现开发者想到这点,几乎过滤了所有有问题的文件名。

但对于这个黑客来说依然不是问题,虽然开发者几乎过滤了所有有问题的文件名,除了.htaccess,于是首先上传一个.htaccess内容如下的文件

SetHandler application/x-httpd-php

这样所有文件都会解析为php,然后再上传图片马,就可以进行解析 。

就这样,开发者和黑客之间就开始进行了较量:这边开发者使用黑名单疯狂禁止黑客的攻击,那边黑客则从容应对各种过滤

基于白名单的文件拓展名检测

在一番攻防对战后,开发者明显抵挡不了黑客的攻击,于是翻开武林秘籍《PHP是世界上最好的语言》,发现基于白名单的文件检测,秘籍上说:白名单的文件检测是只有名单中存在的文件后缀才可绕过,是现在网站中通用的,最为安全的一种方式,于是开发者学会此招再次与黑客交手

此时黑客发现,虽然白名单非常的安全,但也是有破绽所在:拦截漏洞是基于PHP5.2的 特性,只有在PHP5.2版本中存在此漏洞,对于此漏洞,可以使用00截断的方式来进行绕过

00截断

首先打开burp进行抓包

在filename处修改名字为1.php.jpg。uplloadimg处添加1. php注意一定要加空格,因为我们要修改的就是这里

选择Hex选项,在里面把刚才的空格进行修改,空格为%20,这里要修改为00

放出所有数据包,我们会发现一句话已经上传上去了

# web安全 # 文件上传
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者