DHS及HTTPS工作过程
Ubuntu虚拟机上遇见的问题:
proxychains curl http://www.goole.com 访问不了
root@zym-VMware-Virtual-Platform:/usr/local/vulhub-master/cacti/CVE-2022-46169# vim docker-compose.yml
主要用来记录和定义多个容器服务的配置和关系
image:vulhub/cacti:1.2.22 ————镜像地址
ports:-"8080:80" ————映射端口,将容器的这个端口映射到Ubuntu的这个端口上
depends_on:-db ————依赖db,说明安装了数据库
命令 docker ps -a
用于列出你系统上的所有 Docker 容器,包括运行中的和已停止的容器
root@zym-VMware-Virtual-Platform:/usr/local/vulhub-master/cacti/CVE-2022-46169# docker rm -f $(docker ps -aq) ----清理容器
root@zym-VMware-Virtual-Platform:/usr/local/vulhub-master/cacti/CVE-2022-46169# docker images ----显示所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
vulhub/shiro 1.0.0 d5dc19e5a241 2 years ago 331MB
vulhub/shiro 1.5.1 392023941693 4 years ago 289MBroot@zym-VMware-Virtual-Platform:/usr/local/vulhub-master/cacti/CVE-2022-46169# docker rmi $(docker images | awk '{print $3}')
docker images 会列出所有的镜像
awk '{print $3}' 会提取每个镜像的 IMAGE ID(第三列)
docker rmi $(...) 会将这些 IMAGE ID 传给 docker rmi 命令,从而删除对应的镜像docker-compose up -d ----拉取镜像
进入某个容器:
t@zym-VMware-Virtual-Platform:/usr/local/vulhub-master/cacti/CVE-2022-46169# docker exec -it 44fef5802a1c /bin/bash
docker exec -it 容器id
如何验证:cd /ll ----查看是否有.dockerenv这个文件
退出:exit
进入docker容器之后如果行进行一些操作,因为docker是最小化安装,很多软件是没有的,这时就有三种选择:1.update安装;2.将文件拷贝到自己电脑当中,修改完成之后再拷贝回去。3.VS code直接修改。推荐第三种方法,最简便。
拷贝文件:
docker cp 容器id:文件路径 本机地址
DNS解析
两种解析方法:
nslookup www.baidu.com
dig www.baidu.comwindows下只能用nslookup
过程:
1.首先查看本地DNS缓存表。如果这个域名对应的IP地址,这个解析过程就结束。
2.如果缓存表中没有的话,就去查看host文件(最适合劫持,Linux通常在/etc/hosts,而在 windows 中可以通过配置 C:\Windows\System32\drivers\etc\hosts 文件来设置)。如果host文件能找到的话就直接解析。
这两步是在本地电脑上完成的。
3.在host文件中找不到时,就要用到我们网络配置中的 “DNS 服务器地址” 了。操作系统会把这个域名发送给本地DNS服务器,如果可以命中,则解析结束。
4.如果本地DNS服务器没有命中,则会向根DNS服务器发送解析请求。
5.根DNS服务器会向本地DNS服务器发送一个顶级DNS服务器地址,如.com、.cn、.org等,全球只有13台左右。
6.根服务器向顶级DNS服务器发送解析请求。
7.接受请求的顶级 DNS 服务器查找并返回此域名对应的 Name Server 域名服务器的地址。
8.本地DNS服务器再向NameServer服务器发送解析请求,NameServer服务器返回正确的解析结果给本地服务器。
9.本地DNS服务器在收到正确的解析结果后,会缓存这个域名和IP的对应关系,缓存时间由TTL控制。
10.本地DNS服务器把解析的结果返回给本地电脑,本地电脑根据 TTL 值缓存在本地系统缓存中。
11.本地电脑得到IP之后想要访问网站(比如说百度),还需要与百度的服务器建立三次握手,三次握手成功以后才能请求访问百度这个网站,百度服务器收到以后才会把这个请求下发回来,这个时候才能访问百度网站。
客户端到本地DNS服务器是属于递归查询,而DNS服务器之间使用的交互查询就是迭代查询
主机在与百度服务器成功建立三次握手之后,客户端向服务器发送一个HTTP request的一个请求。
HTTPS
http由于是明文传输,存在三个风险:
- 窃听风险
- 篡改风险
- 冒充风险
完整性、安全性、保密性
HTTPS在HTTP和TCP层之间加入了TLS协议,用来解决上述风险。
私钥加密公钥解密:签名(防篡改)
公钥加密私钥解密:加密
过程:
1.客户端和服务端进行三次握手,成功以后进行TLS握手。
2.客户端发送ClientHello报文,其中包含TLS版本号、客户端随机数C、密码套件(RSA)。服务端在收到后会回复一个ServerHello报文,其中包含TLS版本号、服务端随机数S、密码套件。然后再发送CA证书Cercificate以及ServerKeyExchange报文。
客户端证书验证流程:客户端在收到服务端的证书后,其中的包含了未被处理的原始信息和被Hash算法处理过又被CA私钥加密的信息。客户端用CA公钥解密后得到HASH值(H1),又将原始信息通过Hash算法计算得到H2,将H1和H2比较,一样则认为证书可靠,验证完成。
3.此时客户端会生成一个预加密密钥pre-master,再用服务端公钥D加密pre-master传送给服务端。
4.服务端用自己的私钥解密得到pre-master
5.双方利用客户端随机数C+服务端随机数S+pre-master得到会话密钥M。
6.之后双方改用密钥M进行加密通信与数据传输。
抓包: