webshell

webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。

黑客在入侵了一个网站后,通常会将asp或php后门文件与网站服务器WEB目录下正常的网页文件混在一起,然后就可以使用浏览器来访问asp或者php后门,得到一个命令执行环境,以达到控制网站服务器的目的。

顾名思义,“web”的含义是显然需要服务器开放web服务,“shell”的含义是取得对服务器某种程度上操作权限。webshell常常被称为入侵者通过网站端口对网站服务器的某种程度上操作的权限。

由于webshell其大多是以动态脚本的形式出现,也有人称之为网站的后门工具。

作用

一方面,webshell被站长常常用于网站管理、服务器管理等等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。

另一方面,被入侵者利用,从而达到控制网站服务器的目的。

这些网页脚本常称为WEB脚本木马,比较流行的asp或php木马,也有基于.NET的脚本木马与JSP脚本木马。

国内常用的WebShell有海阳ASP木马,Phpspy,c99shell等。

隐蔽性:

WebShell后门具有隐蔽性,一般有隐藏在正常文件中并修改文件时间达到隐蔽的,还有利用服务器漏洞进行隐藏,如 “…” 目录就可以达到,站长从FTP中找到的是含有“..”的文件夹,而且没有权限删除,还有一些隐藏的WEBSHELL,可以隐藏于正常文件带参数运行脚本后门。

webshell可以穿越服务器防火墙,由于与被控制的服务器或远程过80端口传递的,因此不会被防火墙拦截。

并且使用webshell一般不会在系统日志中留下记录,只会在网站的web日志中留下一些数据提交记录,没有经验的管理员是很难看出入侵痕迹的。

攻击方式

首先通过系统前台上传WebShell脚本到网站服务器,此时,网站服务器会向客户端返回上传文件的整体URL信息;然后通过URL对这个脚本进行访问,使其可以执行;最终导致攻击者能够在网站的任意目录中上传WebShell,从而获取管理员权限。

2)攻击者利用管理员密码登录进入后台系统,并借助后台管理工具向配置文件写入WebShell,允许任意脚本文件上传。

3)通过数据库的备份和恢复功能和获取WebShell。在数据库备份时,可以将备份文件的扩展名更改为.asp类型。

4)系统中其他站点遭受攻击,或者搭载在Web服务器上的Ftp服务器遭受攻击后,被注入了WebShell,这些都会导致整个网站系统被感染。

5)攻击者利用Web服务器漏洞直接对其进行攻击,从而获得控制权限。

WebShell的感染过程描述:

1)攻击者首先通过SQL注入、跨站脚本攻击等方式得到上传权限,然后将WebShell上传至服务器。

2)通过WebShell完成对服务器的控制,实现植入僵尸木马、篡改网页以及获取敏感信息等恶意功能。

3)植入攻击木马,使其作为攻击“肉鸡”对整个网站进行感染。

Webshell上传绕过方法

绕过前台脚本检测扩展名上传Webshell

当用户在客户端上传文件的时候,客户端与服务器没有进行任何的信息交互,判断上传文件的类型是前台脚本文件来判断。

白名单方式检测:允许jpg,png等文件上传,如果要上传php格式文件,可以后面加一个.jpg后缀,提交后用burp进行抓包拦截,把jpg后缀删除。

ps: 所以还是要严格的后端校验

利用00截断上传Webshell:利用PHP函数

1、include和require一般在网站内部读取文件

2、file_get_contents一般用于打开一个url或一个文件

3、file_exists判断文件是否存在

4、所有url中参数可以用%00控制

5、截断–本地文件包含

截断类型:php%00截断

截断条件:php版本小于5.3.4

php的magic_quotes_gpc为off状态

(1)当打开magic_quotes_gpc时,所有单引号、双引号。反斜线和null字符(%00)都会被加上一个反斜线进行转义

(2)还有很多函数有类似的作用:addslashes()、mysql_escape_string()、mysql_real_escape_string()等

(3)当把magic_quotes_gpc关闭,PHP版本依然是5.3.10时,依然不能截断。所以证明,php版本和gpc两个条件都必须满足,才能截断。

(4)除了上面的,还有file_get_contents也能配合php%00利用。

(5)原理:利用程序员在写程序时对文件的上传路径过滤不严格,产生0x00上传截断漏洞,假设上传路径为:【http://xx.xx.xx.xx/upfiles/lubr.php.jpg】,通过抓包截断将【lubr.php】后面的【.】换成【0x00】(也就是burp抓包,利用十六进制,【.】的十六进制是2e,所以把2e替换为00,点击forword就可以上传了)。在上传的时候,当文件读到【0x00】时,会认为文件已经结束,从而将【lubr.php.jpg】的内容写入到【lubr.php】中,从而达到攻击目的。

构造图片马,绕过文件内容检测上传Webshell

