参考:https://www.yuque.com/weiker/xiaodi/xydntt
基础知识
基础名词概念
域名
参考:https://www.cnblogs.com/guanghe/p/11975387.html
- 注册
(1)Godaddy
(2)Gandi
(3)Hover
(4)Namesilo
(5)Namecheap
(6)万网 - 顶级域名(一级域名)
一个点
1 | Top-level domains,first-level domains(TLDs),也翻译为国际顶级域名,也成一级域名。 |
- 二级域名
两个点
1 | 二级域(或称二级域名;英语:Second-level domain;英文缩写:SLD)是互联网DNS等级之中,处于顶级域名之下的域。二级域名是域名的倒数第二个部分,例如在域名example.baidu.com中,二级域名是Baidu。 |
- 多级域名
多个点
二级以上域名 - 注意
- 域名对安全测试的意义
测试增加更多可能性,进行渗透测试时,其主域名找不到漏洞时,就可以尝试去测试收集到的子域名,有可能测试子域名网站时会有意向不到的效果,然后可以由此横向到主网站。
DNS(域名地址服务协议)
- 什么是 DNS
主要英语域名和 ip 地址的相互转换
使用 ping 命令查看 dns 与 ip 地址 - 本地 host 和 DNS 关系
(1)如何查看本地 Hosts 文件:
1)Win + R:打开运行输入 drivers
2)输入:c:\windows\system32\drivers\etc
(2)Hosts 文件主要作用是定义 IP 地址和主机名的映射关系,是一个映射 IP 地址和主机名的规定。当我们使用 ping 命令时,会优先到 host 文件中寻找,找不到才会定位互联网。
(3)游戏下载有可能会修改 Host 文件内容,加快下载速度。
- 常见的 DNS 攻击
参考:http://t.csdn.cn/fvJDi
-
DDOS:攻击者可以伪造自己的 DNS 服务器地址,同时发送大量请求给其他服务器。其他服务器的回复会被发送到被伪造服务器的真实地址,造成该服务器无法处理请求而崩溃。攻击者同样可以通过利用 DNS 协议中存在的漏洞,恶意创造一个载荷过大的请求,造成目标 DNS 服务器崩溃。
-
DNS 缓存中毒:缓存中毒攻击者 (cache poisoning) 给 DNS 服务器注入非法网络域名地址,如果服务器接受这个非法地址,那说明其缓存就被攻击了,而且以后响应的域名请求将会受黑客所控。当这些非法地址进入服务器缓存,用户的浏览器或者邮件服务器就会自动跳转到 DNS 指定的地址。
(1)攻击原理
DNS 被设计成 C/S 应用程序,需要把地址映射为名字或把名字映射为地址的主机调用 DNS 解析程序,向最近的 DNS 服务器发出查询请求,此时,DNS 服务器可以有两种方式来响应客户的请求,一种叫递归解析,另一种叫迭代解析。DNS 缓存中毒攻击主要是针对递归解析方式工作并缓存非本域的解析结果的 DNS 服务器。下面就主要分析递归解析过程。
a. 本机会发起域名解析请求,解析程序会向首选 DNS 服务器 DNS-A 发起域名解析请求;
b. DNS-A 收到解析请求后会去查询自己的管辖域,如果请求的是自己管辖域的域名就会直接将查询结果返回给解析程序,如果不在 DNS-A 的管辖域内,DNS-A 就向它的上级服务器 DNS-B 发起解析请求,等待 DNS-B 的查询结果;
c. 如果 DNS-B 解析不了,就会告诉 DNS-A,我解析不了,DNS-C 可能会知道;
d. DNS-A 就会给 DNS-C 发出解析请求,等到 DNS-C 的查询结果;
1 | 如果某个攻击者可以预测和伪造响应数据包,他就可以对DNS服务器发起缓存中毒攻击了。由于DNS服务器发送的数据包中的TID只有16位,而且大部分的DNS实现发出的请求中的源端口都是固定不变的。因此,攻击者就可以伪造DNS响应包,DNS服务器在收到响应包后就会将解析结果保存在自己的缓存中,进而实现了缓存中毒攻击。 |
(2)DNS 响应数据包解析原理
DNS 服务器不是对收到的任何 DNS 响应数据包都会接受,它会解码数据包,检查数据包是否符合接受的标准
a. 在 DNS 服务器发出的查询请求包中包含了它的 UDP 端口号,返回的响应数据包的目的端口号不对,网络协议栈就会直接丢弃该数据包。
b. DNS 服务器收到响应数据包后,可以通过检查问题域与发出的查询包中的问题域是否一致来判断响应数据包的合法性。
c. DNS 服务器每发出一个查询请求都会分配对应的一个查询 ID 号,在内部对应是某一个域名查询请求,在 DNS 服务器内部区分不同的查询就是 TID 号,如果 DNS 服务器收到的响应数据包中的 TID 号不在 DNS 服务器等待响应数据的 TID 中,服务器就会丢弃该数据包。
d. 响应数据包中的授权域和附加域
授权域和附加域中的域名必须和问题域中的域名是同属于某个域名下的子域名。
- 域名劫持(DNS 重定向)
四种基本类型
(1)本地 DNS 劫持 — 攻击者在用户的计算机上安装木马恶意软件,并更改本地 DNS 设置以将用户重定向到恶意站点。
(2)路由器 DNS 劫持 — 许多路由器都有默认密码或固件漏洞。攻击者可以接管路由器并覆盖 DNS 设置,从而影响连接到该路由器的所有用户。
(3)中间人 DNS 攻击 —— 攻击者拦截用户和 DNS 服务器之间的通信,并提供指向恶意站点的不同目标 IP 地址。
(4)流氓 DNS 服务器 —— 攻击者可以入侵 DNS 服务器,并更改 DNS 记录以将 DNS 请求重定向到恶意站点。
-
DNS 查询嗅探
(1)获取 DNS 配置信息
(2)针对这些情况,我们需要对 DNS 服务器需要采取特别的安全保护措施,在防火墙网络中,分开设置内部 DNS 服务器和外部 DNS 服务器,连接外部服务的外部 DNS 服务器上不留有对外禁止访问的内部网络系统的服务器,做到内外网络服务器分割。 -
ARP 攻击
就是通过伪造 IP 地址和 MAC 地址实现 ARP 欺骗,能够在网络中产生大量的 ARP 通信量使网络阻塞,攻击者只要持续不断的发出伪造的 ARP 响应包就能更改目标主机 ARP 缓存中的 IP-MAC 条目,造成网络中断或中间人攻击。 -
本机劫持
感染病毒
CDN
- 概念
CDN 的全称是 Content DeliveryNetwork,即内容分发网络。CDN 利用全局负载均衡技术将用户的访问指向离用户最近的工作正常的流媒体服务器上,由流媒体服务器直接响应用户的请求。服务器中如果没有用户要访问的内容,会根据配置自动从原服务器抓取相应的内容并提供给用户。
- 问题
(1)当我们扫描网站时,有可能扫描的不是真正的服务器,只是缓存在较近节点服务器的内容。
(2)单纯只使用 DNS 解析,直接 PING 就会显示出自己的真实 IP, 如果又使用 CDN,PING 出来的 IP 就不是用户的真实 IP 而是 CDN 服务器的 IP 节点。需要绕过 CDN 后去找真实 IP 地址。
- 目的
使用户可就近取得所需内容,解决 Internet 网络拥挤的状况,提高用户访问网站的响应速度。 - 观察
通过超级 ping 的网站可以看到 CDN 的解析情况,网站:https://www.ping.cn/ping/cdivtc.com
脚本语言
- 常见的脚本语言
常见的脚本语言有:Python、JavaScript、Asp (逐渐淘汰,基本都是小站点在使用)、Aspx、Php (目前比较流行)javaweb、 pl、cgi 等
一般会使用一些 web 框架 - 知识点
熟悉常见的脚本,读懂脚本语言函数,了解安全机制,熟悉开发,能够进行代码审计
后门
- 概念
- 后门是指绕过安全控制而获取对程序或系统访问权的方法。
- 后门的最主要目的就是方便以后再次秘密进入或者控制系统。
- 后门的分类
- 网页后门
- 线程插入后门
- 扩展后门
- C/S 后门(客户端服务器后门)
- 免杀
它指的是一种能使病毒木马免于被杀毒软件查杀的技术。由于免杀技术的涉猎面非常广,其中包含反汇编、逆向工程、系统漏洞等黑客技术。其内容基本上都是修改病毒、木马的内容改变特征码
web
- web 的组成框架模型
不同用途,不同目的。针对测试的漏洞特点也不同
- 架构漏洞安全测试
-
通信层
主要测试通信协议的安全,系统开放的端口,其中操作系统提供网络层和数据链路层协议,存在问题的可能性较小,一般关注开源协议已存在漏洞即可,无需重点关注。应用层服务与协议一般由产品形态决定,产品中可以自定义配置相关协议与参数,需要重点关注与测试。 -
应用层
应用层包含开发人员开发代码,为整个安全测试的核心模块。主要包括 web 安全测试,源码安全测试。其中 web 安全测试从 web 访问服务的维度,偏向黑盒,进行安全测试。源码安全测试从代码的维度,偏向白盒,进行安全测试。 -
系统层
主要测试操作系统安全,数据库服务安全,web 服务器安全,以及其他一些中间件的安全。 -
管理层
主要包括产品资料的安全测试,安全策略制定,协调各个层面的安全测试以及安全风险的整体评估。
- web 相关漏洞
- web 源码类对应漏洞
sql 注入、文件上传、xss、代码执行、变量覆盖、逻辑漏洞、反序列化等。 - web 中间件对应漏洞
- web 系统层对应漏洞
- web 数据库对应漏洞
- app 或者 oc 应用结合
- 其他第三方
其他
- 子域名查询
- 搜索引擎枚举(爬虫原理)
- 工具爆破(layer 子域名挖掘机)用字典进行爆破
- 域名站点查询
- app 抓包测试
下载模拟器用抓包工具抓包
- ip 扫描有更多可能性
目录备份文件扫描,ip 一般是在域名的上一级可能会有更多惊喜
数据包扩展
(http)和(https)
参考:https://www.runoob.com/w3cnote/http-vs-https.html
https://www.cnblogs.com/wanghuaqiang/p/12093563.html
- http 和 https 区别
- HTTP 明文传输,数据都是未加密的,安全性较差,HTTPS(SSL+HTTP) 数据传输过程是加密的,安全性较好。
- 使用 HTTPS 协议需要到 CA(Certificate Authority,数字证书认证机构) 申请证书,一般免费证书较少,因而需要一定费用。证书颁发机构如:Symantec、Comodo、GoDaddy 和 GlobalSign 等。
- HTTP 页面响应速度比 HTTPS 快,主要是因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS 除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。
- http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
HTTPS 其实就是建构在 SSL/TLS 之上的 HTTP 协议,所以,要比较 HTTPS 比 HTTP 要更耗费服务器资源。
- https 工作原理
- http 头
HTTP 的头域包括通用头、请求头、响应头和实体头四个部分。每个头域由一个域名,冒号(:)和域值三部分组成。
- 通用头部:是客户端和服务器都可以使用的头部,可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能,如 Date 头部。
- 请求头部:是请求报文特有的,它们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据,如 Accept 头部。
- 响应头部:便于客户端提供信息,比如,客服端在与哪种类型的服务器进行交互,如 Server 头部。
- 实体头部:指的是用于应对实体主体部分的头部,比如,可以用实体头部来说明实体主体部分的数据类型,如 Content-Type 头部。
请求和响应数据包
- 通信过程
建立连接 ——> 发送请求数据包 ——> 返回响应数据包 ——> 关闭连接 - Request 请求数据包数据格式
- 请求行:请求方法、请求 URL 和 http 版本,空格分开
例如:GET /index.html HTTP/1.1
(1)常见请求方法
1)GET 请求指定的页面信息,并返回实体主体。
2)HEAD 类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头
3)POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和 / 或已有资源的修改。
4)PUT 从客户端向服务器传送的数据取代指定的文档的内容。
5)DELETE 请求服务器删除指定的页面。
6)CONNECT HTTP/1.1 协议中预留给能够将连接改为管道方式的代理服务器。
7)OPTIONS 允许客户端查看服务器的性能。
8)TRACE 回显服务器收到的请求,主要用于测试或诊断。
9)PATCH 是对 PUT 方法的补充,用来对已知资源进行局部更新 。
-
请求头:一些键值对,一般由 w3c 定义,浏览器与 web 服务器之间都可以发送,表示特定的某种含义
详细参考:https://www.cnblogs.com/wanghuaqiang/p/12093563.html
个人感觉常见请求头:
(1)Accept
告诉 WEB 服务器自己接受什么介质类型,*/*
表示任何类型,type/*
表示该类型下的所有子类型,type/sub-type。
(2)Authorization
当客户端接收到来自 WEB 服务器的 WWW-Authenticate 响应时,用该头部来回应自己的身份验证信息给 WEB 服务器。
(3)Range
浏览器(比如 Flashget 多线程下载时)告诉 WEB 服务器自己想取对象的哪部分。例如:Range: bytes=1173546
(4)Proxy-Authenticate
代理服务器响应浏览器,要求其提供代理身份验证信息。
(5)Host
客户端指定自己想访问的 WEB 服务器的域名 / IP 地址和端口号。如 Host:rss.sina.com.cn
(6)Referer
浏览器向 WEB 服务器表明自己是从哪个网页 URL 获得点击当前请求中的网址 / URL,例如:Referer:http://www.ecdoer.com/
(7)User-Agent
浏览器表明自己的身份(是哪种浏览器)。例如:User-Agent:Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN;rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14 -
【空行】请求头与请求体之间用一个空行隔开;
-
请求体:要发送的数据 (一般 post 方式会使用);
例:userName=123&password=123&returnUrl=/
- Response 返回数据包数据格式
- 状态行
协议版本、数字形式的状态代码和状态描述,每个元素之间以空格分隔。 - 响应头标
包含服务器类型、日期、长度、内容类型等。 - 空行
响应头与响应体之间用空行隔开。 - 响应数据
浏览器会将实体内容中的数据提取出来,生成相应页面。 - 响应状态码
访问一个网页时,浏览器会向 web 服务器发出请求。此网页所在的服务器会返回一个包含 HTTP 状态码的信息头用以响应浏览器的请求。
状态码分类:
(1)1XX- 信息型,服务器收到请求,需要请求者继续操作。
(2)2XX- 成功型,请求成功收到,理解并处理。
(3)3XX - 重定向,需要进一步的操作以完成请求。
(4)4XX - 客户端错误,请求包含语法错误或无法完成请求。
(5)5XX - 服务器错误,服务器在处理请求的过程中发生了错误。
常见状态码:
(1)200 OK - 客户端请求成功
(2)301 - 资源(网页等)被永久转移到其它 URL
(3)302 - 临时跳转
(4)400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
(5)401 Unauthorized - 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
(6)404 - 请求资源不存在,可能是输入了错误的 URL
(7)500 - 服务器内部发生了不可预期的错误
(8)503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
- 目录扫描工具原理
通过发送数据包,判断响应码看是否存在
靶场
安装 vulhub
- Vulhub:
是一个面向大众的开源漏洞靶场,简单执行两条命令即可编译、运行一个完整的漏洞靶场镜像。让漏洞复现变得更加简单。 - Docker:
是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中。 - Docker 三大核心:
由镜像 (Image)、容器 (Container)、仓库 (Repository) - 安装步骤
前提 sudo -s 进入最高权限
- 先更新 APT,apt-get update
成功显示完成 - 安装 https 协议、CA 证书,apt-get install -y apt-transport-https ca-certificates
成功显示两个 done. - 安装 docker,apt install docker.io
报错:下列软件包有未满足的依赖关系:libc6-dev - apt-get update
- apt-get upgrade
- apt-get install libc6-dev
- 安装 docker,apt install docker.io
- 查看版本,是否安装成功;docker -v
显示 docker version - 显示 docker 信息 ,systemctl start docker
- 查看开启的环境,docker ps -a
- 安装 pip3,apt-get install python3-pip
- 安装 docker-compose,pip3 install docker-compose
报错:error: subprocess-exited-with-error - pip install --upgrade setuptools
- 查看 docker-compose 版本,docker-compose -v
安装成功显示 docker-compose version - 下载 Vulhub,git clone https://gitee.com/puier/vulhub.git
(1)ls
(2)cd vulhub
(3)ls - 进入一个目录,cd spring(比如进入 spring)
(1)ls
(2)选择具体漏洞:CVE…
(3)对靶场进行编译:docker-compose build
(4)运行靶场:docker-compose up -d
中国网速…
赶紧重新配置了一波
参考:http://t.csdn.cn/C3ayS
1 | Kali |
(5)查看启动环境,docker-compose ps(查看端口)
17. 访问 http://0.0.0.0:8080/users
18. 移除环境,docker-compose down
docker-compose 会默认根据当前目录下的配置文件启动容器,在关闭及移除环境的时候,也需要在对应目录下。
- 更多漏洞可以参考 Vulhub 官方文档: https://vulhub.org/#/environments/
其他
- 永恒之蓝漏洞复现
Metasploit - phpmyadmin 4.8.1 远程文件包含漏洞(CVE-2018-12613)
https://github.com/vulhub/vulhub/blob/master/phpmyadmin/CVE-2018-12613/README.zh-cn.md - Mysql 身份认证绕过漏洞(CVE-2012-2122)
https://vulhub.org/#/environments/mysql/CVE-2012-2122/ - phpmyadmin scripts/setup.php 反序列化漏洞(WooYun-2016-199433)
https://github.com/vulhub/vulhub/blob/master/phpmyadmin/WooYun-2016-199433/README.zh-cn.md
加密和编码
- 常见加密编码等算法解析
MD5,SHA,ASC,进制,时间戳,URL,BASE64,Unescape,AES,DES 等 - 常见加密形式算法解析
直接加密,带 salt,带密码,带偏移,带位数,带模式,带干扰,自定义组合等 - 常见解密方式(针对)
枚举,自定义逆向算法,可逆向 - 时间戳
时间转换
时间戳通常是用在用户的注册、登录、注销等情况
在线转换工具:https://tool.lu/timestamp/