---
# System prepended metadata

title: NASA HW0

---

# 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
```