# Write Up H7CTF International 2024 ![](https://hackmd.io/_uploads/H1JbY8rR0.png) --- ## Forensics ### 1. Khabib ![image](https://hackmd.io/_uploads/Bym2YUHRC.png) Bài cho mình 1 ảnh kích thước khá lớn (20000x20000), nhìn kỹ ta sẽ thấy flag ở ngay trên ảnh, zoom lên ta có: ![image](https://hackmd.io/_uploads/H1zP9IBAR.png) > Flag: H7CTF{PNG_z00mz_4r3_1mp0ss1ble_t0_n0t1ce} --- ### 2. Evolve ![image](https://hackmd.io/_uploads/BJOhq8SRA.png) Bài tiếp tục cho mình 1 ảnh khác, như thói quen mình kiểm tra hết 1 lượt các tools, cú pháp hay dùng nhưng không có kết quả gì: ![flag](https://hackmd.io/_uploads/HypziLr00.png) Bí quá nên mình hỏi GPT, sau một lúc thì may mắn mình có được hướng giải: ```python= from scipy import fftpack import matplotlib.pyplot as plt from PIL import Image import numpy as np image = Image.open('flag.png').convert('L') image_array = np.array(image) F1 = fftpack.fft2(image_array) plt.imshow(np.log(1 + np.abs(F1)), cmap='gray') plt.show() ``` > Đoạn mã này thực hiện phân tích ảnh theo miền tần số bằng cách áp dụng phép biến đổi Fourier rời rạc 2D (2D Discrete Fourier Transform - DFT) lên ảnh xám (grayscale). Sau đó, nó hiển thị kết quả dưới dạng ảnh tần số. Kết quả sau khi chạy script trên: ![image](https://hackmd.io/_uploads/BywmJwBAC.png) > Flag: H7CTF{f0ur1er_7r4nsf0rms_4r3_c00L} --- ### 3. Captain Cool ![image](https://hackmd.io/_uploads/Hk05kvHAA.png) Tiếp tục là 1 bài stego nữa, bài cho ta 1 ảnh: ![white](https://hackmd.io/_uploads/rJsTkDBRC.png) Nhìn kỹ thì ta thấy ở dưới của ảnh có 1 đoạn mã hóa như base64, mình thử thay đổi bit planes để nhìn rõ hơn thì có được: ![a2](https://hackmd.io/_uploads/SJfQevHCA.png) Dù vậy nhưng khi decode nội dung của đoạn mã đó không phải là flag: ![image](https://hackmd.io/_uploads/SkXqewSCA.png) Vận dụng các tools mình biết thì sau 1 hồi mình có được: ![image](https://hackmd.io/_uploads/SJxwWwHCA.png) Để tool hoạt động thì cần có mật khẩu, đọc kỹ lại đề bài mình thấy được từ "d-e-f-i-n-i-t-e-l-y-n-o-t" được author đề cập đến khá khả nghi, mình nghĩ đó là mật khẩu, dùng pass đó extract và mình có được 1 file binary. Decode và ta có flag: ![image](https://hackmd.io/_uploads/rytGMvr0R.png) > Flag: H7CTF{7h1s_h4s_t0_b3_0n3_of_7h3_L4rg3s7_b1n4ry_im4g3s} --- ### 4. Ghost IP ![image](https://hackmd.io/_uploads/ry0szPS0C.png) Bài cho 1 file pcapng, yêu cầu tìm được địa chỉ ip thật của kẻ tấn công, đầu tiên, mình lọc các gói TCP SYN mà không kèm theo cờ ACK, nhằm xác định địa chỉ IP của các thiết bị đang thực hiện quét bằng cách khởi tạo kết nối TCP mà không hoàn tất bắt tay ba bước (3-way handshake). Điều này thường xảy ra trong các cuộc tấn công hoặc quét mạng (network scanning) để phát hiện các cổng mở: ```bash= tshark -r nmap_scan.pcapng -Y "tcp.flags.syn == 1 and tcp.flags.ack == 0" -T fields -e ip.src | sort | uniq -c | sort -nr ``` Kết quả có được: ![image](https://hackmd.io/_uploads/ryRnLvSR0.png) Nhìn vào số lượng gói tin SYN của ip 192.168.1.7 mình nghĩ đây có thể là flag vì số lượng gấp đôi các ip còn lại, submit thử nhưng bị sai. >Những địa chỉ IP gửi nhiều gói tin nhất không phải lúc nào cũng là kẻ tấn công thật. Các gói tin SYN từ một địa chỉ có thể là kết quả của sự ngụy trang hoặc hoạt động hợp pháp. Sau 1 lúc tìm hiểu, mình liệt kê tất cả các phiên TCP có trong file PCAP để tìm kiếm địa chỉ IP nghi ngờ: ```bash= tshark -r nmap_scan.pcapng -q -z conv,tcp ``` ![image](https://hackmd.io/_uploads/B1pq4wSCR.png) Từ kết quả thống kê trên, mình thấy rằng địa chỉ IP 192.168.1.9 đã thực hiện nhiều kết nối đến các cổng khác nhau (cổng 22, 139, 445, 995, 3306, ...), điều này có thể là dấu hiệu của một hoạt động quét cổng. > Quét cổng (port scanning) là phương pháp mà kẻ tấn công sử dụng để tìm các cổng đang mở trên máy chủ mục tiêu nhằm tìm kiếm điểm yếu để khai thác. Trong trường hợp này, IP 192.168.1.9 có thể đang thực hiện quét cổng để kiểm tra các dịch vụ đang chạy và lỗ hổng tiềm ẩn. > Những yếu tố để nhận định IP này nghi ngờ gồm: > 1.Kết nối nhiều cổng khác nhau trong một thời gian ngắn. > 2.Sử dụng các cổng nhạy cảm như 22 (SSH), 445 (SMB), và 3306 (MySQL). > 3.Số lượng gói tin SYN lớn (theo thông tin từ trước). > Flag: H7CTF{192.168.1.9} --- ## Web ### 1. No Paste ![image](https://hackmd.io/_uploads/SkfqtDBCR.png) Bài cho trang web yêu cầu nhập input, nhưng input bị chặn. > Trong bài này, trang web cung cấp một form với input field có thuộc tính readonly, khiến người chơi không thể nhập giá trị trực tiếp qua giao diện. Mục tiêu là tìm cách bypass hạn chế này và nhập đúng giá trị vào để nhận flag. ![image](https://hackmd.io/_uploads/H15oKDHR0.png) Kiểm tra file script.js: ![image](https://hackmd.io/_uploads/BkPgcvHCR.png) Mã JavaScript đã bị obfuscate, nhưng sau khi phân tích, chúng ta phát hiện rằng hàm submitInput() sẽ gửi giá trị từ input field qua phương thức POST đến endpoint /submit?input=. Đặc biệt, trong mã có chứa chuỗi bypass123, có thể đây là giá trị cần nhập vào: ```javascript= const _0x2f7956 = document.getElementById('challengeInput').value; fetch('/submit?input=' + encodeURIComponent(_0x2f7956), {method: 'POST'}) ``` Để vượt qua thuộc tính readonly và nhập giá trị bypass123, ta sẽ dùng console, chạy đoạn mã này để tự động nhập giá trị: ```javascript= document.getElementById('challengeInput').removeAttribute('readonly'); document.getElementById('challengeInput').value = 'bypass123'; ``` Ta có flag: ![image](https://hackmd.io/_uploads/SJTltsSCR.png) > Flag: H7CTF{h@ck_th3_sy$t3m} --- ## Osint ### 1. Gem ![image](https://hackmd.io/_uploads/HJYKYjB0A.png) Bài yêu cầu ta tìm được password mà người tạo ra Perl đã để lại. > Perl là một ngôn ngữ lập trình đa năng, được thiết kế ban đầu để xử lý văn bản và có khả năng linh hoạt trong nhiều loại ứng dụng. Được Larry Wall phát triển vào năm 1987, Perl ban đầu nhằm mục đích giúp các quản trị viên hệ thống xử lý tệp và chuỗi văn bản một cách dễ dàng. Từ đó, Perl đã phát triển thành một ngôn ngữ có thể sử dụng trong nhiều lĩnh vực. Ta đã biết người tạo ra Perl, mình thử tìm và nó ra trang [này](http://www.wall.org/~larry/): ![image](https://hackmd.io/_uploads/HyDvqirR0.png) Kiểm tra mã nguồn trang, đọc các link trong đó, mình phát hiện: ![image](https://hackmd.io/_uploads/ryugsjrRA.png) Trang [này](http://www.wall.org/) chưa thông tin gia đình Larry Wall: ![image](https://hackmd.io/_uploads/ByvujsHCC.png) Đọc thử thông tin các thành viên, mình phát hiện password cần tìm ở [đây](http://wall.org/~lewis): ![image](https://hackmd.io/_uploads/Bk4mnsSRR.png) > Flag: H7CTF{wre89mqT} --- ## Hardware ### 1. Layered Circuits ![image](https://hackmd.io/_uploads/ryLqnoBCC.png) Bài cho mình 1 file zip chứa các tệp GBR, mô tả lại liên quan đến PCB, mình tra GG 1 lúc và tìm ra trang [này](https://tracespace.io/view/) giúp mình tải tệp lên: > Tệp .GBR (Gerber) là một định dạng file phổ biến được sử dụng trong ngành thiết kế và sản xuất mạch in (PCB - Printed Circuit Board). Định dạng này chứa thông tin chi tiết về các lớp của PCB, bao gồm các đường mạch, lỗ khoan, các thành phần điện tử và các thông tin kỹ thuật khác cần thiết để sản xuất mạch in. Xem qua các layer, mình nhận ra flag bị chia thành nhiều phần và bị mã hóa base 64: ![image](https://hackmd.io/_uploads/Skh0TorCC.png) Ghép lại cho có nghĩa và ta có flag: > H7CTF{h4rdw4r3_ch4lls_4r3_1nd33d_4_th1ng} --- ## Misc ### 1. Unfair ![image](https://hackmd.io/_uploads/S1k_RjH0C.png) Bài đề cập đến IG, mình tra thử thì phát hiện tài khoản của cuộc thi nhưng bị để riêng tư, may yêu cầu follow thì họ chấp nhận luôn, xem qua thì thấy flag ở ngay highlights: ![Screenshot 2024-09-27 214512](https://hackmd.io/_uploads/SJCkyhBCC.png) > Flag: H7CTF{d1dn'7_th1nk_7h1s_w4$_p0$$1b1e} --- ### 2. Had Luch? ![image](https://hackmd.io/_uploads/Skebx3BAC.png) Khả năng flag bị ẩn trong web của cuộc thi, mình thấy link web ngay trang IG: ![image](https://hackmd.io/_uploads/ry1UghBC0.png) Vào trang đó, xem mã nguồn trang: ![image](https://hackmd.io/_uploads/HkOYlhH0C.png) Mở file .js, mình tìm và thấy được flag: ![image](https://hackmd.io/_uploads/ByWTl2BRR.png) > Flag: H7CTF{unL3@sh_y0ur_1nn3r_h@ck3r!} --- ### 3. QRco ![image](https://hackmd.io/_uploads/B1b0Hhr00.png) Bài cho mình 1 ảnh QR, khi quét mình có 1 link drive dẫn đến 1 file PDF chứa 1000 các dãy ký tự, điều đặc biệt là đa phần các dãy ký tự đó đa phần chỉ có 3 ký tự, số ít là 4 ký tự, và có thể thấy các chuỗi 4 ký tự đó là các phần flag nhưng bị mã hóa base 64 (idea by `Owen`), viết script lọc ra: ```python= import re with open("aaa.txt", "r", encoding="utf-8") as file: data = file.read() result = re.findall(r'\d+ : (\S{4,})', data) for item in result: print(item) ``` Decode và mình có được: ![image](https://hackmd.io/_uploads/SJqQv3HRR.png) Loại bỏ các kí tự không liên quan và ghép lại, mình ra được flag: > Flag: H7CTF{QRx4rUc0_En1gm4}