入侵于防御当中的HTTP协议
HTTP协议
万维网及HTTP协议的诞生与发展
-
World Wide Web
==》最初设想:借助多文档之间相互关联形成超文本(HyperText),连成可互相参阅的万维网(WWW)。==》1989年3月12日,实现了超文本传输协议(HTTP)客户端和服 务器之间通过互联网的第一次成功通信。
==》1990年11月,CERN(欧洲核子研究组织)成功研发了世界第一台Web服务器和Web浏览器。
-
WWW三大构建技术
HTML(超文本标记语言)
HTTP(超文本传输协议)
URL(统一资源定位符)
-
浏览器
Mosaic
1993年1月,美国国家超级计算机应用中心(NCSA)研发问世
接下来应用于windows、mac电脑
Netscape Navigator
1994年,网景通信公司研发
1995年,同微软爆发浏览器大战
当前主流浏览器
国外:Chrome、firefox、Safari、IE(Edge)
国内:QQ浏览器、UC浏览器、傲游、搜狗浏览器
-
HTTP(HyperText Transfer Protocol)超文本传输协议
1990年提出,当前版本为HTTP/1.1
万维网交换信息的基础
规定浏览器和服务器之间相互通信的规则
允许将HTML文档从Web服务器传送到Web浏览器 请求与响应对应的协议(客户机发送请求,服务器对收到的请求给出响应)
使用可靠的TCP连接,默认TCP端口是80
-
HTTP协议
0.9、1.0、1.1版本
1.1版本
1997年1月发布
标准:RFC2616(至今)
超出原理念
最初仅用于解决文本传输
多应用投入,现应用于各类场景中,视频、音乐、图片等
网络基础
TCP/IP分层传输
TCP/IP协议:
链路层,有时也称作数据链路层或网络接口层,通常包括 操作系统中的设备驱动程序和计算机中对应的网络接口卡。 它们一起处理与电缆(或其他任何传输媒介)的物理接口 细节。
网络层,处理分组在网络中的活动,例如分组的选路。在 TCP/IP协议族中,网络层协议包括IP协议(网际协议), ICMP协议(Internet互联网控制报文协议),以及IGMP 协议(Internet组管理协议)。
运输层,主要为两台主机上的应用程序提供端到端的通信。 在TCP/IP协议族中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
应用层,负责处理特定的应用程序细节。
-
封装与拆封
HTTP相关协议
-
IP协议
IP协议,网际协议,是TCP/IP的核心协议,上层协议(TCP、UDP等)的数据包都是用IP 包承载传输
不可靠
无连接
-
IP协议--IP数据报格式
==》IPV4&IPV6
==》IP寻址
-
TCP协议
TCP:传输控制协议
==》传输层协议
==》面向连接可靠的传输
==》三次握手
先建立连接,再传输
==》滑动窗口(可靠传输、超时传输、流量控制)
==》四次挥手
-
DNS协议
DNS,域名解析协议
将域名解析为ip地址
==》递归查询
==》迭代查询
URL和URI
URL(统一资源定位符)
URL,用于标识资源的方向、地点
==》web浏览器中访问web网页时输入的访问地址
==》ftp服务器资源的访问地址
==》语法规则
scheme://host.domain:port/path/filename
-
scheme - 定义因特网服务的类型。最常见的类型是http
-
host - 定义域主机(http 的默认主机是www)
-
domain - 定义因特网域名,比如sangfor.com
-
port - 定义主机上的端口号(http 的默认端口号是 80)
-
path - 定义服务器上的路径(如果省略,则文档必须位于网站的根目录中)。
-
filename - 定义文档/资源的名称
-
URL统一资源标识符
URI,用字符串标识某一互联网的资源。ftp://ftp.is.co.za/rfc/rfc1808.txt
http://www.sangfor.com.cn/rfc/rfc1808.txt
-
URL和URI的对比
URL给出资源位于哪里(哪台主机、哪个路径、哪个文件夹)
URI给出具体某资源的定位路径(从资源自身出发,给出可达的路径
特点
请求与响应
HTTP协议的通信双方:服务器和客户端。
客户端:发送请求
服务器:响应请求
Http协议规定,请求从客户端发起,由服务端来响应该请求并返回。
客户端发起请求,服务端才会响应
客户端未发起请求,服务端是不会响应的
不保存状态
不保存状态的协议
HTTP协议不保存请求和响应的通信状态,不做持久化处理每次新的请求,对应一次响应产生
【问题】为什么登录一个某些网站后,间隔一段时间,网站还是知道我们是谁呢?
资源定位
URI(统一资源标识符)
HTTP协议通过请求URI,实现对资源的访问以下示例中,请求的URI地址是:
http://finance.sina.com.cn/zl/china/2021-02-01/zl-ikftssap2140491.shtml
请求方法
方法是为了告知服务器,该请求的意图是什么,向服务器所请求的资源下达命令
HTTP1.1的主要请求方法包括:
请求方法 | 作用 |
---|---|
GET | 获取资源 |
POST | 传输实体主体 |
PUT | 传输文件 |
OPTIONS | 询问支持的方法 |
HEAD | 获得报文首部 |
DELETE | 删除文件 |
TRACE | 追踪路径 |
CONNECT | 要求用隧道协议连接代理 |
持久连接&线技术
-
持久连接要解决的问题
最早期版本,发起一次HTTP请求,就需要建立一次tcp连接。服务器成本较高(一对多,多个tcp连接,多台客户端请求)
-
持久连接(HTTP keep alive)
建立一次tcp连接,只要任意一端没有提出断开连接,tcp连接就保持着。
减少了服务器压力,相同时间共快传输完内容,显示速度也相应提升
-
管线技术
在持久连接技术之上发展而来, 之前是发送一个请求,响应后,才能发送下一个 请求。
管线技术,客户端可以一次发送多个请求,同时接收多个响应。
管理技术,并发传输,进一步提升了资源传输的效率,内容显示更快。
###cookie技术
http无状态协议,随着web应用的发展, 服务器需要连接为不同客户端提供连接状态的服务,cookie技术应运而生。
Cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态。
-
Cookie会根据从服务器端发送的响应报文内的一个叫做Set- Cookie的首部字段信息,通知客户端保存Cookie,客户端下次再向服务器发送请求时,会自动携带cookie信 息,一起发送给服务器;
-
服务器发现客户端发送过来的cookie后,会去检查是从哪一个客户端发来的连接请求, 然后对比服务器上的记录,最后得到之前的状态信息,这时,就可为客户端继续提供状态性的服务了。
请求方式
HTTP方法:HTTP客户端发出请求,告知服务端需要执行不同类型的请求命令,这些命令被称 为HTTP方法。
简称:HTTP方法是要告诉服务器干什么
-
GET方法
作用:通常用于请求服务器发送某个资源,也是最常用一种的方法。
-
POST方法
作用
POST方法是用来向服务器输入数据的,主要支持HTML表单。
表单填写好后会被发送给服务器,比如登录窗口输入用户名和密码,供服务器验证身份
注意:::与PUT方法的区别,POST用于向服务器发送数据,PUT用于向服务器上的资源(比如文件)中存储数据。
-
PUT方法
PUT方法是向服务器写入文档,让服务器请求的主体部分来创建一个由所请求的URL命名的新文档,若已存在该文件,就用这个主体替代它。
因为涉及内容修改,大部分执行PUT方法前,被要求登录。
-
HEAD方法
类同于GET方法,但只需要服务器返回首部,不返回实体的主体部分。可实现未获取实际资源的情况下,对资源的首部进行检查。1)可用于判断资源类型; 2)通过状态码判断资源是否存在; 3 )测试资源是否被修 改
-
DELETE方法
请求服务器删除请求中的URL所指定的资源,但不一定成功
不成功的原因,HTTP规范允许服务器在不通知客户端的情况下撤销请示。
以下图示,请求删除DVWA目录下的所有资源,服务器返回该请求方法不被允许。
-
OPTIONS方法
询问服务器支持的各种功能
可以询问服务器支持哪些方法
可以询问某些特殊资源支持哪些方法
以下图示,表示询问服务器根目录下所有资源允许访问的方法。
-
TRACE方法
跟踪请求经过了哪些中间环节(防火墙、代理等)
每个中间节点可以修 改原始的http 请示, 即增 加代表 自己的信息( via : 1.1proxy.sangfor.com.cn)。
最后的响应服务器将最终的请示头,作为响应主体,返回给客户端。
请求响应的过程
-
浏览器:用户输入url
-
DNS域名解析
-
建立TCP链接
-
发送HTTP Request
-
web服务器响应(回复)
http响应:
-
应用服务器响应(回复)
-
关闭TCP链接
-
用户浏览器渲染页面
HTTPS扩展
#渗透测试工具
BurpSuite
简介
-
BurpSuite(简称Burp)是基于Java开发的Web安全领域的集成工具,被称为 信息安全界的瑞士军刀,它包含Proxy、Intruder、Repeater、Decoder、 Comparer等多个模块,模块间通过共享相互传递HTTP/HTTPS消息数据包。
-
BurpSuite共有三个版本:社区版(Community Edition)、专业版 (Professional Edition)和企业版(Enterprise Edition),社区版免费且 只有最基础的功能,而专业版在社区版基础上增加了专业漏洞扫描和高级手动 调试功能。
-
Kali系统自带BurpSuite社区版。
Burpsuite主要功能模块
BurpSuite其实是由多个不同的小工具(功能模块)组成的集合,工具与工具之 间可以联动
主要功能模块
Target:显示目标目录结构的一个功能
Proxy:拦截HTTP/HTTPS的代理服务器,作为一个在浏览器和目标应用程序之间 的中间人,允许拦截、查看、修改在两个方向上的原始数据流
Intruder:一个定制的高度可配置的工具,对Web应用程序进行自动化攻击,如: 枚举标识符、收集有用的数据以及使用fuzzing技术探测常规漏洞
Repeater:一个靠手动操作来触发单独的HTTP请求,并分析应用程序响应的工具
Sequencer:用来分析那些不可预知的应用程序会话令牌和重要数据项的随机性的 工具
Decoder:进行手动执行或对应用程序数据者智能解码编码的工具
Comparer:通常是通过一些相关的请求和响应得到两项数据的一个可视化的“差异”
-
Burpsuite Pro 1.x
含有有Spider和Scanner标签页
-
Burpsuite Pro 2.x
基于任务(task)的模式, 移除了Spider和Scanner标 签页,但功能仍保留
-
Burpsuite功能模块——Proxy
Proxy以拦截代理的方式,拦截所有通过代理的HTTP和HTTPS协议的流量。通 过拦截,BurpSuite以中间人的方式,可以对客户端请求数据、服务端返回做各 种处理,以达到安全评估测试的目的。
-
Burpsuite功能模块——Repeater
作为BurpSuite中一款手工验证HTTP消息的测试工具,Repeater通常用于多次 重放请求响应和手工修改请求消息的修改后对服务器端响应的消息分析
-
Burpsuite功能模块——Intruder
Intruder在原始请求数据的基础上,通过修改各种请求参数,以获取不同的请求 应答。每一次请求中,Intruder通常会携带一个或多个有效攻击载荷,在不同的 位置进行攻击重放,通过应答数据的比对分析来获得需要的特征数据
-
Burpsuite功能模块——Sequencer
作为BurpSuite中一款用于检测数据样本随机性质量的工具,Sequencer通常用 于检测访问令牌是否可预测、密码重置令牌是否可预测等场景,通过Sequencer 的数据样本分析,能很好地降低这些关键数据被伪造的风险
-
Burpsuite功能模块——Decoder
作为BurpSuite中一款编码解码工具,Decoder的功能比较简单,它能对原始数 据进行各种编码格式和散列的转换
-
Burpsuite功能模块——Comparer
Comparer在BurpSuite中主要提供一个可视化的差异比对功能,来对比分析两 次数据之间的区别
BurpSuite Proxy模块
-
Proxy模块应用实例1——HTTP报文抓取与修改
环境准备
操作机:BurpSuite,FireFox浏览器
目标机:DVWA网站
步骤1:设置BurpSuite代理服务端口
选项卡Proxy->Options->Proxy Listeners
注意:Tomcat在本机的默认端口是8080,BurpSuite proxy在本机的默认监听端 口也是8080,如果同时打开就会导致端口冲突。因此,建议将BurpSuite proxy的 代理端口改为其他不常用端口,如8090
步骤2:设置FireFox浏览器代理端口
菜单项“工具”->“选项”->“常规”->“网络设置”,点击“设置”按钮,在弹 出 的 “ 连 接 设 置 ” 对 话 框 中 选 择 “ 手 动 代 理 配 置 ” , “ HTTP 代 理 ” 处 填 写 127.0.0.1,“端口”处填写8090(跟BurpSuite代理服务端口值保持一致),同时 勾选“也将此代理用于FTP和HTTPS”,设置完成后点击“确定”按钮
步骤3:抓取HTTP请求报文
(1)首先关闭BurpSuite的拦截功能,具体方法为:选项卡Proxy->Intercept, 设置Intercept is off。
(2)利用FireFox浏览器访问DVWA网站,正常显示认证页面
(3)开启BurpSuite的拦截功能,具体方法为:选项卡Proxy->Intercept,设置 Intercept is on。
(4)在DVWA网站认证页面输入登录用户名和密码(此处可随便输入任意字符), 并点击Login按钮,观察到BurpSuite已经抓到了一个HTTP请求报文
步骤4:修改HTTP请求报文
将BurpSuite抓到的HTTP请求报文的POST表单中的数据进行修改,设置正确的用 户名(admin)和密码(password),修改完成后多次点击“Forward”按钮发送 此HTTP请求报文,观察到DVWA网站认证通过,成功登录
-
Proxy模块应用实例2——HTTPS报文抓取
环境准备
操作机:BurpSuite,FireFox浏览器
目标网站:https://www.baidu.com
步骤1:设置BurpSuite代理服务端口
选项卡Proxy->Options->Proxy Listeners
注意:Tomcat在本机的默认端口是8080,BurpSuite proxy在本机的默认监听端 口也是8080,如果同时打开就会导致端口冲突。因此,建议将BurpSuite proxy的 代理端口改为其他不常用端口,如8090
步骤2:设置FireFox浏览器代理端口
菜单项“工具”->“选项”->“常规”->“网络设置”,点击“设置”按钮,在弹 出 的 “ 连 接 设 置 ” 对 话 框 中 选 择 “ 手 动 代 理 配 置 ” , “ HTTP 代 理 ” 处 填 写 127.0.0.1,“端口”处填写8090(跟BurpSuite代理服务端口值保持一致),同时 勾选“也将此代理用于FTP和HTTPS”,设置完成后点击“确定”按钮
步骤3:下载并安装浏览器CA证书
(1)利用FireFox浏览器访问http://burp或127.0.0.1:8090,点击页面右上侧的 “CA Certificate”处下载CA证书(cacert.der)
(2)在FireFox浏览器上选择菜单项“工具”->“选项”->“隐私与安全”->“证 书”,点击“查看证书”按钮,在弹出的“证书管理器”对话框中选择“证书颁发机 构”标签页,点击“导入”按钮,将刚刚下载的cacert.der导入,导入时注意勾选 “信任由此证书颁发机构来标识网站”。
步骤4:HTTPS报文抓取
(1)开启BurpSuite的拦截功能,具体方法为:选项卡Proxy->Intercept,设置 Intercept is on。
(2)重启FireFox浏览器,并访问https://www.baidu.com,观察到BurpSuite已 经抓到了一个HTTPS请求报文
BurpSuite Repeater模块
Repeater模块的功能及应用场景
作为BurpSuite中一款手工验证HTTP消息的测试工具,Repeater通常用于多次 重放请求响应和手工修改请求消息的修改后对服务器端响应的消息分析,如:
修改请求参数,验证输入的漏洞
修改请求参数,验证逻辑越权
从拦截历史记录中,捕获特征性的请求消息进行请求重放
-
Repeater模块应用实例——POST注入
环境准备
操作机:BurpSuite,FireFox浏览器
目标机:SQLi-Labs网站
步骤1:进入SQLi-Labs,选择Less-11
步骤2:设置BurpSuite代理服务端口和FireFox浏览器的代理端口(本例中均为 8090)。
步骤3:开启BurpSuite拦截功能,并在SQLi-Labs的Less-11登录页面输入用户 名admin和任意密码,点击login按钮,此时BurpSuite Proxy会拦截到HTTP请 求报文。
步骤4:选中拦截到HTTP请求包,点击鼠标右键,选择“Send to Repeater” , 将此HTTP请求包发送至Repeater模块。
步骤5:在Repeater模块的Request框中,通过修改HTTP请求参数后点击“Go” 按钮提交,并观察Response框中显示的服务器返回结果,实施POST注入。
(1)判断注入点类型
(2)判断字段数
(3)判断回显位置
(4)获取数据库名
(5)获取数据表名
(6)获取字段名
(7)获取字段值(用户名和密码)
###BurpSuite Intruder模块
Intruder模块——Target子选项卡
用于设置攻击目标
Intruder模块——Positions子选项卡
用于设置攻击位置和攻击模
payload的位置
【Add §】:在当前光标的位置添加一个Payload位置标志
【Clear §】:清除所有Payload位置标志或者清除选中的Payload位置标志
【Auto §】:对消息内容中可能需要标志的参数做一个猜测,标志为Payload 位置,自动设置完之后再做人工的选择,确定哪些位置是需要传入Payload的。
【Refresh】:刷新消息内容中带有颜色的部分。
【Clear】:清除消息编辑器中所有内容。
Intruder模块——Options子选项卡
请求消息头设置(Request Headers)
请求引擎设置(Request Engine)
攻击结果设置(Attack Results)
正则匹配(Grep Match)
正则提取(Grep Extract)
正则匹配payload(Grep payloads)
重定向(Redirections)
-
Intruder模块应用实例1——DVWA暴力破解(Low级别)
环境准备
操作机:BurpSuite,FireFox浏览器
目标机:DVWA网站
步骤1:进入DVWA,将安全等级调至Low,并进入网站的暴力破解(Brute Force)模块。
步骤2:设置BurpSuite代理服务端口和FireFox浏览器的代理端口(本例中均为 8090)。
步骤3:开启BurpSuite拦截功能,并在DVWA网站的暴力破解(Brute Force) 模块登录处任意输入用户名和密码,点击login按钮,此时BurpSuite Proxy会 拦截到HTTP请求报文。
步骤4:选中拦截到HTTP请求包,点击鼠标右键,选择“Send to Intruder” 。
步骤5:进入选项卡Intruder->Positions,先点击“Clear §”按钮清空默认选 择的位置,然后依次选中“username=”和“password=”后面的值,并点击 “Add §”按钮指定爆破位置,同时将Attack type设置为“Cluster bomb” (集束炸弹模式)。
步骤6:进入选项卡Intruder->Payloads,设置2个payload set(有效载荷 集) ,分别用于爆破用户名(username)和密码(password)。
步骤7:点击右上方的“Start attack”按钮执行爆破攻击,并观察结果。通过请 求报文的长度或应答报文的内容判断,正确的用户名和密码为admin/password。
-
Intruder模块应用实例2——DVWA暴力破解(High级别)
环境准备
操作机:BurpSuite,FireFox浏览器
目标机:DVWA网站
开始实际操作前,整理思路
需要控制的有三个payload位:username、password、user_token
使用正则提取的方法绕过csrf token对爆破的限制
思考
如果对username和password都使用simple list会产生什么结果?
如果想要对username和password集合的笛卡尔积进行测试应该怎么做?
步骤1:进入DVWA,将安全等级调至High,并进入网站的暴力破解(Brute Force)模块。
步骤2:设置BurpSuite代理服务端口和FireFox浏览器的代理端口(本例中均为 8090)。
步骤3:开启BurpSuite拦截功能,并在DVWA网站的暴力破解(Brute Force) 模块登录处任意输入用户名和密码,点击login按钮,此时BurpSuite Proxy会拦 截到HTTP请求报文。与Low级别不同的是,High级别拦截到的HTTP请求报文中 含有user_token字段。
步骤4:选中拦截到HTTP请求包,点击鼠标右键,选择“Send to Intruder” 。
步骤5:进入选项卡Intruder->Positions,按如下方式指定爆破位置,同时将 Attack type设置为“Pitchfork”(草叉模式)。
步骤6:进入选项卡Intruder->Payloads,设置2个payload set(有效载荷集):
(1)第一个payload set选择Custom iterator类型。
配置三个占位,其中第一个占位是用户名集合,第三个占位是密码集合
在Payload Encoding处,禁用对=和&进行URL编码。
(2)第二个payload set选择Recursive grep类型。
步骤7:进入选项卡Intruder->Options
(1)在Request Engine处将线程数设置为1
(2)在Grep-Extract处设置为递归提取的内容
(3)在Redirections处设置“Follow Redirections ”为“always”(总是跟随重 定向)。
步 骤 8 :回到选项卡 Intruder->Payloads , 在 Payload Options 处 设 置 初 始 token值(即为步骤7(2)中选中的token值)
步骤9:点击右上方的“Start attack”按钮执行爆破攻击,并观察结果。通过请 求报文的长度或应答报文的内容判断,正确的用户名和密码为admin/password。
Metasploit
Metasploit平台概述
-
简介
-
Metasploit是一款开源的安全漏洞检测工具,同时Metasploit是免费的工具,因此安全工作人员常用Metasploit工具来检测系统的安全性。
-
Metasploit Framework (MSF)在2003年以开放源码方式发布,是可以自由获取的开发框架。它是一个强大的开源平台,供开发、测试和使用恶意代码,这个环境为渗透测试、shellcode编写和漏洞研究提供了一个可靠平台。
-
Metasploit核心中绝大部分由Ruby实现,一小部分由汇编和C语言实现。
-
-
发展历程一
-
Metasploit Framework最初是HD Moore个人的想法,当时他在一家安全公司工作,他于2003年10月发布了第一个基于Perl的Metasploit版本,一开始只有共11个漏洞利用程序。
-
随着Spoonm帮助和加入,HD于2004年4月重写了该项目并发布了 Metasploit 2.0。此版本包括19个漏洞和超过27个payload。在这个版本发布后不久,马特米勒(Skape)加入了Metasploit的开发团队,使得该项目日益流行,Metasploit Framework也受到来自信息安全界的大力支持,并迅速成为一个渗透测试必备的工具。
-
-
发展历程二
-
2007年,Metasploit团队使用Ruby编程语言完全重写并发布了Metasploit3.0,这次Metasploit从Perl到Ruby的迁移历时18个月,增加超过15万行的新代码。随着3.0版本的发布,Metasploit开始被广泛的采用,在整个安全社区也受到了大幅增加的帮助和贡献。
-
在2009年秋季,Rapid7收购了Metasploit,Rapid7是一个在漏洞扫描领域的领导者公司。被收购之后,Rapid7公司允许HD建立一个团队,仅仅专注于Metasploit Framework的开发。也正由于这样,这次收购使得MetasploitFramework开始更迅速地发展,HD Moore也成为了Rapid7公司的CSO及Metasploit首席架构师。
-
-
Metasploit官网
http://www.metasploit.com
-
Windows中下载安装Metasploit
-
从官方网站下载安装程序:metasploit-latest-windows-installer.exe
http://downloads.metasploit.com/data/releases/metasploit-latest-windows-installer.exe
-
安装前关闭杀毒软件和防火墙(另外,部分版本需要将区域语言选项设置为
“英语(美国)”)
-
安装过程会附带安装PostgreSQL数据库用以存储Metasploit内各模块、载荷等索引,加快搜索速度
-
安装完成后,在桌面生成Metasploit的快捷方式,右键以管理员身份运行将打开cmd并运行Metasploit控制台
-
-
linux中下载安装Metasploit
-
从GitHub获取
-
GIT clone https://github.com/rapid7/metasploit-framework.git
-
切换到Metasploit-框架目录,赋予msfsole执行权限并启动:
CD Metasploit-framework&&chmod+x msfsole&&./msfsole
-
使用以下命令下载一键式安装程序,具体安装进度试网络情况:
cd /opt && curl https://raw.githubusercontent.com/rapid7/metasploitomnibus/master/config/templates/metasploit-framework-wrappers/msfupdate.erb > msfinstall
chmod +x msfinstall && ./msfinstall
-
-
Kali中自带Metasploit
Metasploit文件结构、模块及常用命令
-
文件结构
路径:/usr/share/metasploit-framework/
-
config : MSF环境配置信息,数据库配置信息
-
data:后渗透模块的一些工具及payload ,第三方小工具集合,用户字典等数据信息
-
documentation: 用户说明文档及开发文档
-
external: MSF的一些基础扩展模块
-
lib:基础类和第三方模块类
-
modules: MSF系统工具模块
-
plugins:第三方插件接口
-
scripts : MSF的常用后渗透模块,区别于data里的后渗透模块,不需要加post参数和绝对路径,可以直接运行
-
tools:额外的小工具和第三方脚本工具
-
msfconsole : MSF基本命令行,集成了各种功能
-
msfd: MSF服务,非持久性服务
-
msfdb: MSF数据库
-
msfupdate: MSF更新模块,可以用来更新MSF模块
-
msfrpc: MSF的服务端,非持久性的rpc服务
-
msfrpcd:持久性的MSF本地服务,可以给远程用户提供rpc服务以及其他的http服务,可以通过xml进行数据传输。
-
-
Metasploit模块
-
exploits(渗透攻击/漏洞利用模块)
-
渗透攻击模块是利用发现的安全漏洞或配置弱点对远程目标进行攻击,以植入和运行攻击载荷,从而获得对远程目标系统访问的代码组件。流行的渗透攻击技术包括缓冲区溢出、Web应用程序漏洞攻击、用户配置错误等,其中包含攻击者或测试人员针对系统中的漏洞而设计的各种POC验证程序,以及用于破坏系统安全性的攻击代码,每个漏洞都有相应的攻击代码。
-
渗透攻击模块是Metasploit框架中最核心的功能组件。
-
-
payloads(攻击载荷模块)
-
攻击载荷是我们期望目标系统在被渗透攻击之后完成实际攻击功能的代码,成功渗 透目标后,用于在目标系统上运行任意命令或者执行特定代码。
-
攻击载荷模块从最简单的添加用户账号、提供命令行Shell,到基于图形化的VNC 界面控制,以及最复杂、具有大量后渗透攻击阶段功能特性的Meterpreter,这使 得渗透攻击者可以在选定渗透攻击代码之后,从很多适用的攻击载荷中选取他所中 意的模块进行灵活地组装,在渗透攻击后获得他所选择的控制会话类型,这种模块 化设计与灵活的组装模式也为渗透攻击者提供了极大的便利。
-
-
auxiliary(辅助模块)
该模块不会直接在测试者和目标主机之间建立访问,它们只负责执行扫描、嗅探、 指纹识别等相关功能以辅助渗透测试。
-
nops(空指令模块)
-
空指令(NOP)是一些对程序运行状态不会造成任何实质性影响的空操作或无关操 作指令。最典型的空指令就是空操作,在x86 CPU体系架构平台上的操作码是 0x90。
-
在渗透攻击构造邪恶数据缓冲区时,常常要在真正执行的Shellcode之前添加一段 空指令区。这样,当触发渗透攻击后跳转执行Shellcode时,就会有一个较大的安 全着陆区,从而避免受到内存地址随机化、返回地址计算偏差等原因造成的 Shellcode执行失败。
-
Matasploit框架中的空指令模块就是用来在攻击载荷中添加空指令区,以提高攻击 可靠性的组件。
-
-
encoders(编码器模块)
编码器模块通过对攻击载荷进行各种不同形式的编码,完成两大任务:一是确保攻 击载荷中不会出现渗透攻击过程中应加以避免的“坏字符” ;二是对攻击载荷进行 “免杀”处理,即逃避反病毒软件、IDS/IPS的检测与阻断。
-
post(后渗透攻击模块)
后渗透攻击模块主要用于在渗透攻击取得目标系统远程控制权之后,在受控系统中 进行各式各样的后渗透攻击动作,比如获取敏感信息、进一步横向拓展、实施跳板 攻击等。
-
evasion(规避模块)
规避模块主要用于规避Windows Defender防火墙、Windows应用程序控制策略 (applocker)等的检查。
-
-
利用Metasploit进行渗透测试的一般流程
扫描目标机系统,寻找可用漏洞
选择并配置一个渗透攻击(漏洞利用)模块(exploits) 选择并配置一个攻击载荷模块(payloads)
选择一种编码技术(encoders),用来绕过杀毒软件的查杀
执行渗透攻击
后渗透阶段的操作
-
Metasploit命令
-
Terminal终端下的常用命令
msfdb init //msf数据库初始化
msfdb delete //删除msf数据库并停止使用
msfdb start //启动msf数据库
msfdb stop //停止msf数据库
apt install metasploit framework //msf更新
msfvenom //多平台攻击载荷生成器
msf-nasm_shell //将汇编指令转换成为对应的16进制机器码
msfconsole //打开msf终端
-
在msf终端下,输入?或help,可查看终端命令集
-
-
核心命令(Core Commands)
-
模块命令(Module Commands)
-
数据库后端命令(Database Backend Commands)
-
msf终端下的常用命令
db_status //查看msf数据库连接状态
db_nmap //调用nmap扫描,并将扫描结果存入数据库
search //搜索含有关键字的模块
use //选择使用一个模块
show payload //显示该模块支持的payload
show options //显示该模块需要设置的参数
info //查看详细信息
set //使用模块后,设置模块所需要的参数的值(对应使用unset取消设置的 值)
back //返回上级状态 exploit/run //两个命令都表示运行攻击模块
sessions //查看当前连接的会话
-
exploits模块
-
exploits(渗透攻击/漏洞利用模块)
-
exploits模块支持的操作系统类别包括:AIS、BSDI、Dialup、FreeBSD、 Hpux、Irix、Linux、Netware、OSX、Solaris、Unix、Windows等。其中 Windows的溢出方式数量最多。
-
/usr/share/metasploit-framework/modules/exploits
-
-
exploit模块应用实例——ms17-010漏洞利用
环境准备
操作机:Kali Linux 2021.1,Metasploit Frameworks 6.0.30
目标机:Windows 7(含ms17-010漏洞)
-
ms17-010(Windows SMB远程执行代码漏洞)简介
-
微软安全公告KB4013389: https://docs.microsoft.com/zh-cn/security-updates/securitybulletins/2017/ms17-010
-
摘要
此安全更新程序修复了 Microsoft Windows 中 的 多 个 漏 洞 。 如果攻击者向 Windows SMBv1服务器发送特殊设计的消息,那么其中最严重的漏洞可能允许远 程执行代码。
-
-
exploit模块应用实例——ms17-010漏洞利用
-
步骤1:使用以下命令启动Metasploit:
msfdb init && msfconsole
-
步骤2:在msf终端下输入以下命令查找ms17-010相关的模块:
search ms17-010
-
步骤3:分别输入以下命令,使用smb_ms17_010模块对目标机进行漏洞检测, 确认其存在ms17-010漏洞:
use auxiliary/scanner/smb/smb_ms17_010 //使用smb_ms17_010模块
show options //查看该模块需要设置哪些参数 set RHOST 192.168.40.220 //设置目标机的IP地址
-
Nmap
Nmap介绍
简介:
-
Nmap是Linux下一款开源免费的网络发现(Network Discovery)和安全审计(Security Auditing)工具,软件名字Nmap是Network Mapper的简称。
-
Nmap最初由Fyodor在1996年开始创建,随后在开源社区众多的志愿者参与下,该工具逐渐成为最为流行的安全必备工具之一。
-
Nmap使用原始IP报文来发现网络上有哪些主机,这些主机提供什么服务(应用程序名和版本),服务运行在什么操作系统,它们使用什么类型的报文过滤器/防火墙,以及一些其他功能
安装包下载:
https://nmap.org/download.html
Nmap基本功能:
-
基本功能
主机发现
端口扫描
应用程序与版本信息侦测
操作系统侦测
-
附加功能
规避FW/IDS
NSE脚本定制与使用
Nmap命令语法格式:
nmap【空格】【选项|多选项|协议】【空格】【扫描目标说明】
注意:多个选项之间也是用空格进行分割的,如果某些选项需要指定某些参数,那么在这些选项与指定的参数之间一般也需要用空格进行分割。特殊情况下,有的选项与参数可以直接“连写” ,如-p80,-p是选项,80是参数。为了使Nmap语法更加严谨,建议严格用空格进行分割。
默认方式扫描
nmap <目标地址>
全面扫描
nmap -A -T -4 -v <目标地址>
主机发现
=>目标:确定目标主机是否在线(Alive,处于开启状态)
原理:与ping命令类似,发送探测包到目标主机,如果收到回复,则说明目标主机是开启的
探测方式
-
Nmap支持十多种不同的主机探测方法
-
ICMP ECHO / TIMESTAMP / NETMASK 报文
-
TCP SYN / ACK 报文
-
SCTP INIT / COOKIE-ECHO 报文
-
……
-
主机发现相关的命令选项
实例1:局域网内执行ping扫描
目标:扫描局域网192.168.40.1-192.168.40.254内哪些IP的主机在线。
命令:nmap -sP 192.168.40.1-254,或nmap -sP 192.168.40.0/24
说明:在局域网内,无论采用哪一种选项,Nmap都是通过ARP包来询问IP地址上的主机是否活动的,如果收到ARP回复包,那么说明主机在线。
实例2:跨网段执行ping扫描
目标:扫描跨网段目标主机
192.168.50.5是否在线。
命令:nmap -sP 192.168.50.5
说明:扫描跨网段目标主机时,使用-sP或-sn选项,默认情况下Nmap会依次发送4种不同类型的数据包(ICMP echo request、TCP SYN
packet to port 443、TCP ACK
packet to port 80、ICMP
timestamp request)来探测目标
主机是否在线,只要收到其中一个包
的回复,就证明目标机在线。
实例3:--packet-trace的使用
端口扫描
目标:确定目标主机的TCP/UDP端口的开放情况
原理:发送TCP、UDP等类型的探测包到目标端口,根据收到的回复包判定端
口是否开放
-
端口的六个状态
-
open:端口是开放的
-
closed:端口是关闭的
-
filtered:端口被防火墙IDS/IPS屏蔽,无法确定其状态
-
unfiltered:端口没有被屏蔽,但是否开放需要进一步确定
-
open|filtered:端口是开放的或被屏蔽
-
closed|filtered :端口是关闭的或被屏蔽
端口扫描相关的命令选项
实例4:-p选项的应用——指定扫描的端口号
===》关于-p选项的说明:默认情况下,Nmap仅对用-p指定的TCP端口进行扫描,扫描方式为-sS(TCP SYN扫描)。如果既要扫描TCP端口,又要扫描UDP端口,则可以用“T:”“U:”参数指定目标端口,并指定-sU(UDP扫描方式)和至少一种TCP扫描方式,如:
nmap -p T:139, U:53 -sS -sU 192.168.40.178
TCP SYN扫描(-sS)原理:
Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标机发送TCP RST报文以重置此连接;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。
实例5:-sS选项的应用——TCP SYN扫描
TCP connect扫描(-sT)原理
==》Nmap向目标端口发送TCP SYN报文,如果目标机返回TCP SYN+ACK报文,则说明目标端口处于开放状态,同时Nmap会紧接着向目标机依次发送TCP ACK、TCP RST+ACK完成三次握手和重置此连接;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。
实例6:-sT选项的应用——TCP
TCP ACK扫描(-sA)原理
-
Nmap向目标端口发送TCP ACK报文,无论目标端口是否处于开放状态,目标机都会返回TCP RST报文。如果Nmap主机能收到此TCP RST报文,则说明目标端口未被防火墙屏蔽。
-
TCP ACK扫描只能用于确定防火墙是否屏蔽某个端口,可以辅助TCP SYN的方式来判断目标主机防火墙的状况。
实例7:-sA选项的应用——TCP ACK扫描
隐蔽扫描(-sF/-sN/-sX)原理
-
Nmap向目标端口发送TCP FIN(-sF) / NULL(-sN) / FIN+PSH+URG(-sX) 报文,对于Linux系统的目标机,如果目标机未响应,则说明目标端口处于开放状态或被防火墙屏蔽;如果目标机返回TCP RST+ACK报文,则说明目标端口处于关闭状态。
-
对于Windows系统的目标机,无论目标端口处于开放还是关闭状态,目标机都会返回TCP RST+ACK报文。
-
因此,隐蔽扫描方式适合于Linux系统的目标机端口扫描。
实例8:隐蔽扫描选项(-sF/-sN/-sX)的应用
###应用程序与版本信息侦测
-
目标:识别目标主机开放的TCP/UDP端口上运行的服务及版本信息
-
流程
-
首先检查open与open|filtered状态的端口是否在排除端口列表内。如果在排除列表,将该端口剔除。
-
如果是TCP端口,尝试建立TCP连接。尝试等待片刻(通常6秒或更多,具体时间可以查询文件nmap-services-probes中Probe TCP NULL q||对应的totalwaitms)。通常在等待时间内,会接收到目标机发送的“WelcomeBanner”信息。Nmap将接收到的Banner与nmapservices-probes中NULL probe中的签名进行对比,查找对应应用程序的名字与版本信息。
-
如果通过“Welcome Banner”无法确定应用程序版本,那么Nmap再尝试发送其他的探测包(即从nmap-services-probes中挑选合适的probe),将probe得到的回复包与数据库中的签名进行对比。如果反复探测都无法得出具体应用,那么打印出应用返回报文,让用户自行进一步判定。
-
如果是UDP端口,那么直接使用nmap-services-probes中探测包进行探测匹配,根据结果对比分析出UDP应用服务类型。
-
如果探测到应用程序是SSL,那么调用openSSL进一步的侦查运行在SSL之上的具体的应用类型。
-
如果探测到应用程序是SunRPC,那么调用brute-force RPC grinder进一步探测具体服务。
-
-
nmap-services-probes(服务版本数据库文件)
-
默认路径:/usr/share/nmap/nmap-services-probes
-
应用程序与版本信息侦测相关的命令选项
实例9:-sV选项的应用
实例10:--version-trace选项的应用——跟踪版本扫描活动
操作系统侦测
-
目标:识别目标主机操作系统的类型
-
侦测方法:网络协议栈指纹识别技术
常用的网络协议栈指纹识别方法
-
TTL
-
TTL:Time To Live,即数据包的“存活时间”,表示一个数据包在被丢弃之前可以通过多少跃点(Hop)。不同操作系统的缺省TTL值往往是不同的。
-
常见操作系统的TTL值
Windows 9x/NT/2000 Intel TTL=128
Digital Unix 4.0 Alpha TTL= 60
Linux 2.2.x Intel TTL= 64
Netware 4.11 Intel TTL= 128
AIX 4.3.x IBM/RS6000 TTL= 60
Cisco 12.0 2514 TTL= 255
Solaris 8 Intel/Sparc TTL= 64
-
Windows系统修改TTL值的方法
打开注册表,在
“HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Tcpip\Par
ameters”新建一个“DefaultTTL”Dword键值进行自定义
-
-
DF位
DF(不分段)位识别:不同OS对DF位有不同的处理方式,有些OS设置DF位,有些不设置DF位;还有一些OS在特定场合设置DF位,在其它场合不设置DF位。
-
Window Size
-
Window Size:TCP接收(发送)窗口大小。它决定了接收信息的机器在收到多少数据包后发送ACK包。
-
特定操作系统的缺省Window Size基本是常数,例如AIX 用0x3F25,Windows、OpenBSD 、FreeBSD用0x402E。
-
一般地,UNIXd的Window Size较大。Windows、路由器、交换机等的较小。
-
-
ACK 序号
不同的OS处理ACK序号时是不同的。如果发送一个FIN+PSH+URG的数据包到一个关闭的TCP端口,大多数OS会把回应ACK包的序号设置为发送的包的初始序号,Windows和一些打印机则会发送序号为初始序号加1的ACK包。
-
对FIN包的响应
发送一个只有FIN标志位的TCP数据包给一个打开的端口,Linux等系统不响应;有些系统如 Windows、CISCO、HP/UX等,发回一个RST。
-
ISN (初始化序列号)
不同的OS在选择TCP ISN时采用不同的方法:一些UNIX系统采用传统的64K递增方法;
较新的Solaris、IRIX、FreeBSD、Digital Unix、Cray等系统采用随机增量的方法;Linux 2.0、OpenVMS、AIX等系统采用真随机方法;Windows系统采用一种时间相
关的模型;还有一些系统使用常数,如3Com集线器使用0x803,Apple LaserWriter
打印机使用0xC7001。
-
主机使用的端口
一些OS会开放特殊的端口,如Windows的137、139;一些网络设备,如入侵检测系统、防火墙等也开放自己特殊的端口。
操作系统的侦测
nmap-os-db(操作系统数据库文件)
-
该数据库包含了超过2600种操作系统的指纹信息,Nmap把TCP和UDP报文发送到目标机器上,然后将检查结果和nmap-os-db数据库进行比对
-
默认路径:/usr/share/nmap/nmap-os-db
操作系统侦测相关的命令选项
实例11:-O选项的应用
实例12:-A选项的应用
规避FW/IDS技术
-
目标:绕过目标主机的防火墙、入侵检测系统等防护手段
-
常用选项
实例13:-T选项的应用——控制扫描速度
使用-T(0~5)可以启用时序选项,一般来说,数字越大,速度越快,精度越低
-
-T0(偏执的):非常慢的扫描,用于IDS逃避
-
-T1(鬼祟的):缓慢的扫描,用于IDS逃避
-
-T2(文雅的):降低速度以降低对带宽的消耗,此选项一般不常用
-
-T3(普通的):默认,根据目标的反应自动调
整时间
-
-T4(野蛮的):快速扫描,常用扫描方式,需要在很好的网络环境下使用
-
-T5(疯狂的):极速扫描,以牺牲准确度来提升扫描速度
实例14:-D选项的应用——源IP地址欺骗
实例15:空闲扫描(-sI)的应用
实例16:--spoof-mac选项的应用——源MAC地址欺骗
-
所用命令:nmap --spoof-mac 0 <目标IP>,其中参数0表示随机分配一个MAC 地址
-
也可以手动指定MAC地址,如:nmap --spoof-mac aa:bb:cc:dd:ee:ff <目标 IP>
NSE脚本的简单应用
NSE和Lua
-
除了常规的网络扫描,Nmap还可根据NSE (Nmap scripting Engine)的脚本 进行大量渗透工作,这种脚本基于Lua语言编写。
-
脚本存放目录:/usr/share/nmap/scripts/
NSE脚本运用
常用选项:
实例17:暴力破解脚本(--script brute)应用
提供暴力破解的方式,可对数据库、SMB、SNMP等进行简单密码的暴力猜解
实例18:漏洞扫描脚本(--script vuln)应用
检查是否存在常见的漏洞