webShell与WebShell管理工具
什么是WebShell
WebShell,简称网页后门。简单的来说它是运行在Web应用之上的远程控制程序。
WebShell其实就是一张网页, 由PHP、 JSP、 ASP.I ASP . NET等这类web应用程序语言开发,但WebShell并不具备常见网页的功能,例如登录、注册、信息展示等功能,一般会具备文件管理、端口扫描、提权、获取系统信息等功能。拥有较完整功能的WebShell, 我们一般称为大马。功能简易的Webshel1称为小马。除此之外还存在一句话木马、 菜刀马、脱库马等等的名词,是对于WebShell功能或者特性的简称。
大马界面
WebShell之php一句话木马解读
<?php @eval($_POST[x]);
错误控制运算符,当将@放置在一个PHP表达式之前,该表达式可能产生的任何错误信息都被忽略掉。
eval( )将字符串当作PHP代码去执行。例如eval( ’ phpinfo();')其中phpinfo(); 会被当做PHP代码去执行。
获取POST请求参数中x的值。例如POST请求中传递x=phpinfo(); 那么$_ POST[x] 就等同于phpinfo();会被当做php代码去执行。
当我们对该WebShell发送一个POST请求, 参数为 x=phpinfo();
我们可以通过该webShell,传递任意PHP代码,让其去执行,从而达到任意代码执行。
WebShell之常用的一句话木马
ASP:<%eval request(“x”)%>
ASP.NET:<%@ Page Language="Jscript "%> <%eval (Request . Item[“x”], “unsafe”);%>
PHP:<?php @eval($_ POST["x"]);?>
WebShell管理工具
中国蚁剑是一款开源的跨平台网站管理工具, 也是一款WebShell管理工具, 它主要面向于合法授权的渗透测试安全人员以及进行常规操作的网站管理员。中国蚁剑的核心代码模板均改自伟大的中国菜刀。
文件上传漏洞概述
随处可见的文件上传功能
大部分站点都具有文件上传功能,例如头像更改,文章编辑,附件上传等等。
文件上传功能
文件上传功能的作用是将本地文件上传至服务器上进行保存。
什么是文件上传漏洞
文件上传漏洞是指文件上传功能没有对上传的文件做合理严谨的过滤,导致用户可以利用此功能,上传能被服务端解析执行的文件,并通过此文件获得执行服务端命令的能力。
文件上传功能验证流程
●客户端JavaScript验证
●服务端MIME类型验证
●服务端文件扩展名验证
●黑名单
●白名单
●服务器文件内容验证
●文件头(文件幻数)
●文件加载检测
服务端MIME类型验证
MIME类型是描述消息内容类型的因特网标准。
服务器文件内容验证-文件头
图片格式往往不是根据文件后缀名去做判断的。文件头是不同的。文件头又称文件幻数。
常见文件幻数
●JPG:FFD8FFE000104A464946
●GIF: 47 4946 38 39 61 (GIF89a)
●PNG:89 50 4E 47
服务端文件扩展名验证-黑名单绕过
后缀名大小写绕过
服务端没有将后缀名转换为统一格式进行比对 导致可以上传后缀为pHp的文件,又因为Windows操作系统大小写不敏感,所以.pHp扔回被当成PHP文件解析。
重写绕过
服务端将黑名单的后缀名替换为空,但仅进行一次。上传.phphp后缀, 替换php一次为空,则后缀为.php。
.htaccess绕过
在apache里,这个文件作为- -个配置文件,可以用来控制所在目录的访问权限以及解析设置。即是,可以通过设置可以将该目录下的所有文件作为php文件来解析
.htaccess可以写入apache配置信息,改变当前目录以及子目录的Apache配置信息。
配置上允许.htaccess生效
●Apache开启rewrite模块
●apache配置文件为AllowOverride Al(默认为None)
利用操作系统特性-Windows
利用window对于文件和文件名的限制,以下字符放在结尾时,不符合操作系统的命名规范,在最后生成文件时,字符会被自动去除。
%00截断
%00是chr(0),它不是空格,是NULL,空字符。
当程序在输出含有chr(0)变量时,chr(0)后面的数据会被停止,换句话说,就是误把它当做结束符,后面的数据直接忽略,这就导致漏洞产生的原因。
在文件上传中,利用%00截断,在文件扩展名验证时,是取文件的扩展名来做验证,但是最后文件保存在本地时,%00会截断文件名,只保存%00之前的内容。
利用服务器解析漏洞
解析漏洞,是指中间件(Apache、nginx、 iis等)在解析文件时出现了漏洞,从而黑客可以利用该漏洞实现非法文件的解析
Apache解析漏洞
apache解析文件规则是从右到左。例如shel.php.x.cc, apache会先识别ccc,ccc不被识别,则识别gix,以此类推,最后会被识别为php来运行。
IIS6.0解析漏洞
目录解析
目录名为.asp、.asa、 .cer, 则目录下的所有文件都会被作为ASP解析。
url/test.asp/shell.jpg会被当作asp脚本运行。
文件解析
文件名中分号后不被解析,例如.asp;、.asa;、 .cer;。
url/test.asp;shell.jpg会被当作asp脚本运行。
文件类型解析
.asa, .cer, .cdx都会被作为asp文件执行。
url/shell.asa会被作为asp文件执行。
Nginx解析漏洞
PHP + nginx默认是以cgi的方式去运行,当用户配置不当,会导致任意文件被当作php去解析。
利用条件
●以FastCGl运行
●cgi.fix_ pathinfo=1(全版本PHP默认为开启)
例如如果满足上述条件,当你访问url/shell.jpg/shell.php时, shell.jpg会被当作php去执行。
Nginx文件名逻辑漏洞(CVE-2013-4547)
影响版本: Nginx 0.8.41 ~ 1.4.3/ 1.5.0~ 1.5.7
利用过程:
1…上传一 个’shell.jpg‘文件,注意最后为空格
2.访问’url/shelljpg[0x20][0x00].php’
(两个中括号中的数字是用Burp在Hex界面中更改)
文件上传漏洞防御
文件上传漏洞防御
●服务端文件扩展名使用白名单检测+文件名重命名
●对文件内容进行检测
●对中间件做安全的配置
●……