网络安全
网络安全
常见概念
计算机漏洞安全相关的概念 POC 、EXP 、VUL 、CVE 、0DAY_www.xpshuai.cn 的博客-CSDN 博客_poc 漏洞 什么意思
POC
:Proof Of Concept
,中文意思是“观点证明
”。这个短语会在漏洞报告中使用,漏洞报告中的 POC 则是 一段说明 或者 一个攻击的样例,使得读者能够确认这个漏洞是真实存在的。EXP
:Exploit
,中文意思是“漏洞利用
”。意思是一段对漏洞 如何利用的详细说明或者一个演示的漏洞攻击代码,可以使得读者完全了解漏洞的机理以及利用的方法。VUL
:Vulnerability
的缩写,泛指漏洞
。CVE漏洞编号
:Common Vulnerabilities & Exposures
- 公共漏洞和暴露,例如 CVE-2015-0057、CVE-1999-0001 等等。CVE 就好像是一个字典表,为广泛认同的信息安全漏洞或者已经暴露出来的弱点给出一个公共的名称。如果在一个漏洞报告中指明的一个漏洞,如果有 CVE 名称,你就可以快速地在任何其它 CVE 兼容的数据库中找到相应修补的信息,解决安全问题。
- 可以在 CVE - CVE (mitre.org) 网站根据漏洞的 CVE 编号搜索该漏洞的介绍。
0DAY
- 在计算机领域中,零日漏洞或零时差漏洞(``Zero-day exploit
) 通常是指还没有补丁的安全漏洞,而零日攻击或零时差攻击(
Zero-day attack`) 则是指利用这种漏洞进行的攻击。提供该漏洞细节或者利用程序的人通常是该漏洞的发现者。零日漏洞的利用程序对网络安全具有巨大威胁,因此零日漏洞不但是黑客的最爱,掌握多少零日漏洞也成为评价黑客技术水平的一个重要参数。 - 零日漏洞及其利用代码不仅对犯罪黑客而言,具有极高的利用价值,一些国家间谍和网军部队,例如美国国家安全局和美国网战司令部也非常重视这些信息。据路透社报告称美国政府是零日漏洞黑市的最大买家。
- 在计算机领域中,零日漏洞或零时差漏洞(``Zero-day exploit
CAN
: CAN 和 CVE 的唯一区别是前者代表了候选条目,还未经 CVE 编辑委员会认可,而后者则是经过认可的条目。 然后,两种类型的条目都对公众可见,条目的编号不会随着认可而改变—仅仅是“CAN”前缀替换成了“CVE”。BUGTRAQ
: 一个完整的对计算机安全漏洞(它们是什么,如何利用它们,以及如何修补它们) 的公告及详细论述进行适度披露的邮件列表CNCVE
: 中国(CN) 的 CVE ,是CNCERT/CC(国家计算机网络应急处理协调中心)
为漏洞进行编号的一个自己的标准。 CNCVE 不但包含漏洞的描述予以统一定义,还将包括漏洞的补丁、验证等措施,更方便、有用。CNVD
: 国家信息安全漏洞共享平台。是由国家计算机网络应急技术处理协调中心(简称 CNCERT) 联合国内重要信息系统单位、基础电信运营商、网络安全厂商、软件厂商和互联网企业建立的信息安全漏洞信息共享知识库。CNNVD
: 中国国家信息安全漏洞库。是中国信息安全测评中心为切实履行漏洞分析和风险评估的职能,负责建设运维的国家信息安全漏洞库,为我国信息安全保障提供基础服务CVSS
:(Common Vulnerability Scoring System)
通用漏洞评分系统,行业公开标准,用来评测漏洞的严重程度,0-10 分值越高越严重,美国国家漏洞数据库官网:NVD - Search and Statistics (nist.gov) 可查询 CVE 对应 CVSS 分值PS:评分会受时间和空间影响,如随着时间推移,漏洞相关补丁越多,可被利用性越低;漏洞存在不同的环境,也会影响漏洞的威胁程度
CPE
:(Common Platform Enumeration)
以标准化方式为软件应用程序、操作系统及硬件命名的方法
常见端口梳理
大多数应用程序通过 TCP 或 UDP 端口进行通信。端口 0-1023 通常具有特权,需要管理员或超级用户访问权限才能将网络套接字绑定到具有相应端口的 IP
不过 1024 及以上的端口则是可以自由分配的, 在 De Facto Ports (matt-rickard.com) 中, 作者汇总了 2023 年生产环境中常见的默认端口, 发现了一些有趣的现象:
- 奇数且易于记忆的端口常用于开发服务器; 3000, 5000, 9000 在一体式 Web 框架中比较常见
- 具有相关特权应用程序端口(如 SMTP, DNS) 的应用程序有时会使用重复的字符串(例如 多播DNS 为 5353, SMTP 为 3535, Web 服务器为 8080)
- 除此以外, 似乎趋势上会选择一个低熵数字(例如 Jupyter 的 8888) 或一个完全随机的不太可能引起冲突的数字 (例如 Minecraft 的 25365) 来作为端口号使用
常见的还有
端口号 | 应用 |
---|---|
1080 | SOCK Proxy |
2049 | Network File System (NFS)(网络文件系统 ) |
2181 | Apache ZooKeeper |
2375 | Docker REST API (HTTP) |
2376 | Docker REST API (HTTPS) |
3000 | 开发框架的常用端口 Ruby on Rails 使用端口 3000 作为其 Web 服务器的默认开发端口 Node 框架也常使用此端口(例如 Express.js、Meteor、Create React App、NextJS、SvelteJS、Astro、Remix) |
3306 | MySQL |
3478 | STUN, TURN (NAT Traversal) |
4000 | Phoenix, Jekyll (二者都是网站生成器, 后者还可以直接部署在 Github Pages 上) |
4001 | etcd |
4200 | AngularJS |
4567 | Sinatra |
5000 | 也是开发框架的常见端口 Flask (Python) 使用 5000 作为默认开发端口。 ASP.NET Core 也是如此 |
5222 | XMPP (Extensible Messaging and Presence Protocol)(XMPP (Extensible Messaging and Presence Protocol)) |
5349 | STUN, TURN over TLS |
5353 | Multicast DNS(多播DNS) --- 遵循与 SMTP 相同的模式, 偶尔在端口 3535 上运行. 复制特权端口(DNS 使用 53) |
5432 | PostgreSQL |
5900 | VNC |
6000 | X11 |
6379 | 6379 |
6660 | IRC (Internet Relay Chat) |
6881 | BitTorrent |
8000 | Python 开发框架常用端口 包括 Django 和 Python3 的 http.server |
8080 | HTTP Web 服务器常用端口 |
8333 | Bitcoin |
8888 | Jupyter Notebook |
8983 | Apache Solr |
9000 | 被各种应用程序使用,但没有中心主题或非常知名的应用程序 |
25565 | Minecraft |
27017 | MongoDB |
51820 | WireGuard |
环境搭建
CommandoVM
Complete Mandiant Offective VM(“CommandoVM”) 是一个全面的、可定制的、基于 Windows 的安全发行版,用于渗透测试和红队。 CommandoVM 附带了 Kali Linux 中未包含的各种攻击工具,这些工具突出了 Windows 作为攻击平台的有效性。
这里只是捋一下这套环境搭建的步骤
首先准备一台虚拟机, 配置如下:
- Windows 10 22H2
- 200 GB 硬盘
- 4+ GB 内存
- 2 个网络适配器
关闭 Windows 的病毒防护, 可以参考 端点安全 - 永久关闭 Windows 实时防护 | DailyNotes (ayusummer.github.io)
然后重启虚拟机
以管理员权限运行 powershell 然后把脚本限制解了:
Set-ExecutionPolicy Unrestricted -force
切到上图中的解压后的仓库根目录
cd xxxxx
# 解锁所有项目文件
Get-ChildItem .\ -Recurse | Unblock-File
Get-ChildItem .\ -Recurse
: 获取当前目录及其子目录下的所有文件|
管道符, 将前一个命令的输出传递给下一个命令Unlock-File
: 用于解除文件的 "已阻止" 属性。 "已阻止" 属性通常与从不受信任的来源下载的文件相关联,以确保文件不会在打开时执行潜在的危险操作。 通过运行Unblock-File
命令可以解除这个属性,在这里由于要下载大量的工具因此需要接触禁止从不信任来源下载文件的限制
准备一个梯子覆盖系统代理, 后续安装脚本会走系统代理
把系统默认输入法改成英文, 或者把默认模式改成英语:
这是因为后续有些软件会有安装界面, 脚本会模拟键盘把路径输进去, 用中文的话会缺一个回车导致路径打不出来而引起中断, 效果如下:
由于没有回车, 导致这些字符实际上并没有成功输入完, 也就会引起异常
# 运行安装脚本
.\install.ps1
这里我选择全部安装, 需要点进 Configure Profile 来自定义
点击上图中的
<<
将可选的包全选上以便后续来安装需要注意的是其实里面有些工具比较久或者不兼容系统, 可以在出现问题时考量是否舍弃
点击 Install
后会提示输入电脑的开机密码, 这里输入解锁屏幕的密码即可, 后面整个安装过程后会有多次重启电脑的操作
安装过程可能会比较漫长, 需要一些耐心等待以及排错, 下面即为一些遇到的错误及解决方案:
有一些包需要通过 choco
安装, 不过也许是存的 hash 比较旧, 或者说真的拉下来的包不对劲, 总之 hash 对不上便不会继续安装, 此时则需要手动翻找下载源然后校对是否安全来决定是否安装
Get-FileHash -Path [文件路径] -Algorithm SHA256
手动去官网下载下然后对一下哈希,能对上, 说明是存的哈希旧了, 可以使用如下命令忽略校验强制安装
choco install --ignore-checksums -y [包名]
vulhub
在 Ubuntu2204 上安装 Docker
# Install the latest version docker
curl -s https://get.docker.com/ | sh
# Run docker service
systemctl start docker
然后拉取 vulhub 仓库按照相应漏洞中的 README 文件操作即可
vulhub 捉虫
elasticsearch/CVE-2015-3337/Dockerfile
FROM vulhub/elasticsearch:1.4.4 LABEL maintainer="phithon <root@leavesongs.com>" RUN set -ex \ && plugin --install mobz/elasticsearch-head/1.x -u https://codeload.github.com/mobz/elasticsearch-head/zip/refs/heads/1.x
原来是如下这样, 是无法成功拉取的
RUN set -ex \ && plugin -install mobz/elasticsearch-head/1.x
官方的解决方案:
RUN set -ex \ && plugin -install mobz/elasticsearch-head
VULFOCUS
fofapro/vulfocus: 🚀Vulfocus 是一个漏洞集成平台,将漏洞环境 docker 镜像,放入即可使用,开箱即用。 (github.com)
使用 docker-compose 安装 VULFCOUS
git clone https://github.com/fofapro/vulfocus.git
cd vulfocus
将 docker-compose.yaml
中如下的两个 VUL_IP
改成本机 IP 即可
# 启动并后台运行 VULFOCUS 容器
docker compose up -d
访问默认的 80 端口服务即可看到 VULFOCUS 登录页
默认账密 admin/admin
使用 OpenSSL 创建自签名 SSL 证书
最近有给站点上 HTTPS 的需求, 且在内网使用, 所以有了自签名证书的需求
自签名 SSL 证书是由创建它的人而不是受信任的证书颁发机构签名的证书。自签名证书可以与受信任的 CA 签名 SSL 证书具有相同的加密级别。
在浏览器中访问自签名证书的 HTTPS 站点时会提示不安全的链接
自签名证书常用于测试以及内部使用, 不应当用于正式的生产环境
安装 openssl
这里使用 openssl 工具包生成自签名证书, 可以使用 openssl version
命令检查系统是否安装了 openssl, 如果未安装则可以使用如下命令安装
sudo apt install openssl
sudo yum install openssl
创建自签名 SSL 证书
可以使用 openssl req
创建自签名 SSL 证书
openssl req -newkey rsa:4096 \
-x509 \
-sha256 \
-days 3650 \
-nodes \
-out example.crt \
-keyout example.key
-newkey rsa:4096
-创建新的证书请求和 4096 位 RSA 密钥。默认值为 2048 位。-x509
-创建 X.509 证书。-sha256
-使用 265 位 SHA(安全哈希算法) 。-days 3650
-认证证书的天数。 3650 是 10 年。您可以使用任何正整数。-nodes
-创建没有密码的密钥。-out example.crt
-指定将新创建的证书写入的文件名。您可以指定任何文件名。-keyout example.key
-指定要写入新创建的私钥的文件名。您可以指定任何文件名。
有关
openssl req
命令选项的更多信息,请访问 OpenSSL req 文档页面。
回车后可以看到如下回显:
输入相应信息后会在当前目录生成证书与私钥