ubuntu上docker的搭建
https://vulhub.org/zh
網站最下面找到開始使用,有搭建的命令
//安裝docker,連接失敗多試幾次
curl -fsSL https://get.docker.com | sh
//驗證Docker是否正確安裝:
docker version
//還要驗證Docker Compose是否可用:
docker compose version
安裝掛載proxychains:
apt install proxychains
編輯配置文件:
vim /etc/proxychains.conf
對最下面的配置進行修改:改自己的主機IP
proxychains curl http://www.google.com
測試是否可以成功訪問谷歌
點擊開頭github點擊code復制里面的鏈接進行克隆:https://github.com/vulhub/vulhub.git
proxychains git clone --depth 1 https://github.com/vulhub/vulhub.git
切換目錄:選擇漏洞環境 瀏覽倉庫并選擇您想要探索的漏洞。每個目錄代表一個不同的漏洞應用程序。
cd vulhub/cacti/CVE-2022-46169/
啟動環境 使用Docker Compose構建并啟動漏洞環境
docker compose up -d
拉鏡像是遇到了報錯Get “https://registry-1.docker.io/v2/”: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers) 大概就是請求超時,是網絡問題導致鏡像沒拉下來
配置一個加速地址
vim /etc/docker/daemon.json
添加下面內容 { “registry-mirrors”: [ “https://docker.211678.top”, “https://docker.1panel.live”, “https://hub.rat.dev”, “https://docker.m.daocloud.io”, “https://do.nark.eu.org”, “https://dockerpull.com”, “https://dockerproxy.cn”, “https://docker.awsl9527.cn” ] }
然后保存 重啟
systemctl daemon-reload systemctl restart docker
vscode上dockers連接失敗解決方法:
先在商店中下載docker
如果安裝后連接失敗可能是當前用戶沒有權限導致的:
需要將普通用戶加入到 docker 用戶組,并重啟,即可不使用 sudo 來運行 docker 相關操作
sudo usermod -aG docker $USER
重啟:
reboot
ubuntu上nginx和php:
1.安裝依賴包
apt-get install gcc apt-get install libpcre3 libpcre3-dev apt-get install zlib1g zlib1g-dev sudo apt-get install openssl sudo apt-get install libssl-dev
2.安裝nginx
cd /usr/local
mkdir nginx
cd nginx
wget http://nginx.org/download/nginx-1.21.6.tar.gz
tar -xvf nginx-1.21.6.tar.gz
3.編譯nginx
cd /usr/local/nginx/nginx-1.21.6
執行命令
./configure 安裝make
apt install make 執行make命令 make
執行make install命令
make install4
4.啟動nginx
cd /usr/local/nginx/sbin
啟動nginx
./nginx
5.訪問nginx
在瀏覽器上輸入ubuntu虛擬機的ip
7.安裝php
? nginx使用php的話要用到php7.3-fpm,所以要安裝
sudo apt-get install php7.3 php7.3-mysql php7.3-fpm php7.3-curl php7.3-xml php7.3-gd php7.3-mbstring php-memcached php7.3-zip
8.配置php-fpm
? 把監聽端口改掉
把上面一行的換成下面那個
;listen = /run/php/php7.3-fpm.sock listen = 127.0.0.1:9000
9.啟動php-fpm
sudo service php7.3-fpm start sudo service php7.3-fpm restart netstat -lnt | grep 9000
查看9000端口:
https和dns:
DNS域名解析過程
首先,客戶端先在本地緩存查找有沒有域名緩存,如果沒有,客戶端發出DNS請求翻譯IP地址或主機名。DNS服務器在收到客戶機的請求后:
(1)檢查DNS服務器的緩存,若查到請求的地址或名字,即向客戶機發出應答信息;
(2)若沒有查到,則在數據庫中查找,若查到請求的地址或名字,即向客戶機發出應答信息;
(3)若沒有查到,則將請求發給根域DNS服務器,并依序從根域查找頂級域,由頂級查找二級域,二級域查找三級,直至找到要解析的地址或名字,即向客戶機所在網絡的DNS服務器發出應答信息,DNS服務器收到應答后現在緩存中存儲,然后,將解析結果發給客戶機。
(4)若沒有找到,則返回錯誤信息
https原理–RSA密鑰協商算法
TLS 第一次握手
客戶端首先會發一個「Client Hello」消息,字面意思我們也能理解到,這是跟服務器「打招呼」。
消息里面有客戶端使用的 TLS 版本號、支持的密碼套件列表,支持的壓縮算法,以及生成的隨機數(Client Random),這個隨機數會被服務端保留,它是生成對稱加密密鑰的材料之一。
TLS 第二次握手
當服務端收到客戶端的「Client Hello」消息后,會確認 TLS 版本號是否支持,和從密碼套件列表中選擇一個密碼套件,還有選擇壓縮算法(安全性原因,一般不壓縮),以及生成隨機數(Server Random)。
接著,返回「Server Hello」消息,消息里面有服務器確認的 TLS 版本號,也給出了隨機數(Server Random),然后從客戶端的密碼套件列表選擇了一個合適的密碼套件。
前面這兩個客戶端和服務端相互「打招呼」的過程,客戶端和服務端就已確認了 TLS 版本和使用的密碼套件,而且你可能發現客戶端和服務端都會各自生成一個隨機數,并且還會把隨機數傳遞給對方。
這兩個隨機數是后續作為生成「會話密鑰」的條件,所謂的會話密鑰就是數據傳輸時,所使用的對稱加密密鑰。
然后,服務端為了證明自己的身份,會發送「Server Certificate」給客戶端,這個消息里含有數字證書。
隨后,服務端發了「Server Hello Done」消息,目的是告訴客戶端,我已經把該給你的東西都給你了,本次打招呼完畢。、
TLS第三次握手
客戶端驗證完證書后,認為可信則繼續往下走。接著,客戶端就會生成一個新的隨機數 (pre-master),用服務器的 RSA 公鑰加密該隨機數,通過「Change Cipher Key Exchange」消息傳給服務端。
服務端收到后,用 RSA 私鑰解密,得到客戶端發來的隨機數 (pre-master)。
至此,客戶端和服務端雙方都共享了三個隨機數,分別是 Client Random、Server Random、pre-master。
于是,雙方根據已經得到的三個隨機數,生成會話密鑰(Master Secret),它是對稱密鑰,用于對后續的 HTTP 請求/響應的數據加解密。
生成完會話密鑰后,然后客戶端發一個「Change Cipher Spec」,告訴服務端開始使用加密方式發送消息。
然后,客戶端再發一個「Encrypted Handshake Message(Finishd)」消息,把之前所有發送的數據做個摘要,再用會話密鑰(master secret)加密一下,讓服務器做個驗證,驗證加密通信是否可用和之前握手信息是否有被中途篡改過。
可以發現,「Change Cipher Spec」之前傳輸的 TLS 握手數據都是明文,之后都是對稱密鑰加密的密文。
TLS 第四次握手
服務器也是同樣的操作,發「Change Cipher Spec」和「Encrypted Handshake Message」消息,如果雙方都驗證加密和解密沒問題,那么握手正式完成。
最后,就用「會話密鑰」加解密 HTTP 請求和響應了。