# NASA HW0 # NA ## 1. Short Answer ### 1. 參考資料: https://ithelp.ithome.com.tw/articles/10208750 https://blog.zhenghui.idv.tw/2020/07/27/%E6%95%99%E4%BD%A0%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E7%9C%8B%E6%87%82-TCP-IP%E4%BA%94%E5%B1%A4-%E7%B6%B2%E8%B7%AF%E5%B0%81%E5%8C%85/ ``` 1. Physical Layer: 利用硬體通訊設備傳輸光電訊號。如: 纜線、Wi-Fi 無線電波。 2. Data Link Layer: 主要用來定義來源/目的的 MAC 地址。如: Ethernet、Wi-Fi。 3. Network Layer: 負責封包來源傳到目的的路徑選擇問題,並在抵達時檢查要送往哪個地址。如: IP。 4. Transport Layer: 確保資料送達的順序,並紀錄來源/目的 port 的位置。如: TCP、UDP。 5. Application Layer: 為應用程式提供網路通信接口,透過各種協議實現不同應用之間的數據傳輸。如: HTTP、FTP。 ``` ### 2. #### (a) 參考資料: https://www.etherwan.com/tw/support/featured-articles/brief-introduction-vlans https://zh.wikipedia.org/zh-tw/%E8%99%9A%E6%8B%9F%E5%B1%80%E5%9F%9F%E7%BD%91 #### (b) 參考資料: https://tung168.pixnet.net/blog/post/330937279 https://www.wpgdadatong.com/blog/detail/72475 ``` Switch: 收到資料後,switch 會去查 MAC address 再把資料送去指定主機。在 ICP/IP 架構主要運作階層是 Data Link layer ,依據 MAC 位址轉發資料。 Router: Router有一個對外連接的口和數個連接不同區域網路的口。收到資料後會根據 routing table獲得各台主機的 IP 位置判斷資料傳輸路徑。在 ICP/IP 架構主要運作階層 Network Layer,依據 IP 位址決定路徑。 ``` #### (c) 參考資料: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiKtJPT28qLAxU6mq8BHVg7O-kQwqsBegQIBxAG&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMRIuIcQs_Yw&usg=AOvVaw3TqEObuOK1mLvz0ePfvimN&opi=89978449 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwiKtJPT28qLAxU6mq8BHVg7O-kQwqsBegQIBxAG&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DMRIuIcQs_Yw&usg=AOvVaw3TqEObuOK1mLvz0ePfvimN&opi=89978449 ``` Broadcast Storm 是當網路中的 Broadcast 封包過多時導致設備運行速度變慢。可以透過 VLAN 或設定 Broadcast Storm Control 來預防。 Switching Loop 發生在將兩台交換機互相連接時封包不斷在網路內循環。可以啟用 STP 或檢查交換機間的連接來預防。 Switching loop 有可能會導致 Broadcast Storm 造成網路癱瘓。 ``` ### 3. 參考資料: https://www.ithome.com.tw/tech/92046 ``` 因為 IPv4 提供的位置數量以不敷使用。 理論上 IPv6 可以提供2的32次方個地址,但不排除未來也有用完的一天,因此有可能會需要換成其他的。 兩個版本的主要差別是 IPv4 是由32位元組成,以8個位元為一個單位的2進位表示法; IPv6 是128位元組成,一組為4個位元的16進位表示法。 因為 IPv4 與 IPv6 並不相容,許多企業能仰賴 IPv4 ,過度的成本高。 ``` ### 4. 參考資料: https://ithelp.ithome.com.tw/articles/10294859 https://www.explainthis.io/zh-hant/swe/tcp-udphttps://www.explainthis.io/zh-hant/swe/tcp-udp ``` TCP: 在傳輸前將資料分割成小封包並加上編號。接收端收到資料後回傳確認信號,發送斷再送出下一份封包,最後經過檢查再將資料組合起來。 UDP: 沒有接收確認機制,以串流方式傳送資料,發送端不會等接收端的確認信號。 兩者都是傳輸資料的通信協定,TCP 注重資料傳輸的正確性, UDP 注重資料傳輸的效率。 如果對於資料的完整性要求較高可以選擇 TCP ,若要求更快的速度可以選擇 UDP。 ``` ### 5. 參考資料: https://ithelp.ithome.com.tw/articles/10221197 https://www.linktech.com.tw/post/efk-elasticsearch-fluentd-kibana ``` EFK 主要由三大部分組成: 1.Elasticsearch:是一個分散式的搜索和分析引擎,特別適合用於處理大量的結構化和非結構化數據。 2.Fluentd:是一個開源的數據收集器,用於標準化、統一和轉發日誌數據。 3.Kibana:是一個用於可視化和分析數據的開源工具。 優點: 可以快速地收集、存儲、搜索和可視化大量的日誌數據,從而提高應用程序的性能和穩定性,並且擁有高度可擴展性。 缺點: Elasticsearch 的 CPU 、記憶體與儲存空間需求大,若沒有足夠的硬體設備會導致服務運行緩慢。 ``` ### 6. 參考資料: https://www.geeksforgeeks.org/types-of-multiplexing-in-data-communications/ https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&ved=2ahUKEwi-kO_N6MqLAxWJk68BHdLOLvEQFnoECBwQAQ&url=https%3A%2F%2Fccnet.ntu.edu.tw%2FNTU%2Fmain.html&usg=AOvVaw3Nuc1FzVO7dlEVS_IkBXVK&opi=89978449 ``` FDM: 將可用頻寬分成多個不同頻率的子頻段,每個訊號佔據不同的頻率範圍,並同時傳輸。 TDM: 將傳輸時間切割成多個 Time Slots,不同訊號在不同時間片內傳輸。 WDM: 光纖通訊中的 FDM 版本,透過不同的光波長在光纖中傳輸多個訊號。 我不是資工系的學生,以學校網路作為對照。 大多數 Wi-Fi 都會使用 FDM ,推測有用到。 如果同時很多學生在使用 Wi-FI 可以明顯感覺速度下降,推測有使用 TDM。 根據臺大資訊網路組的校園網路概況介紹中提到有使用光纖網路,因此推測有 WDM。 ``` ## Command Line Utilities ### 1. 請對 speed.ntu.edu.tw trace route,並回答下列問題:在本題中,請使用 NTU SSL VPN 完成作答。依照你的系統,你可以自由選擇使用 traceroute 或 tracert,惟請確保作答前後一致。 參考資料: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjk1JzFlMuLAxWRdfUHHXrJNxAQFnoECB8QAQ&url=https%3A%2F%2Fwww.ibm.com%2Fdocs%2Fzh-tw%2Fpower10%3Ftopic%3Dcommands-traceroute-command&usg=AOvVaw3ntFFGo1SS2QQJjdq297jt&opi=89978449 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjk1JzFlMuLAxWRdfUHHXrJNxAQFnoECAgQAQ&url=https%3A%2F%2Fsupport.microsoft.com%2Fzh-tw%2Ftopic%2F%25E5%25A6%2582%25E4%25BD%2595%25E4%25BD%25BF%25E7%2594%25A8-tracert-%25E7%2596%2591%25E9%259B%25A3%25E6%258E%2592%25E8%25A7%25A3-windows-%25E4%25B8%25AD%25E7%259A%2584-tcp-ip-%25E5%2595%258F%25E9%25A1%258C-e643d72b-2f4f-cdd6-09a0-fd2989c7ca8e&usg=AOvVaw2S2OMnZr4nF8yui-shvas1&opi=89978449 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjk1JzFlMuLAxWRdfUHHXrJNxAQFnoECB0QAQ&url=https%3A%2F%2Fhelpcenter.trendmicro.com%2Fzh-tw%2Farticle%2Ftmka-08254%2F&usg=AOvVaw3SBXgkIHOZ5eJLZ05EyPzZ&opi=89978449 #### (a) ``` tracert speed.ntu.edu.tw ``` ![image](https://hackmd.io/_uploads/Sy-XyTlcJx.png) #### (b) ``` # 方法一: nslookup speed.ntu.edu.tw ``` ![image](https://hackmd.io/_uploads/r10wx6l5ke.png) ``` # 方法二: ping speed.ntu.edu.tw ``` ![image](https://hackmd.io/_uploads/B1_Ylaxq1l.png) #### (c) ``` 1. 10.200.200.200: 這是一個私有IP,因為 10.x.x.x屬於 RFC 1918 定義的私有 IP。 2. ip4-126.vpn.ntu.edu.tw [140.112.4.126]: 是公共IP,因為140.112.x.x 屬於台大公網IP。 3. 140.112.5.178: 是公共IP,原因與2.同。 ``` #### (d) ``` 不一定,tracert 每行數字代表意思分別為第一、二、三次發送封包的回應時間,這是受到該節點的附載量或路由策略所影響,與越下面就越大沒有直接關係。 ``` #### (e) ![IMG_6909 (1)](https://hackmd.io/_uploads/SygAUyW5Jg.jpg) ``` tracert 在 Windows 中使用的是 ICMP ,透過發送ICMP Echo Request 封包並逐漸增加 TTL 來測試路徑上的每個節點。 先發送 TTL = 1,第一個路由器收到後 TTL 變為0,回應 ICMP Time Exceeded。 接著發送 TTL = 2,第二個路由器收到後 TTL 變為0,回應 ICMP Time Exceeded 一直到發送 TTL = 3,speed.ntu.edu.tw 收到請求,回應 ICMP Echo Reply ``` ### 接下來的問題請針對 140.112.91.2 這台伺服器進行回答:對於題目中需要附上指令的部分,若你的指令有使用到任何參數,請列出你認為解題所需最簡短的參數組合,可以附上必須使用這個參數的原因作為輔助說明。 參考資料: https://www.runoob.com/linux/linux-comm-ping.html https://nmap.org/docs.html https://tw.alphacamp.co/blog/nginx #### (a) ``` ping 140.112.91.2 ``` ![image](https://hackmd.io/_uploads/ryuXYJZcJg.png) #### (b) ``` nmap -sn 140.112.91.2 # -sn:這個參數讓 nmap 只執行 Ping Scan, # 不進行 Port Scan(預設 nmap 會執行 Port Scan)。 ``` ![image](https://hackmd.io/_uploads/r1K7ay-qye.png) ``` ping 無法偵測到主機,但 nmap 可以。 這可能是因為 nmap 使用 ARP 、 TCP SYN 等方式來掃描,相較 ping 只發送 ICMP Echo Request 更難被防火牆封鎖。 ``` #### ``` nmap -p 80 -sV 140.112.91.2 # -p 80:指定掃描 port 80(HTTP 預設端口)。 # -sV:啟用 服務偵測,可以找出埠口上運行的應用程式名稱及其版本。 ``` ![image](https://hackmd.io/_uploads/HkiaRJb9ye.png) ``` Nginx 是一款開源的網路伺服器,能夠用於多種網路服務,包括 HTTP 伺服器、反向代理伺服器、郵件代理伺服器等。 ``` #### (d) ``` # 與 port 80 進行連線 curl -X POST http://140.112.91.2/ -v ``` ![image](https://hackmd.io/_uploads/Hk_3xxZ5ye.png) ``` # 根據提示搜尋 48000-49000 區間 # 連線位於 port 48763 的服務 nmap -p 48000-49000 -sV 140.112.91.2 ``` ![image](https://hackmd.io/_uploads/Hy88Pgbc1g.png) ``` welcome to nasa!!! (screenshot me as proof for your answer)\ ``` ### DNS record 請附上解每題的指令和答案。 參考資料: https://learn.microsoft.com/zh-tw/windows-server/administration/windows-commands/nslookup #### (a) ``` nslookup Bocchi-Tracker.csie.ntu.edu.tw ``` ![image](https://hackmd.io/_uploads/ryESMgW9ke.png) ``` 140.112.30.131 ``` #### (b) ``` nslookup 140.112.30.131 ``` ![image](https://hackmd.io/_uploads/r1_gcgbcJx.png) ``` Starry.csie.ntu.edu.tw ``` #### (c) ``` nslookup -type=TXT Starry.csie.ntu.edu.tw ``` ![image](https://hackmd.io/_uploads/H1p89l-qJe.png) ``` Your guitar is in the box ``` #### (d) ``` nslookup -type=CNAME Bocchi.csie.ntu.edu.tw ``` ![image](https://hackmd.io/_uploads/ryxncxbqJl.png) ``` Gu1tArHer0 ``` ### 3. Basic Wireshark (11pt)### 3. Basic Wireshark (11pt) 參考資料: https://www.wireshark.org/docs/ #### 1. ##### (a) ![image](https://hackmd.io/_uploads/B1HQJbbc1e.png) ``` port 3000 ``` ### 4. Cryptography (5pt) #### Step 1: ``nc 140.112.91.1 48763`` # SA ## 6. btw I use arch(15pt) 參考資料: https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjP1cTAvs2LAxWVdPUHHR27CngQwqsBegQICxAG&url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3Db1s-W7dSzBc&usg=AOvVaw1cSxPx-mi9d8dPEt-d1Wju&opi=89978449 https://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=&cad=rja&uact=8&ved=2ahUKEwjewtrPvs2LAxUzZvUHHfE2IBAQFnoECAgQAQ&url=https%3A%2F%2Fhackmd.io%2F%40MagicBeaver%2Fwindowsinstallvirtualbox&usg=AOvVaw3uBAatq-EeGJhyTHm0wz3t&opi=89978449 ### 6-0. (0pt) i use virtualbox on my win11 laptop. (https://www.virtualbox.org/wiki/Downloads) ![image](https://hackmd.io/_uploads/ByibXz-cJl.png) 新增虛擬機 ![image](https://hackmd.io/_uploads/rydq7fWc1g.png) 設置記憶體與分配核心 ![image](https://hackmd.io/_uploads/HkymVM-cJg.png) 設置虛擬機硬碟分配大小 ![image](https://hackmd.io/_uploads/r19SEzZckg.png) 啟動虛擬機 ![image](https://hackmd.io/_uploads/rJKcHfWcJx.png) 切分磁碟區(15G) ``` fdisk /dev/sda n p 1 [ENTER] +15G ``` 切分磁碟區(5G) ``` fdisk /dev/sda n p 2 [ENTER] +5G ``` 建立swap(8G) ``` fdisk /dev/sda n p 3 [ENTER] +8G t 3 82 w ``` 格式化分割磁碟區 ``` mkfs.ext4 /dev/sda1 mkfs.ext4 /dev/sda2 mkswap /dev/sda3 ``` 啟用swap ``` swapon /dev/sda3 ``` 掛載分割區 ``` mount /dev/sda1 /mnt mkdir /mnt/home mount /dev/sda2 /mnt/home ``` 查看硬碟配置 ``` lsblk -f ``` ![image](https://hackmd.io/_uploads/ByOf3zZ91e.png) 查看swap配置 ``` free -h ``` ![image](https://hackmd.io/_uploads/S1PH2MW5kl.png) 安裝基本系統 ``` pacstrap /mnt base linux linux-firmware ``` 產生 fstab ``` genfstab -U /mnt >> /mnt/etc/fstab ``` 進入新系統 ``` arch-chroot /mnt ``` 設定主機名 ``` echo "b10611035" > /etc/hostname ``` 安裝GRUB ``` pacman -S grub grub-install --target=i386-pc /dev/sda grub-mkconfig -o /boot/grub/grub.cfg ``` 建立使用者 ``` useradd -m -G wheel -s /bin/bash nasa echo "nasa:nasa" | chpasswd ``` 允許wheel使用sudo權限 ``` pacman -S sudo echo "%wheel ALL=(ALL) ALL" >> /etc/sudoers ``` 重啟 ``` exit umount -R /mnt reboot ``` 移除.iso檔並重啟 ![image](https://hackmd.io/_uploads/HygdUXW5Jl.png) 登入使用者nasa ![image](https://hackmd.io/_uploads/S1QhL7Zckx.png) 測試分割磁碟是否自動掛載 ``` df -h ``` ![image](https://hackmd.io/_uploads/H19wwQZ51l.png) ``` swapon --summary ``` ![image](https://hackmd.io/_uploads/SkncPmZ5Je.png) ### 6-1 ``` echo "b10611035" | sudo tee /etc/hostname ``` ![image](https://hackmd.io/_uploads/SJHeiXZcJe.png) #### 6-2 ``` lsblk -o NAME,UUID,MOUNTPOINT ``` ![image](https://hackmd.io/_uploads/SkuaoX-5ye.png) #### 6-3 ``` cat /etc/os-release ``` ![image](https://hackmd.io/_uploads/rkDSnQbqkg.png) ``` uname -a ``` ![image](https://hackmd.io/_uploads/Sk0u2XW5yx.png) ## Flag Hunting(25pt) ### 1. history 參考資料: https://blog.gtwang.org/linux/mastering-linux-command-line-history/ #### (a) ``` echo $HISTFILE ``` ![image](https://hackmd.io/_uploads/HkJlzZzckx.png) #### (b) ``` echo $HISTSIZE ``` ![image](https://hackmd.io/_uploads/BJKvMZM9Jg.png) #### (c) ``` echo $HISTFILESIZE ``` ![image](https://hackmd.io/_uploads/H1RlXbz5yl.png) 如果要更改可以 ``` cat ~/.bashrc | grep HISTFILESIZE ``` ![image](https://hackmd.io/_uploads/HJ8nXWfcyx.png) 加入一行 ``` export HISTFILESIZE=10000 ``` #### (d) ``` cat ``` ![image](https://hackmd.io/_uploads/SkFLEbfqyl.png) 看起來沒有要求的NASA....... ``` cat ~/.bash_history ``` ![image](https://hackmd.io/_uploads/r16dPWf91x.png) ``` sed -n '104p' $HISTFILE ``` ![image](https://hackmd.io/_uploads/S1Fgd-M9kx.png) ``` y0UFIND+heCoRr3tFL4G ``` ### 2. Treasure box 參考資料: https://www.ibm.com/docs/zh-tw/aix/7.3?topic=d-du-command ``` /home/nasa/treasure ``` ![image](https://hackmd.io/_uploads/By_LsZz9yl.png) 依照檔案大小排序後找出最小的檔案 ``` du -b * | sort -n | head -n 1 ``` ![image](https://hackmd.io/_uploads/ryFBh-f5yg.png) 得知flag-539 ``` sed -n '310p' flag-539 ``` ![image](https://hackmd.io/_uploads/HyKWaZM91x.png) ``` EZ_TrEa$Ur3_HunT! ``` ### 3. 魔物(/home/nasa/boss)(5pt): ``` ./boss & pkill -P $! # ./boss &: run boss in the background # pkill -P $!: kill all subprocess ``` ![image](https://hackmd.io/_uploads/rJFJbfzq1e.png) ``` m0dERn_Pr0B1esem$_reQU1r3_m0dERn_SO1uT10N5 ``` ### 4. 通關密語(/home/nasa/chal)(5pt): ``` strings chal | grep "486" | grep -n "re02" ``` ![image](https://hackmd.io/_uploads/S1YlIMGqkg.png) ``` ./chal "$(strings chal | grep "486" | grep "re02")" ``` ![image](https://hackmd.io/_uploads/Bku0LGz51x.png) ``` n4ndeharuh1ka93yatt4n0 ``` ### tmux (本題沒有 flag)(4pt) 參考資料: https://larrylu.blog/tmux-33a24e595fbc .tmux.conf 中的設定的prefix是 C-a 而非一般的 C-b 我的指令: 1. <Ctrl+b> + " 2. <Ctrl+b> + % 3. <Ctrl+b> + " 4. <Ctrl+b> + % 5. <Ctrl+b> + " 6. <Ctrl+b> + % ![image](https://hackmd.io/_uploads/ry25czzckl.png) ### 8. 準備 參考資料: https://docs.docker.com/ https://www.cnblogs.com/renxinyuan/p/4252019.html #### 8-1. 解讀古老卷軸(3pt) ``` vim Dockerfile ``` ![image](https://hackmd.io/_uploads/B1RKfmMc1l.png) ``` FROM python:3.9-slim # 使用 python:3.9-slim 作為image,這是一個精簡版本的 Python 3.9 image。 ``` ``` RUN apt-get update && apt-get install -y \ build-essential \ libssl-dev \ net-tools \ iproute2 \ tcpdump \ tshark \ nano \ curl \ wget \ vim \ less \ procps \ lsof \ iputils-ping \ && rm -rf /var/lib/apt/lists/* # 更新安裝工具後安裝多個套件 ``` ``` RUN mkdir -p /usr/libexec/run # 建立 run 來存要執行的檔案 ``` ``` COPY usr/libexec/run/dist/transfer /usr/libexec/run/transfer # 將本機的 usr/libexec/run/dist/transfer 檔案複製到container內的 /usr/libexec/run/transfer。 COPY usr/libexec/run/run.sh # 將 usr/libexec/run/run.sh 複製到 /usr/libexec/run/run.sh。 ``` ``` RUN chmod +x /usr/libexec/run/transfer RUN chmod +x /usr/libexec/run/run.sh # chmod +x: 讓 transfer 和 run.sh 具有可執行權限 ``` ``` CMD ["/usr/libexec/run/run.sh"] # 當容器啟動時會執行這個 sh script。 ``` #### 8-2. 啟動聖杯(3pt) 查看有的docker image ``` docker images ``` ![image](https://hackmd.io/_uploads/B1Y6Nmfqyx.png) 啟動 container ``` docker run -it my-magic-cup ``` ![image](https://hackmd.io/_uploads/r1r4H7zckg.png) 出現錯誤,可能是run.sh的問題 查看 run.sh ``` vim /usr/libexec/run/run.sh ``` ![image](https://hackmd.io/_uploads/Hy9RBXzqkl.png) set up MAGIC_SPELL ``` docker run -e MAGIC_SPELL=hahahaiLoveNASA -d my-magic-cup ``` ``` docker ps ``` ![image](https://hackmd.io/_uploads/BJ7LD7fcyx.png) activate bash terminal ``` docker exec -it 32598b1f3d61 /bin/bash ``` ![image](https://hackmd.io/_uploads/Skff_QMq1l.png) ``` tcpdump -i lo udp -nn -A ``` ![image](https://hackmd.io/_uploads/HyZt_mGqye.png) ``` 3948/02/22 ```