Webshell文件上传漏洞和文件上传攻击相关梳理
Webshell简介
webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。
webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。
文件上传漏洞
入侵者在针对web进行攻击时,想要取得webshell,最直接的方式就是将web木马插入服务器端进行成功
解析,针对上传点就是利用PHP/JSP木马,并且要求木马的后缀为.php .jsp进行保存。因此,上传木马
的过程中就是在web系统中新增一个页面,如果能成功上传,就可以用菜刀、Altman等webshell工具进行连接,成功拿下webshell。
上传文件攻击思路
如图所示,整个过程可分为三大步骤:
1. 客户端上传功能:
(1)用户提交上传表单,利用HTML格式,实现上传格式的编制,在封装到HTTP包中,开始传
输。
2. 中间件上传功能(中间件主要有三个流程):
(1)接收用户提交的表单;
(2)将表单内容存储为临时文件;
(3)根据安全规范,将临时文件保存为正式文件。
3. 服务器存储
(1)服务器会存储正式文件,并将其存放在中间件规定的真实路径中;
(2)上面给出了完整的上传业务流程,下面通过具体的流程来分析其中的安全隐患。
Content-Type 标头告诉客户端实际返回的内容的内容类型。
Content-Type: text/html; charset=utf-8
Content-Type: multipart/form-data; boundary=something
相关链接:
HTTP content-type 对照表
.htaccess攻击
上传攻击的条件
1.目标网站具有上传功能
上传攻击的前提是:目标网站具有上传功能,可以上传文件,并且上传文件,并且文件上传到服务
器能被存储。
2.上传的目标文件能够被Web服务器解析执行
由于上传文件需要依靠中间件解析执行,因此上传文件后缀应为可执行格式。在tomcat+jsp环境
下,要求上传的web木马采用.jsp后缀名(或者能有以jspx方式解析的后缀名),并且存放上传文件的
目录要有执行脚本的权限,以上两种缺一不可。
3.知道文件上传到服务器后的存放路径和文件名称
许多web应用都会修改上传文件的文件名称,这时就需要结合其他漏洞获取这些信息,如果不知道上传的存放路径和文件名称,即使上传成功也无法访问,因此,如果上传成功但不知道真实路径,那么攻击没有任何意义。
4.目标文件可被用户访问
如果文件上传后,却不能通过Web访问,或者真实路径无法获取,木马这无法攻击者打开,那么就
不能成功实施攻击。
上传检测绕过技术
1.客户端校验绕过:
(1)直接修改js代码或者使用抓包的方法修改请求内容绕过,可以先上传一个gif木马,通过抓包修改
为 jsp/php/asp,只用这种方法来检测是肯定可以绕过的。
(2)更简单的方法是直接关掉js
2.服务端绕过MIME 检测
校验请求头content-type字段绕过,通过修改Http头的content-type即可绕过
POST /upload.do HTTP/1.1
TE: deflate,gzip;q=0.3
Connection: TE, close
Host: localhost
Content-Type: multipart/form-data; boundary=xYzZY
Content-Length:155
--xYzZY
Content-Disposition: form-data; name="userfile"; filename="shell.jsp"
Content-Type: image/gif (原为Content-Type: text/plain)
<% system($request.getParm['command']);%>
--xYzZY-
3.文件幻数(文件头)检测绕过
在木马内容的前面插入对应的文件头内容,例如:GIF89a ,更保险的方法是在可上传的文件中插
入木马代码,然后修改后缀
4.文件加载检测
通过例如加载文件进行图像渲染的方式来测试,这个时候就一般需要在正常的文件中插入木马代码
了,例如图像,那么插入的代码一般会放在图像的注释区,因此不会影响图像正常渲染绕过这种检测,
此时可以使用工具(称为插马器)来进行插入,例如edjpgcom,或者直接用copy命令来合成也可以,当然这种检测不一定能够完全绕过。
5.后缀黑名单检测
查找黑名单的漏网之鱼,例如:
大小写:如果检测的时候不忽略大小写,那么可以改变后缀名的大小写绕过
扩展名:列表中如果忽略了某些后缀,能被解析的文件扩展名列表如下
jsp jspx jspf
asp asa cer aspx
php php php3 php4 pht
exe exee
6.后缀白名单检测
白名单检测还是会比黑名单强一点,常见的绕过方法有%00截断,还有服务器的解析漏洞
%00截断漏洞:如果存在这类漏洞,那么后缀名的检测都可以绕过,可以如下命名一个上传文件
test.jsp%00.jpg
解析漏洞:这类漏洞是本身服务器的中间件产生的,apache,nginx都被爆出过存在解析漏洞。
Webshell 管理工具使用示例
工具解压后目录:
在文件目录调出cmd命令行:
cmd命令行运行java -jar Cknife.jar 命令启动工具:
下面是我自己测试的一个系统,系统具有上传功能,可以上传文件,并且文件上传到服务器能被存储,我上传了一个jsp脚本文件至Tomcat下部署的项目的一个目录下面。
并且这个上传的文件是知道真实路径的,可以被访问。
在渗透测试工具页面右键添加地址,输入“口令”,再在配置项里面配置脚本的一些变量:
添加之后,双击:
连接成功,触发文件管理,如图:
这个时候只要我们拥有这个服务器的相关权限,我们就可以对此服务器的文件进行上传、下载、删除、查询操作了。
也可以获取服务器的虚拟终端:
注:此软件打开时杀毒软件可能会报是错误文件的,如果继续使用需要通过关闭杀毒软件,并且还需要关闭windows的实时保护。
文件上传漏洞修复方案
1. 文件扩展名服务端白名单校验;
2. 文件内容服务端校验;
3. 上传文件重命名;
4. 隐藏上传文件路径,以流方式输出。
上一篇: 爆笑的军旅生活笑话大全
下一篇: 军营内外的小笑话