标签归档:webshell

WebshellAutoCheck 1.0 Webshell自动检查工具 for windows

WebshellAutoCheck 1.0 Webshell自动检查工具 for windows

主要功能说明:

1.webshell检查,支持任意后缀的脚本检查,包括asp/php/jsp/***等;

2.敏感文件检查, 如bak/sql/log/***文件;

3.白名单功能,排除误报,报告处理的最大问题;

4.自动定时扫描,支持window定时任务和服务形式启动;

5.邮件自动通知,扫描完成自动邮件提醒;

使用说明:

1.文件说明:

WebshellAutoCheck.exe 主程序

config.xml 配置文件

2.主要参数:

D:\>WebshellAutoCheck /?

WebshellAutoCheck 1.0 By:Neeao

http://neeao.com

WebshellAutoCheck /install      Install services.

WebshellAutoCheck /uninstall    Uninstall services

WebshellAutoCheck /start        Start services

WebshellAutoCheck /stop Stop services

WebshellAutoCheck /scan Only scan once.

/install 安装为服务形式,默认为自启动服务.

/uninstall 卸载服务(有个小bug,卸载完毕不能立即从服务管理里消失,等会就好了,不影响使用)

/start 启动服务自动检查(启动前请跟进config.xml文件中说明进行相关配置再启动)

/stop 关闭服务

/scan 仅仅进行扫描

3.config.xml文件说明:

<?xml version="1.0" encoding="gb2312"?>
<root>
  <server>
	<!--scan_dirs节点需要扫描的目录,多个目录使用;分割-->
	<scan_dirs>d:\wwwroot</scan_dirs>
	<!-- speed,数值越大扫描越快,占用资源也越多 -->
    <speed>8</speed>
	<!--cycle节点自动扫描间隔,单位秒,修改后需重启服务-->
	<cycle>60</cycle>
  </server>
  <!-- 自动邮件通知 发送send=1,不发留空-->
  <mail is_send="1">
	<username>testmail</username><!--邮件发送帐户名-->
	<password>testmail</password><!--邮件发送密码-->
	<stmp>smtp.neeao.com</stmp><!--邮件服务器地址-->
	<sender_name>Check</sender_name><!--邮件发送者名称-->
	<sender_address>neeao@neeao.com</sender_address><!--邮件发送者邮箱地址-->
	<receiver_name>Neeao</receiver_name><!--邮件接收者名称,多个接收者名称用;分割-->
	<receiver_address>neeao@neeao.com</receiver_address><!--邮件接收者邮箱地址,多个用;分割,顺序和接收者对应-->
	<subject>WebShell检查通知邮件</subject><!--邮件通知的标题-->
  </mail>
<!-- 扫描规则,lang节点为标记扫描规则名称,filetype为扫描的文件类型,支持windows通配符,多个用;分割-->
<!-- 特殊文件扫描,主要通过is_file节点值区分,为1则是仅扫描文件名 -->
<!-- webshell扫描,is_file为空-->
<!-- 扫描规则设置,关键词采用tr1正则表达式,regexp为匹配规则, exclude为排除规则,desc为对此条规则的通知描述-->
  <language>
    <list lang="bak" filetype="*bak*" is_file="1"/>
	<list lang="asp" filetype="*.asp;*.asa;*.cer" is_file="">
      <keyword regexp="(WScript\.Shell|72C24DD5-D70A-438B-8A42-98424B88AFB8|F935DC22-1CF0-11D0-ADB9-00C04FD58A0B)+" exclude="1" desc="发现WScript.Shell组件"/>
      <keyword regexp="(Wscript\.Network|093FF999-1EA0-4079-9525-9614C3504B74)+" exclude="Wscript.Network" desc="发现Wscript.Network组件调用"/>
      <keyword regexp="(Shell\.Application|13709620-C279-11CE-A49E-444553540000)+" exclude="" desc="发现Shell.Application组件"/>
      <keyword regexp="(Scripting\.FileSystemObject|0D43FE01-F093-11CF-8940-00A0C9054228)+" exclude="" desc="发现FSO组件调用"/>
      <keyword regexp="(adodb\.stream|00000566-0000-0010-8000-00AA006D2EA4)+" exclude="" desc="发现adodb.stream组件调用"/>
      <keyword regexp="(MSXML2.XMLHTTP|Microsoft.XmlHttp|88D969C5-F192-11D4-A65F-0040963251E5|88D969EA-F192-11D4-A65F-0040963251E5)+" exclude="" desc="发现Microsoft.XmlHttp组件调用"/>
      <keyword regexp="LANGUAGE\s*=\s*(vbscript|jscript|javascript).encode" exclude="" desc="发现脚本加密函数encode1"/>
      <keyword regexp="[^\.](Eval|Execute|ExecuteGlobal)\s*[\(]?\s*(request|session)" exclude="" desc="发现Eval|Execute函数书写的一句话webshell."/>
    </list>
    <list lang="jsp" filetype="*.jsp" is_file="">
      <keyword regexp="Runtime\.getRuntime\(\)\.exec" exclude="" desc="发现jsp命令执行方法"/>
      <keyword regexp="java\.io\.FileOutputStream\(application\.getRealPath\(" exclude="" desc="发现jsp一句话webshell"/>
    </list>
    <list lang="aspx" filetype="*.aspx" is_file="">
      <keyword regexp="Environment\.(OSVersion|MachineName|GetEnvironmentVariables)" exclude="" desc="发现Environment对象调用"/>
    </list>
  </language>
  <!-- 白名单设置,添加白名单:在white中添加新的list节点,如下,path节点为白名单路径,md5借点为文件的md5值-->
  <white>
   <list path="d:\wwwroot\2006.asp" md5="a6c21f051e354846b3080e9c0549b89d"/>
  </white>
</root>

4.debug模式

在程序当前目录创建一个debug.log的空文件,重启服务,debug信息将写入此文件。

注意使用完删除此文件。

附件:webshellautocheck.20121124.rar(211323 Byte)

TR1正则表达式:http://msdn.microsoft.com/zh-cn/library/bb982727.aspx

一个PHP webshell检查shell脚本

昨天晚上电脑里翻东西翻出来的,2008/7/17写的。

  1. #!/bin/sh 
  2. #************************************************************ 
  3. #WebShell Check Shell for PHP 
  4. #By:Neeao 
  5. #2008/7/17 v1.0 beta  
  6. #************************************************************ 
  7. HOSTIP=`ifconfig eth0 |grep 'inet addr'|awk '{print $2;}'|cut -d: -f2` 
  8. #STR=`expr index $HOSTIP "192.168"` 
  9. #if [ ${STR} -eq 1 ]  
  10. #        then 
  11. #                HOSTIP=`ifconfig eth1 |grep 'inet addr'|awk '{print $2;}'|cut -d: -f2` 
  12. #fi 
  13. echo $HOSTIP 
  14. LogFile=/tmp/$HOSTIP.log 
  15. rm -rf $LogFile 
  16. date +%Y-%m-%d/%H:%M >> $LogFile  
  17. echo -e "\n" >> $LogFile  
  18. echo " ---------------------------------------------------------------------------------------------------" >> $LogFile  
  19. echo "|Executive Order function:exec(\|system(\|passthru(\|shell_exec(\|popen(\|proc_open(\|pcntl_exec(  |" >> $LogFile  
  20. echo " ---------------------------------------------------------------------------------------------------" >> $LogFile  
  21. echo -e "\n" >> $LogFile 
  22. grep -in 'exec(\|system(\|passthru(\|shell_exec(\|popen(\|proc_open(\|pcntl_exec(' -R * | grep -iv '_exec' >> $LogFile 
  23. echo -e "\n" >> $LogFile 
  24. echo " -------------------------------------------------------------------------------------------" >> $LogFile 
  25. echo "|Deformation of the back door coding:eval(\|base64_decode(\|gzinflate(\|gzuncompress(\|chr( |" >> $LogFile 
  26. echo " --------------------------------------------------------------------------------------------" >> $LogFile 
  27. echo -e "\n" >> $LogFile 
  28. grep -in "eval(\|base64_decode(\|gzinflate(\|gzuncompress(\|chr(" -R * >> $LogFile 
  29. echo -e "\n" >> $LogFile 
  30. echo " -----------------------------------------------------------------------------------------------------------------" >> $LogFile   
  31. echo "|File operations function:dl(\|fopen(\|readfile(\|file(\|file_get_contents(\|opendir(\|chdir(\|fwrite(\|unlink(\|glob(|" >> $LogFile   
  32. echo " -----------------------------------------------------------------------------------------------------------------" >> $LogFile   
  33. echo -e "\n" >> $LogFile 
  34. grep -in "dl(\|fopen(\|readfile(\|file(\|file_get_contents(\|opendir(\|chdir(\|fwrite(\|unlink(\|glob(" -R * >> $LogFile 
  35. echo -e "\n" >> $LogFile 
  36. echo "----------------------------------" >> $LogFile 
  37. echo "|Files inculde bug:include|require|" >> $LogFile 
  38. echo "----------------------------------" >> $LogFile 
  39. echo -e "\n" >> $LogFile 
  40. grep -in "include.*\$.\|require.*\$." -R * >> $LogFile 
  41. echo -e "\n" >> $LogFile 
  42. echo "---------------------------------------------------------" >> $LogFile 
  43. echo "|Risk code Keyword:SQLyog\|phpAdsNew\|huansuan\|fckeditor|" >> $LogFile 
  44. echo "--------------------------------------------------------" >> $LogFile 
  45. echo -e "\n" >> $LogFile 
  46. grep -in "SQLyog\|phpAdsNew\|huansuan\|fckeditor" -R * >> $LogFile 
  47. cd /tmp 
  48. tar -zcvf $HOSTIP.tar.gz $HOSTIP.log 

 

PHP webshell检查工具 python版

    

       Web安全应急响应中,不免要检查下服务器上是否被上传了webshell,手工检查比较慢,就写了个脚本来检查了。Windows平台下已经有了lake2写的雷克图的了,一般的检查也够用了,写了个Linux下面的,用python写的。

      1.使用方法:find.py 目录名称

      2. 主要是采用python正则表达式来匹配的,可以在keywords中添加自己定义的正则,格式:

         ["eval\(\$\_POST","发现PHP一句话木马!"]  #前面为正则,后面为对这个正则的描述,会在日志中显示。

      3.修改下文件后缀和关键字的正则表达式就可以成为其他语言的webshell检查工具了,^_^。

      4.开发环境是windows xp+ActivePython 2.6.2.2,家里电脑没有Linux环境,懒得装虚拟机了,明天到公司Linux虚拟机测试下。

      5.目前只是一个框架,随后慢慢完善。

  1. #coding:gbk 
  2. import os,sys 
  3. import re 
  4.  
  5. findtype=['.php''.inc'#要检查的文件后缀类型 
  6.  
  7. #要检查的关键字正则表达式和日志中的描述,是一个二维数组。 
  8. keywords=[ ["eval\(\$\_POST","发现PHP一句话木马!"],\ 
  9.        ["(system|shell_exec|exec|popen)","发现PHP命令执行函数!"]\ 
  10.      ]  
  11.  
  12. writelog = open('log.txt''w+'
  13.  
  14. def checkfile(filename): 
  15.     fp=open(filename) 
  16.     content = fp.read() 
  17.     for keyword in keywords: 
  18.         if re.search(keyword[0],content,re.I): 
  19.             log="%s:%s" % (filename,keyword[1]) 
  20.             #print log           
  21.             print >>writelog,log 
  22.     fp.close() 
  23.              
  24.  
  25. def checkdir(dirname): 
  26.     try
  27.         ls=os.listdir(dirname) 
  28.     except
  29.         print 'access deny' 
  30.     else
  31.         for l in ls: 
  32.             temp=os.path.join(dirname,l)         
  33.             if(os.path.isdir(temp)): 
  34.                 checkdir(temp) 
  35.             else
  36.         ext = temp[temp.rindex('.'):] 
  37.         if ext in findtype: 
  38.             checkfile(temp) 
  39.              
  40.  
  41. if __name__=="__main__"
  42.     print "PHP webshell check for Python!" 
  43.     print "By:Neeao" 
  44.     print "http://Neeao.com" 
  45.     if len(sys.argv) < 2
  46.         print "%s C:\\" % sys.argv[0]    
  47.     else
  48.         print "Check start!" 
  49.         dirs=sys.argv[1:] 
  50.         #print dirs[0] 
  51.         if os.path.exists(dirs[0]): 
  52.             checkdir(dirs[0]) 
  53.         else
  54.             print "Dir:'%s' not exists!" % dirs[0]   
  55.          
  56.         print "Check finsh!" 
  57.  
  58. writelog.close() 

     

附件:check.rar(867 Byte)