大部分攻击者通过Web getshell以后都会选择上传一个webshell文件以进行后续的操作

    Webshell路径通常仅攻击者知道,且一般为单文件,可直接访问,不与其他页面进行交互,所以Webshell通常为孤立页面。


    孤立页面说明:
    单个URL的入度、出度分布 (我们可以将网站的访问路径当成一个有向图)
    下面,小小科普一下有向图的基本概念
    webshell攻防小技巧 - 图1
    节点vertices(node):1,2,3,4,5,6,7,8 相当于访问日志中的url 边edge:1->2 1->3 4->1 5->1 6->5 7->7 相当于从A url跳转到B url
    入度in-degree
    出度out-degree
    节点1的入度为2, 出度为2
    节点2、节点3的入度为1,出度为0
    节点4、节点6的入度为0,出度为1 ,属于悬挂节点(pendant vertex),比较特殊,例如404跳转到首页会产生这样的节点
    节点5的入度为1,出度为1
    节点7的入度为1,出度为1,但自己指向自己,属于自回路,大多数有验证的webshell都属于这种
    节点8的入度为0,出度为0,属于孤立节点(isolated vertex)

    而节点7、8就属于webshell访问特征中的(3)该页面属于孤立页面

    常规的webshell一般通过上传或写入新文件,较容易存在如下情况:
    1、防守者可通过孤立页面进行webshell检测
    2、webshell免杀没做好时可能被D盾等工具识别出来,一句话通常为结构略微复杂的代码,即便安服人员虽然不能一眼看明白,但是看着啥功能也没有,也能大概确认是webshell而不是误报
    3、webshell只有一个IP访问过,溯源的时候能一眼就能看出IP
    4、如果是通过文件上传漏洞,一般上传为在upload目录。很容易找到并修复

    可通过在已有的文件,将木马写入(谨慎确认不会影响网站运营),并将文件时间修改为与其他文件相同。访问时是否存在指定参数,才运行恶意代码。如修改user.php:
    if(user == ‘zero’)
    {
    eval();//免杀代码
    }

    即可避免:
    1、孤立页面的检测
    2、提高应急人员技术门槛
    3、海量IP访问过user路径,难以找到攻击者的IP(当然,像蚁剑的webshell管理器useragent记得改改)
    4、有概率找不到入口点,提高了修复难度。当然,原路径的webshell留着当障眼法,在其他文件写木马也可以。应急人员以为删除了木马并且修复了,然而并没有。

    reference:
    http://www.360doc.com/content/16/0612/17/30594932_567188526.shtml