如果说漏洞是黑客进入计算机的入口,那么现在我们已经掌握了找到这个入口的方法,那就是对目标进行信息搜集。以笑脸漏洞为例,我们其实不仅仅发现了这个入口,甚至还找到了打开它的“钥匙”。这只是漏洞的一个特例,如果目标主机上运行的 vsftpd-2.3.4 被黑客使用笑脸漏洞成功渗透,就会自动在6200 端口打开一个连接,而黑客可以通过这个连接实现对目标主机的控制。如果将这个连接比作一个很小的入口,它可能刚好能让一个人爬行通过,而本章要介绍的就是如何将这个入口变大,大到卡车都可以进出自由。这个大的入口就是我们所说的远程控制。
6.1 为什么6200端口变成了一个“后门”
Netcat工具的使用:(以Metasploitable 2的80端口为例进行测试)
1.使用Netcat扫描某IP地址的指定端口
┌──(kali㉿kali)-[~]
└─$ nc -v 192.168.17.128 80
2.使用Netcat连接指定IP地址的指定端口
┌──(kali㉿kali)-[~]
└─$ nmap --script vuln -p 21 192.168.17.129
I:激活笑脸漏洞,使其开启6200端口:
┌──(kali㉿kali)-[~]
└─$ nmap -p 6200 192.168.17.129
编写python脚本(文件名:backdoor.py):
执行并验证:
(图)
I: 显示指定目录下的内容
II: 尝试其它测试命令
┌──(kali㉿kali)-[~]
└─$ nc 192.168.17.128 21
┌──(kali㉿kali)-[~]
└─$ nmap -p 6200 192.168.17.128
┌──(kali㉿kali)-[~]
└─$ nc 192.168.17.129 21
┌──(kali㉿kali)-[~]
└─$ nc -v 192.168.17.129 6200
6.2 远程控制程序基础
1、远程控制程序:被控端 + 主控端
2、远程控制软件分类:
按连接方式分:正向、反向(注意:现在大都采用反向远程控制方式)
按目标系统分:Windows、Androd、iOS、各种版本的Linux操作系统。
6.3 如何使用MSFPC生成被控端并进行远程控制
在Kali 2中生成被控端的工具:MSFPC(msfvenom的优化版)
6.3.1 生成windows系统下的被控端并进行远程控制
测试windows系统实验使用的网络环境,填写以下IP地址:
测试用windows系统(WinXPenSP)的IP: 192.168.17.131
测试用windows 7系统(32位Windows7)的IP: 192.168.17.130
虚拟机Kali Linux 2的IP: 192.168.17.129
步骤一:生成Windows操作系统下的被控端
步骤二:把被控端放到kali的网站主目录下,启动apache2,到目标靶机(WinXPenSP3)下载被控端并运行。
1.把被控端放到kali的网站主目录下
┌──(kali㉿kali)-[~]
└─$ cp windows-meterpreter-staged-reverse-tcp-443.exe /var/www/html
2、启动apache2
检查apache2服务是否启动
3、到目标靶机(WinXPenSP3)下载被控端并运行
(1)给被控端改一个好记的名字。
(2)在目标靶机下载被控端
(3)运行被控端
步骤三:在kali中运行主控端
配置对应的主控端
步骤四:控制目标靶机一(WinXPenSP3)
1.查看会话,并选择会话。
2.列出当前目录下的所有文件等。
3、打开cmd执行各种命令,如查看文件夹内容、操作系统信息、关机。
Shell
设置1000毫秒后关机,并弹出提示信息“hello!”。
4、退出shell
步骤五:类似上述操作,控制目标靶机二(32位Windows7)
1.在kali中使用background命令回到主控端控制台。
2.到目标靶机(32位Windows7)下载被控端并运行
3.在kali中是否自动打开
4、查看并选择会话3,控制32位windows7。
5、打开cmd执行各种命令,如查看文件夹内容、操作系统信息、关机。
(1)输入shell
(2)查看操作系统信息
(3)延时关闭系统并显示提示信息
6、退出shell,关闭所有会话。
如果要结束会话1,使用什么命令?
在sessions内使用exit,或者直接在主控端控制台使用k id
6.3.2 生成android系统下的被控端并进行远程控制
测试android系统实验使用的网络环境,填写以下IP地址:
测试用android系统的IP: 192.168.17.130
虚拟机Kali Linux 2的IP: 192.168.17.132
步骤一:生成android操作系统下的被控端
步骤二:把被控端放到kali的网站主目录下,启动apache2,到目标靶机(安卓虚拟机)下载被控端并运行。
1、把被控端放到kali的网站主目录下
将被控端改名为:android
2、启动apache2
检查apache2服务是否启动?
如果没有启动,启动apache2。
3、到目标靶机(安卓虚拟机)下载被控端并运行
(1)在目标靶机(安卓虚拟机)下载被控端
(2)运行被控端
更改设置:允许安装来自未知来源的应用。
更改之后,再次运行被控端,并选择打开。
步骤三:在kali中运行主控端
配置对应的主控端(一定要用root身份运行)
安卓机运行被控端之前,如下图。
安卓机运行被控端之后,如下图。
步骤四:控制目标靶机(安卓虚拟机)
1.查看会话,并选择会话
2、输入shell,执行各种命令,如查看操作系统信息、切换到root用户等。
查看当前用户帐号。
查看操作系统信息。
切换到root用户。
1.在安卓虚拟机中弹出提示信息,选择“拒绝”。
在kali中可以看到操作结果是什么?
2.在安卓虚拟机中弹出提示信息,选择“允许”。
在kali中可以看到操作结果是什么?
在kali中输入whoami,显示当前用户。
切换为root用户之后,可以对安卓机进行最大权限的控制,比如关闭selinux、读取文件等。
I:当前安卓机的selinux状态:许可
II:尝试在Download目录下载一个windows的被控端。
切换到Download目录,查看当前目录的所有文件:
下载windows的被控端win.exe和txt文件haha.txt:
III:删除Download目录中的所有文件
3、退出
6.3.3 生成Linux系统下的被控端并进行远程控制
生成Linux操作系统下的被控端(只做此步骤,后续步骤选做!)
6.4-6.5 如何使用msfvenom生成被控端并进行远程控制
在Kali 2中生成被控端的工具:msfvenom(msfvenom是渗透测试工具Metasploit中的一个命令)
前导练习:
1、查看帮助信息
2、查看所有可以使用的攻击模块
3、筛选出使用reverse_tcp的模块
6.4 如何使用msfvenom生成被控端并进行远程控制
6.4.1 生成windows系统下的被控端并进行远程控制
测试windows系统实验使用的网络环境,填写以下IP地址:
测试用windows系统(WinXPenSP)的IP: 192.168.17.131
虚拟机Kali Linux 2的IP: 192.168.17.129
步骤一:生成Windows操作系统下的被控端并放入目标靶机运行
options(选项):
-p 指定要生成的攻击荷载(payload)
-f 输出格式(format)
-o 输出(out)存储payload的位置
方法一(教材): 将被控端payload.exe生成到/var/payload.exe
方法二:将被控端winpayload.exe生成到网站的目录(/var/www/html/)下,然后到靶机中用浏览器下载并运行。
1.将被控端改名为winpayload.exe复制到网站的目录(/var/www/html/)下
2.检查apache2服务是否启动:systemctl status apache2.service
3.启动apache2服务:systemctl start apache2.service
4到靶机WinXPenSP3中用浏览器下载并运行
步骤二 :启动主控端
(参考6.5 如何在Kali Linux 2中启动主控端)
1.启动metasploit,进入metasploit(msf)的控制台。
2、使用handler模块,然后配置参数。
(1)use exploit/multi/handler
使用--list formats查看Metasploit所有支持的格式:
1.设置攻击载荷为windows/meterpreter/reverse_tcp
2.设置lhost为kali的IP
3.设置lpost为5000
4.发起攻击(等待目标靶机WinXPenSP3上线)
5.是否建立会话?
步骤三:控制目标靶机(WinXPenSP3)
输入shell,执行各种命令,如查看操作系统信息、磁盘信息、关闭系统等。
1.查看操作系统信息
2.查看目标靶机有哪些磁盘
3.延时关闭系统并弹出提示框
4.退出控制
6.4.2 生成linux系统下的被控端并进行远程控制
测试linux系统实验使用的网络环境,填写以下IP地址:
测试用linux系统(Metasploitable2-Linux)的IP: 192.168.17.128
虚拟机Kali Linux 2的IP: 192.168.17.129
步骤一:生成linux操作系统下的被控端并放入目标靶机运行
1、查看linux的攻击载荷
2、生成被控端
(1)将被控端linuxpayload.elf生成到网站的目录(/var/www/html/)下,稍后到靶机中用浏览器下载并运行。
(2)检查apache2服务是否启动,如果未启动apache2服务,则需要启动。
步骤二 :启动主控端
(参考6.5 如何在Kali Linux 2中启动主控端)
1.启动metasploit,进入metasploit(msf)的控制台。
2.使用handler模块,然后配置参数。
(1)使用handler模块
(2)设置攻击载荷为linux/x86/meterpreter/reverse_tcp
(3)设置lhost为kali的IP
(4)设置lpost为5001
(5)发起攻击(等待目标靶机Metasploitable2-Linux上线)
步骤三 :到目标靶机(Metasploitable2-Linux)下载攻击载荷并运行。
1.下载被控端
2.查看被控端是否给了执行权限,没给则需要添加执行权限。
3.运行被控端
返回到kali,是否建立会话?
步骤四:控制目标靶机(Metasploitable2-Linux)
输入shell,执行各种命令,如查看操作系统信息、磁盘信息、关闭系统等。
(1)查看操作系统信息
(2)查看主机名
(3)查看IP地址
(4)使用curl命令访问kali的网页
退出控制
6.4.3 生成android系统下的被控端并进行远程控制
测试android系统实验使用的网络环境,填写以下IP地址:
测试用android系统的IP: 192.168.17.130
虚拟机Kali Linux 2的IP: 192.168.17.129
步骤一:生成android操作系统下的被控端并放入目标靶机运行
1.查看android的攻击载荷(只查看使用reverse_tcp)
2、生成被控端
(1)将被控端androidpayload.apk生成到网站的目录(/var/www/html/)下
(2)检查apache2服务是否启动,如果未启动apache2服务,则需要启动。
步骤二 :启动主控端
(参考6.5 如何在Kali Linux 2中启动主控端)
1.启动metasploit,进入metasploit(msf)的控制台。
2、使用handler模块,然后配置参数。
(1)使用handler模块
(2)设置攻击载荷为android/meterpreter/reverse_tcp
(3)设置lhost为kali的IP
(4)设置lpost为5002
(5)发起攻击(等待目标靶机android-86_64-7.1-r5上线)
步骤三 :到目标靶机(android-86_64-7.1-r5)下载攻击载荷并运行。
1.下载被控端
2.运行被控端
返回到kali,是否建立了会话?
步骤四:控制目标靶机(android-86_64-7.1-r5)
输入shell,执行各种命令,如查看操作系统信息、磁盘信息、关闭系统等。
1、输入:shell
2、查看当前用户名
3、查看操作系统信息
4、尝试切换到root用户
(1)在安卓虚拟机中弹出提示信息,选择“拒绝”。
在kali中可以看到什么结果?
(2)在安卓虚拟机中弹出提示信息,选择“允许”。
在kali中可以看到什么结果?
在kali中输入whoami,显示当前用户。
切换为root用户之后,可以对安卓机进行最大权限的控制。
I:显示根目录的文件
II:进入存储卡中的下载目录(sdcard/Download),查看当前目录的文件。
III:删除Download目录中的文件
IV:关闭系统
关闭系统之后,主控端无法再继续控制了。
退出
6.6 远程控制被控端与杀毒软件的博弈
1、杀毒软件主要使用以下3种技术:
1)基于文件扫描的反病毒技术
2)基本内存扫描的反病毒技术
3)基于行为监控的反病毒技术
2、黑客主要使用的免杀手段:
1)修改特征码
2)添加花指令
3)程序加密(加壳)
6.6.1 msfvenom提供的免杀方法
步骤一:生成一个普通的payload
步骤二 :到安装了火绒杀毒软件的虚拟机下载攻击载荷。
(下载被控端,火绒杀毒软件是否弹出警告?)
步骤三:生成一个免杀的payload
1.查看msfvenom中可用的编码方式
2、使用评级为low的编码方式/x86/nonalpha生成一个免杀的payload
(执行2次,2次生成的Shellcode相同吗?)相同
3、使用评级为excellent的编码方式生成一个免杀的payload
(1)执行第1次(采用默认的1次编码):
(2)执行第2次(采用默认的1次编码):
(结果:执行2次,2次生成的Shellcode相同吗?)不同
(3)执行第3次(使用多次编码、多重编码):
(上述输入命令、结果截图并进行必要说明)
步骤四:到安装了火绒杀毒软件的虚拟机下载攻击载荷。
(下载被控端,火绒杀毒软件是否弹出警告?)
步骤五:对上述生成的免杀payload加壳
1、对payload02.exe加壳
2、将payload02.exe复制为payload03exe
步骤六:到安装了火绒杀毒软件的虚拟机下载攻击载荷。
(下载被控端,火绒杀毒软件是否弹出警告?)
步骤七:测试payload.exe、payload02.exe和payload03.exe能不能正常连接到主控端
1、启动metasploit,进入metasploit(msf)的控制台。
2、使用handler模块,然后配置参数,发起攻击。
(1)使用handler模块
(2)设置攻击载荷为windows/meterpreter/reverse_tcp
(3)设置lhost为kali的IP
(4)设置lpost为5000
(5)发起攻击
(6)目标靶机分别运行payload02.exe和payload03.exe后,kali是否建立会话?
(上述输入命令、结果截图并进行必要说明)
6.6.2 PowerSploit提供的免杀方法
步骤一:在kali中启动PowerSploit
方法一:菜单
方法二:命令行
步骤二:将PowerSploit目录当作一个网站发布
步骤三:在靶机(或其它虚拟机)中访问PowerSploit
在地址栏输入kali的IP
是否能打开由python启动的http服务?
步骤四:PowerSploit功能一:检测被控端的特征码(使用AntivirusBypass)
方法:将程序拆分成n个部分,分别使用杀毒软件对这n个文件进行检查;找出报毒部分反复执行拆分操作,直到发现特征码所在位置。
1、启动PowerSploit的方法:开始/搜索程序和文件(输入:PowerShell,选择Windows PowerShell)
2、下载脚本文件Find-AVSignature.psl:
输入命令:
注:需要在括号中输入脚本所在目录!
3、使用脚本文件Find-AVSignature.psl查找攻击载荷的特征码
(1)使用脚本文件Find-AVSignature.psl将测试文件(位于桌面的payload.exe)分解成多个小文件,保存到桌面的tmp文件夹中:
注:先退出火绒!
结果:生成几个小文件。
(2)选中所有文件,使用火绒进行杀毒,找到报毒的文件是哪些?
(3)对报毒的文件重复上述分解、查毒过程,直到找到特征码所在的位置。
注:每深入一次分解,分解小文件的大小要逐级降低,如改为:-interval 1000、-interval 100。
步骤五:PowerSploit功能二:实现将DLL注入进程(使用CodeExecution)
提供了4个脚本:
Invoke-DllInjection.psl:用于将DLL文件注入到一个进程。
Invoke-ReflectivePEInjection.psl
Invoke-Shellcode.psl
Invoke-WmiCommand.psl。
例:生成一个DLL类型的反向被控端,注入进程。
1、生成一个DLL类型的反向被控端
(1)查看可用于windows系统的dll类型的反向控制攻击载荷
由于目标靶机是64位系统,所以需要使用64位的攻击载荷来生成dll。
(2)生成dll文件payload01.dll
2、生成对应的主控端
(1)启动metasploit,进入metasploit(msf)的控制台。
(2)使用handler模块,然后配置参数。
I:使用handler模块
II:设置攻击载荷为windows/x64/meterpreter/reverse_tcp
III:设置lhost为kali的IP
IV:设置lpost为5000
V:发起攻击(等待目标靶机64位win7上线)
3、在64位win7系统中下载payload01.dll
(1)在64位win7中下载脚本Invoke-DllInjection.ps1
(2)下载payload01.dll到桌面。
注:先退出火绒,再下载。否则会被火绒清除。
下载是否成功?
4、将payload01.dll注入到进程中
(1)调出进程编号选项
(2)注入到“记事本”进程中
I:启动记事本,看到记事本进程及其PID是多少?
II:注入进程:
完成注入!
5、实现远程控制
(1)kali中是否建立会话?
(2)执行一些命令:查看当前进程号、用户id、当前目录、列现当前目录下所有文件等。
注意:程序被注入后,可能会出现工作异常的情况,所以不要注入到系统进程里,否则会引起程序崩溃。记事本是否已经崩溃?会话还在吗?
(3)靶机中查看到这个kali建立的会话进程
6、在靶机中结束kali建立的会话进程,kali打开的会话是否关闭?
(1)在靶机中结束kali建立的会话进程
(2)Kali中打开的会话是否关闭?
7、这次生成的是64位的攻击载荷,对64位的进程有效,那么对32位的进程有否有效?
请尝试注入32位的进程!
8、注入到资源管理器。
(1)查看资源管理器的进程PID号
(2)执行注入命令
查看到kali是否建立会话?
(3)查看到64位win7系统的资源管理器是否崩溃?