当前位置:WooYun(白帽子技术社区) >> 快速查找木马 >> [2013-03-12更新]查找Webshell的几个小工具

[2013-03-12更新]查找Webshell的几个小工具

GaRY | 2013-03-09 00:59

先给出地址:https://github.com/wofeiwo/webshell-find-tools

Author: wofeiwo#80sec.com

2013-03-12:
1. fca.py完全重写,由于功能改变,现改名为File Changes Analyzer。
   1. 添加了用户属主判断功能
   2. 添加了MySQL into outfile导出webshell鉴别功能
2. ala.py的md5库导入存在bug修复。

fca的功能现在包括:

将文件系统中的文件按照改动时间区段分组。一般情况下,web目录下的文件创建时间是集中的。如果某些文件创建时间比较不合群,那么这个文件是webshell的可能性就很大。
根据给定的文件属主,将Web目录下不同属主的文件显示出来。这些文件很可能就是webserver生成的异常文件。
通过MySQL导出的webshell很常见,而MySQL导出的文件又有一定的特殊性,所有导出文件的权限都是666。通过这个过滤出所有MySQL导出的web脚本。很可能就是webshell。


这是我2010年初写的小脚本,主要是为了方便快速的通过文件行为特征,而不是特征内容字符,去查找webshell。

总共两个脚本:

ala.py (Access Log Analyzer)
这个脚本的思路是:分析Accesslog文件,然后按照访问次数、存在性排序所有请求的路径。去除所有静态文件。如果是个访问量较大的网站,通常访问最少的几个文件就是Webshell。

fca.py (File Ctime Analyzer)
这个脚本的思路是:将文件系统中的文件按照改动时间区段分组。一般情况下,web目录下的文件创建时间是集中的。如果某些文件创建时间比较不合群,那么这个文件是webshell的可能性就很大。

详细信息请直接点击顶上的链接吧。README里都有。

如果大家有更好的想法,欢迎github上pull给我你们的代码。我会整合到这个项目中。

Enjoy it