1、Windows捆绑技术:copy /b 主文件+追加文件 新生成文件copy /b 7.jpg + 1.aspx c.jpg(将1.aspx的内容追加到7.jpg的文件中,并生成一个新的文件叫c.jpg,上传时候后缀名【.jpg】改为【.jpg.aspx】

2、GetlmageSize函数

该函数是用来检测文件是否是有效的图片文件(内容特征),而非检测文件的扩展名

ps: 这种文件合并的策略还是比较恶心的。

绕过服务器扩展名检测上传

1、IIS6.0解析漏洞

(1)在网站下建立文件夹的名字为.asp、.asa的文件夹,其目录内的任何扩展名的文件都被IIS当做asp文件来执行。例如创建目录vidun.asp,那么/vidun.asp/1.jpg将当做asp文件来执行

(2)网站上传图片的时候,将网页木马文件的名字改成“.asp;.jpg”,也同样会被IIS当做asp文件来解释执行。例如上传一个图片文件,名字叫“vidun,asp;.jpg”,该文件可以被当做ASP文件解析并执行。

2、apache解析漏洞

(1)不管文件后缀名是什么,只要是 .php.* 为结尾,就会被apache服务器解析成php文件。

(2)mime.type配置文件定义了apache能够解析那些文件的类型。

(3)当apache遇到xxx.php.rar或者xxx.php.111这些默认没有在mime.types文件定义的都会解析成php文件。

(4)原理:当浏览器将文件提交到服务端的时候,服务端会根据设定的黑白名单对浏览器提交上来的文件扩展名进行检测,如果上传的文件扩展名不符合白名单限制,则不允许上传,否则上传成功。将一句话木马的文件名【lubr.php】,改成【lubr.php.abc】。首先,服务器验证文件扩展名的时候,验证的是【.abc】(因为他是从文件名右边往左边解析的),只要该扩展名满足服务器端白名单规则,即可上传。另外,当在浏览器端访问该文件时,apache如果解析不了【.abc】扩展名,会向前寻找可解析的扩展名,即【.php】。一句话木马可以被解析,即可通过中国菜刀连接。

webshell 的检测

Webshell的检测的三种手段

从安全防护能力看,检测是第一位的能力,webshell的检测主要有以下几种方式:

(1)基于流量的webshell检测引擎

方便部署,通过流量镜像直接分析原始信息。基于payload的行为分析,不仅对已知webshell进行检测,还能识别出未知的、伪装性强的 webshell。对webshell的访问特征(IP/UA/Cookie)、payload特征、path特征、时间特征等进行关联分析,以时间为索引,还原攻击事件。

(2)基于文件的webshell分析引擎

检测是否包含webshell特征,例如常用的各种函数。检测是否加密(混淆处理)来判断是否为webshell文件hash检测,创建webshell 样本hashing库,进行对比分析可疑文件。对文件的创建时间、修改时间、文件权限等进行检测,以确认是否为webshell沙箱技术,根据动态语言沙 箱运行时的行为特征进行判断

(3)基于日志的webshell分析引擎

支持常见的多种日志格式。对网站的访问行为进行建模,可有效识别webshell的上传等行为对日志进行综合分析,回溯整个攻击过程。

三种检测方式,基于文件的检测,很多时候获取样本的部署成本比较高,同时仅仅靠样本无法看到整个攻击过程。基于日志的有些行为信息在日志中看不到,总体来说还是基于“流量”的看到的信息最多,也能更充分的还原整个攻击过程。

安全防范

从根本上解决动态网页脚本的安全问题,要做到防注入、防爆库、防COOKIES欺骗、防跨站攻击(xss)等等,务必配置好服务器FSO权限。

最小的权限=最大的安全。

防范webshell的最有效方法就是:可写目录不给执行权限,有执行权限的目录不给写权限

防范方法:

1、建议用户通过ftp来上传、维护网页,尽量不安装asp的上传程序。

2、对asp上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。

3、asp程序管理员的用户名和密码要有一定复杂性,不能过于简单,还要注意定期更换。

4、到正规网站下载程序,下载后要对数据库名称和存放路径进行修改,数据库名称要有一定复杂性。

5、要尽量保持程序是最新版本。

6、不要在网页上加注后台管理程序登陆页面的链接。

7、为防止程序有未知漏洞,可以在维护后删除后台管理程序的登陆页面,下次维护时再通过上传即可。

8、要时常备份数据库等重要文件。

9、日常要多维护,并注意空间中是否有来历不明的asp文件。

10、尽量关闭网站搜索功能,利用外部搜索工具,以防爆出数据。

11、利用白名单上传文件,不在白名单内的一律禁止上传,上传目录权限遵循最小权限原则。

拓展阅读

web 安全系列

参考资料

WEBSHELL 攻击

【服务器防护】WEB防护 - WEBSHELL攻击探测【转载】

PHP Webshell那些事——攻击篇

关于WebShell 攻击详解

wenshell 攻击

【事件分析】NO.9 潘多拉魔盒般的WEBSHELL上传