经过前面多篇文章的全面介绍想必大家对如何检测Webshell都有了一定的认识,今天我们一起探讨一下如何从网络流量中去实际的检测和发现Webshell的。
我们知道“大马”的目的就是为了提权以及控制。常见的“大马”一般都是功能较多结构也较为复杂的,“单一文件实现众多功能”是“大马”的设计目的之一,一方面大在功能,另一方面大在体积。在形形色色的“大马”中不难总结其中典型的功能。
当然通常讲的“大马”的功能远不止,但我们将讨论在流量中如何发现这三种功能被攻击者操作进而发现Webshell的。
让我们来进行一个简单的提权工具的上传的操作,通过Webshell我们可以这样做:
在文件成功发送到服务器上之后我们来看一下在服务器端我们从网络流量中抓取的记录:
紧接着我们从流量中看一下服务器返回的包的内容:
通过抓取实际的网络流量来获取一对Payload他们分别出现在访问请求中和服务器返回的数据中:
Request Payload:POST|upfiles|pr.exe
Return Payload:200
通过上述Payload我们就可以大概总结出以下结论:
该服务器可能已经被入侵并且被成功上传Webshell后门,攻击者正在尝试利用Microsoft Windows RPCSS服务隔离本地权限提升漏洞(MS09-012)漏洞进行提权,也意味着该服务器可能已经有很长未安装过系统安全补丁。
再来看一个真实的操作MySQL数据的一个例子:
同样的在服务器上通过抓包工具获取的流量信息如下:
服务器返回的流量信息也一并拿出来:
可以看到在一个连接数据库的操作过程中流量中也产生了众多的Payload,简单的将POST数据进行URL解码可以看的更明显一些:
auth[driver]=server&auth[server]=localhost&auth[username]=root&auth[password]=&auth[db]=mysql&auth[permanent]=1
再来分析一下Payload对:
Request Payload:POST|localhost|root|mysql
Return Payload:localhost|root|mysql|200|*.sql|user
通过上述成对的Payload可以分析出以下结论:
攻击者正在试图访问MySQL数据库并且访问了mysql库中的表信息攻击者可以将该mysql库中的表到导出.sql文件
最后我们来看一个命令执行的操作过程:
检查服务器端获取到的流量数据:
检查服务器返回的流量可以得到如下数据:
在这个案例中攻击者向服务器发送了一条查看当前权限的命令,服务器在获得指令后运行并将结果通过响应主题反馈给攻击者。我们来分析一下Payload
Request Payload:POST|act=cmd|cmd=who|precmd Return Payload:200|net authority\|system
通过上述总结的Payload可以得出以下结论:
服务器已经被入侵,攻击者试图向服务器发送查询中间件运行时所用操作系统权限并获得了满意的结果,接下来这台服务器的悲惨的结局可想而知。
相对于一句话Webshell管理工具而言“大马”在访问过程中的Payload相对来说比较简单也更显而易见,在检测的时候也相对容易一些,但是凡事没有绝对,经过加密和预制命令的Webshell来讲也完全可以逃脱上述Payload检测过程。
相关文章《Webshell系列(5)- webshell之“看见”的能力分析》
[via@守望者实验室]