分享到:
  1. 1#
    回复此人 感谢
    her0ma | 2013-03-09 07:10

    沙发思密达,用过的查找工具,基本都是根据特征字符串内容搞。

    这种思路或许会有不错的效果,先收藏瞧瞧!

  2. 2#
    回复此人 感谢
    核攻击 (统治全球,奴役全人类!毁灭任何胆敢阻拦的有机生物!) | 2013-03-09 08:45

    嗯,思路方案不错。

  3. 3#
    回复此人 感谢
    Chu (学习ing。) | 2013-03-09 09:28

    强大的思路啊

  4. 4#
    回复此人 感谢
    livers (如梦似幻) | 2013-03-09 09:51

    相同IP多次post同一个页面,这个是webshell概率根据多年的查杀经验来说 是相当大的。当时我还很年轻。

  5. 5#
    回复此人 感谢
    GaRY | 2013-03-09 10:24

    @livers 这个有一定的重合度。需要假如其他辅助判断,比如是library目录下的文件,还一直被post之类。
    顺及,其实ala也有按照method统计的功能,不过我是把这个当做辅助手段的。

  6. 6#
    回复此人 感谢
    livers (如梦似幻) | 2013-03-09 14:54

    @GaRY 我是,同一IP连续的多次重复访问,然后日志里查询这个文件 未有或者有很少IP 访问这个文件。这个是webshell的概率非常大。这些只能算是行为特征查杀的起步的初级方式吧。我做的查杀工具也只是把这些当辅助,还是特征码为主。
    当时我还很年轻有人问你how old?

  7. 7#
    回复此人 感谢
    Matt | 2013-03-09 16:35

    一般日记很少开的吧,没需要的话。。不过思路很有意思

  8. 8#
    回复此人 感谢
    GaRY | 2013-03-09 16:37

    @Matt 不开日志?这才是少之又少吧

  9. 9#
    回复此人 感谢
    Matt | 2013-03-09 16:39

    @GaRY 我遇到的站几乎都很少开日志,访问量太大 日志花花的。。

  10. 10#
    回复此人 感谢
    冷冷的夜 (1) | 2013-03-10 00:04

    可以在网站里面加入一个隐藏的iframe,就让她和其他页面请求频率次数没多大差别,可以修改.htaccess类似的,修改陈gif等形式的解析

  11. 11#
    回复此人 感谢
    NiceWorm | 2013-03-10 00:42

    恩。有意思。。

  12. 12#
    回复此人 感谢
    lake2 (浮夸) | 2013-03-10 09:25

    不错,第二个脚本可以把文件属主、mtime也加上。

    小我啊,这个误报率如何?

  13. 13#
    回复此人 感谢
    请叫我大神 | 2013-03-10 10:08

    @lake2 mtime容易被改,ctime更靠谱些,而且有些解包的参数不同,有些属性会被保留下来

  14. 14#
    回复此人 感谢
    冷冷的夜 (1) | 2013-03-10 18:21

    @请叫我大神 是的,touch -r a b 即可修改mtime。ctime也是可以修改,需要root权限,先把系统时间改回去,然后再修改一下权限,或者touch一下。

  15. 15#
    回复此人 感谢
    123 (v2ex) | 2013-03-10 18:59

    碉堡了,wofeiwo大神分享的就是屌

  16. 16#
    回复此人 感谢
    123 (v2ex) | 2013-03-10 19:00

    还有我觉得,如果完善下,还是把特征码加进来吧

  17. 17#
    回复此人 感谢
    冷冷的夜 (1) | 2013-03-10 19:06

    可以加入配置文件和脚本文件的hash匹配

  18. 18#
    回复此人 感谢
    Vty | 2013-03-10 22:38

    怎么能联系到@GaRY

  19. 19#
    回复此人 感谢
    小胖胖要减肥 | 2013-03-10 22:51

    @Vty @GaRY
    1月30号去张江  王总给我个入场券撒

  20. 20#
    回复此人 感谢
    冷冷的夜 (1) | 2013-03-10 23:30

    刚才又请教了下别人,还有一种貌似,卸载ext,然后用debugfs 修改 ext的inode,然后挂载

  21. 21#
    回复此人 感谢
    冷冷的夜 (1) | 2013-03-10 23:50

    @请叫我大神 不过目测ctime可靠性不大,随便一个mv、chmod 就能改变ctime,而且有的lib的函数本身就改了ctime

  22. 22#
    回复此人 感谢
    请叫我大神 | 2013-03-11 08:59

    @冷冷的夜 正常运行,不是么?你提到了root,提权到root就是两个层面的东西了,呵呵,这里还只是讨论webshell

  23. 23#
    回复此人 感谢
    Vty | 2013-03-11 09:17

    @小胖胖要减肥 能私信吗?

  24. 24#
    回复此人 感谢
    saber (终极屌丝之路~) | 2013-03-11 09:49

    我觉得还是要加上特征码更可靠。

  25. 25#
    回复此人 感谢
    小胖胖要减肥 | 2013-03-11 10:00

    @Vty 直接群里面找我吧

  26. 26#
    回复此人 感谢
    GaRY | 2013-03-11 10:06

    @小胖胖要减肥 这个发邮件给一号店申请就ok了,没啥入场卷

  27. 27#
    回复此人 感谢
    GaRY | 2013-03-11 10:12

    @123 @lake2 所有行为特征都是用来做辅助加权的,不具有确定性,需要人工参与。所以这个本来也就是和@请叫我大神 所说在Incident Response的阶段用的工具,不是用来做实时监控。因此没有什么所谓的准确率,实际上在一台确信已经入侵了的机器上快速找到webshell,准确率还是很高的。
    另外可能加入用户属主的判断脚本。其他特征码之类的就不加入了。那些不在我这些工具讨论的范畴。

  28. 28#
    回复此人 感谢
    zidane (噢 乖!你们应该知道这样下去对我们谁都不好!) | 2013-03-11 11:21

    我非我牛 就是淫荡!

  29. 29#
    回复此人 感谢
    GaRY | 2013-03-12 14:18

    本工具已经更新,添加了属主判断和另一个功能。具体直接看github。@小胖胖要减肥 @123 @请叫我大神 @lake2

  30. 30#
    回复此人 感谢
    小胖胖要减肥 | 2013-03-12 15:04

    @GaRY 收到

  31. 31#
    回复此人 感谢
    noah | 2013-03-14 17:52

    很好,支持

  32. 32#
    回复此人 感谢
    Lmy (话说名字太长容易被人关注) | 2013-03-14 20:59

    @GaRY
    字符密度(文件复杂度) 这个特征一般情况是加密的文件或者就是马
    PS:“Python马”除外 这个需要行为特征

  33. 33#
    回复此人 感谢
    Lmy (话说名字太长容易被人关注) | 2013-03-14 21:08

    @GaRY
    PPS:PHP有可能误杀Zend等等各种加密过的PHP
    PPPS:以上 只能真对ASP/ASPX/PHP/JSP(Model1)这些 没什么大问题
    PPPPS:提示 AST

  34. 34#
    回复此人 感谢
    Lmy (话说名字太长容易被人关注) | 2013-03-14 21:11

    @GaRY AST(Abstract Syntax Tree) PS:抽象语法树

  35. 35#
    回复此人 感谢
    GaRY | 2013-03-14 23:25

    @Lmy 又想起那个传说中计算熵然后找最为混乱的那个文件即为webshell的方法。不过说实话,虽然有一定的道理,不过我更觉得是数学模型大于实际意义。

    顺便,应该这个和语法数本身没有特别大关系,基本用不到语法解析。

  36. 36#
    回复此人 感谢
    tmp | 2013-03-14 23:31

    @lake2 @GaRY @请叫我大神 其实.只要有心.不管是ctime/mtime都不太可靠...

  37. 37#
    回复此人 感谢
    tmp | 2013-03-14 23:34

    @冷冷的夜 hash匹配靠谱点.可以和ctime/mtime整合一起用.

  38. 38#
    回复此人 感谢
    Lmy (话说名字太长容易被人关注) | 2013-03-14 23:38

    @GaRY Zend处理过的文件有时候比有的马更混沌

  39. 39#
    回复此人 感谢
    Lmy (话说名字太长容易被人关注) | 2013-03-14 23:42

    @GaRY 如果是符合语言规范的程序了 AST就有意义了

  40. 40#
    回复此人 感谢
    GaRY | 2013-03-14 23:43

    @tmp 本来么,ctime之类只是一个途径。但是好歹门槛提高了,毕竟你没有root没法改inode。
    这些只是作为辅助工具用的。重要的是提供和共享思路

  41. 41#
    回复此人 感谢
    tmp | 2013-03-14 23:54

    @GaRY 嗯.确实.对快速反应来说.这是个不错的辅助手段.

  42. 42#
    回复此人 感谢
    tmp | 2013-03-14 23:59

    @GaRY 有空多写些py小工具.

  43. 43#
    回复此人 感谢
    Lmy (话说名字太长容易被人关注) | 2013-03-15 00:09

    @GaRY 信息熵

  44. 44#
    回复此人 感谢
    Lmy (话说名字太长容易被人关注) | 2013-03-16 22:44

    @GaRY 看看这个http://hi.baidu.com/monyer/item/a218dbadf2afc7a828ce9d63

  45. 45#
    回复此人 感谢
    noah | 2013-03-29 20:33

    收藏嘻嘻...

添加新回复

登录 后才能参与评论.

WooYun(白帽子技术社区)

网络安全资讯、讨论,跨站师,渗透师,结界师聚集之地

登录