Write Up Ph03nixCTF 2018

Lâu rồi không làm CTF nhưng vẫn giữ phong độ như xưa, vẫn gà mờ. Challenge thì toàn món ăn mà món ngon thì khó ăn.

1. WarmUP: Củ kiệu tôm khô 50pt

          Bài khởi động với đường link: warmup1.ph03nix.club

          Nhấn “Click me!” sẽ hiện cửa sổ check flag.

Ph03nixCTF2018_CuKieuTomKho_1.PNG

          Nếu không phải flag thì sẽ báo false ngay.

Ph03nixCTF2018_CuKieuTomKho_2.PNG

          Kiểm tra mã nguồn và thấy ngay script. Có thể đoán ra ngay hàm kiểm tra flag sử dụng mã hóa Caesar.

Ph03nixCTF2018_CuKieuTomKho_3.PNG

  Giờ chỉ cần giải mã theo phương pháp giải mã Ceasar đoạn “Wo03upe{u9o1hka_k03z_u0a_zAbkF_1um0yt4a10u_4zzb4y4uj3}” là xong.

          Flag: Ph03nix{n9h1adt_d03s_n0t_sTudY_1nf0rm4t10n_4ssu4r4nc3}

2. Warm Up: Thịt gà luộc 50pt

          Server: nc warmup2.ph03nix.club 13337

          Có file ELFx64. Dùng IDA xem giả mã C:

Ph03nixCTF2018_ThitGaLuoc_1

          Nhập tên sao cho thỏa mã điều kiện bằng giá trị cho trước, tên có 10 ký tự. Ban đầu thì mình tìm giá trị lưu trong s1 = “erosnec**d” nhưng không được.

          Hint: “I wonder what is pwnable!!!!!”. Xem lại ngăn xếp thì s2 có thể tràn sang s1 được, và phần nhập s2 không kiểm tra độ dài.

Ph03nixCTF2018_ThitGaLuoc_2.PNG

          Tối thiểu cần nhập 0x30-0x10= 0x20 = 32 ký tự giống nhau để tràn sang s1.

          Flag: Ph03nix{w3lc0m3_t0_s0ftw@r3_3xpl01t}

3. Cryptograph – Bánh tét – 200pt

Ph03nixCTF2018_BanhTet_1.jpg

Nhìn mê cung có điểm đầu và điểm cuối. Đoán rằng chuỗi cần tìm nằm trên đường đi ngắn nhất. Ta có được chuỗi mã hóa: “ENDTBTXNYVULWOFKJEGBYSTFPFMJFYMNVCBPYDDFSQOKEGPKX”

          Theo hint thì bản rõ bắt đầu bằng ENC mã bản mã hóa là END, nghi ngờ là mã hóa dịch vòng ở ký tự thứ 3. Vậy thì tại sao các ký tự trước không mã hóa dịch vòng ? Nhìn lên mê cung thấy N -> D có thay đổi hướng đi.

          Thử theo quy luật: khóa dịch vòng k = 0, cứ đổi hướng đi thì k+=1
Ph03nixCTF2018_BanhTet_2.PNG

          Ta được flag:  Ph03nix{ENCRYPTISONEOFWAYSTOKEEPYOURMESSAGESAFEFROMHACKER}

4. Pwnable – Xôi gấc – 100pt

          Server: nc pwn100.ph03nix.club 13337

          Có file ELFx64. Mở file bằng IDA để xem giả mã C

Ph03nixCTF2018_XoiGac_1.PNG

          Yêu cầu ở đây là số nhập vào bằng số mà server random tạo ra bằng hàm rand(). Nhưng trước đó có hàm tạo seed là srand(0) nên có thể đoán được nó là bao nhiêu. Bắt tay vào code thôi.

Ph03nixCTF2018_XoiGac_2.PNG

          Dùng dll của C trong Ubuntu để tạo seed và các giá trị random khác theo đúng thứ tự tạo ra như server đã tạo. Để tránh việc trễ thời gian client-server nên mình đã thêm vào biến pad.

Ph03nixCTF2018_XoiGac_3.PNG

          May mắn thay mạng nhanh, ít người giải bài này nên từ pad=0 là đã ra flag rồi.

          Flag: Ph03nix{Th@nk_y0u_f0r_p@rt1c1p@t10n_Ph03n1xCTF_…@@@}

5. Reverse Engineering – Nem rán – 150pt

          Có file PEx64. Chạy thử và thấy lỗi.

         Ph03nixCTF2018_NemRan_1.PNG

Mở file bằng IDA để xem.

Ph03nixCTF2018_NemRan_2.PNG

          Đoạn code ở 0x408180 được xor với số nhập vào (dl). Sau đó lại thực thi code đó, nhập lung tung lỗi là đúng rồi. Suy nghĩ, nếu nhập đúng sẽ hiện lên đoạn code in ra flag. Xem trong bảng string thấy có string hiện thị flag còn thiếu phần tên có địa chỉ 0x004080C0.

         Ph03nixCTF2018_NemRan_3.PNG

          Nếu in ra flag thì sẽ có đoạn push địa chỉ vào stack để làm tham số cho hàm printf. Dump đoạn code đó ra rồi đem xor với số từ 0 -> 255 để tìm đoạn code nào có chứa lệnh push tham số 0x004080C0 tức là code sẽ có đoạn “\xC0\x80\x40\x00”

Ph03nixCTF2018_NemRan_4.PNG

          Nhập thử 136 🙂

Ph03nixCTF2018_NemRan_5.PNG

          Một nửa vấn đề đã xong. Nhập tên sai vẫn không giải quyết được gì. Debug đến đoạn kiển tra tên nhập vào.

Ph03nixCTF2018_NemRan_6.PNG

Tên có chiều dài 0xE = 14 ký tự. Nhập không đúng độ dài là “There is nothing for you %s”. Nếu đúng thì sẽ đến đoạn kiểm tra.

Ph03nixCTF2018_NemRan_7.PNG

          Ở đây, tên nhập vào được xor với hardcode 0xD3 rồi so sánh với đoạn hex ‘A0 E3 A6 A1 B0 E0 8C B0 A1 E7 B0 B8 E0 A1’. Tìm ra tên thôi

         Ph03nixCTF2018_NemRan_8.PNG

          Nhập vào và ra flag: Ph03nix{s0urc3_cr4ck3r_r4t_d3p_tr4i}

          Không biết đẹp trai hay không nhưng code viết là 200pt mà cho có 150pt.

6. Miscellaneous – Măng hầm giò heo – 200pt

          Server: nc misc200.ph03nix.club 13337

          Hint: Do you known this algorithm?

Ph03nixCTF2018_MangHamGioHeo_1.PNG

          Chạy thử, thì thấy yêu cầu giá trị nhập vào thay đổi và số lần nhập hữu hạn trong khi không gian khóa thì lớn hơn số lần nhập.

          Nhìn thấy “High” và “Low” thì nghĩ đến thuật toán tìm kiếm trên cây nhị phân. Thử và nhận được đáp án.

Ph03nixCTF2018_MangHamGioHeo_2.PNG

          Viết code cho bao nhiêu round cũng được mà đề có mỗi 2 round 🙂

Ph03nixCTF2018_MangHamGioHeo_3.PNG

Flag: Ph03nix{@lg0r1thm_5p3c1@l15t5_15_y0u!!!}