Đăng trong CTF

{CTF_Write-up} Securinets Prequals 2K19 – 23/3/2019

Server: https://www.ctfsecurinets.com/

Scoreboard: scoreboard

Rank: rank


Challenges:

 


[MISC] Sanity Check – 10 pts

SanityCheck

Kết nối kênh chat, có ngay flag

flag

Flag: Securinets{PReQu@l$_2K19}

 


[MISC] HIDDEN – 200 pts

Hidden

Nội dung web không có gì đặc biệt.

Screenshot from 2019-03-27 00-40-58

Viewsource cũng không thu được gì. Tuy nhiên nhìn kỹ trang web, chú ý trên thanh địa chỉ sẽ thấy biểu tượng ổ khóa với dấu cảnh báo, click vào thì browser báo ‘Connect Is Not Secure’, như vậy có gì đó không đúng với certificate của website này. Click vào xem chi tiết certificate thì có được flag

Screenshot from 2019-03-27 00-44-23

Flag: Securinets{HiDDeN_D@tA_In_S3lF_S3iGnEd_CeRtifICates}

 


[MISC] EZ – 331 pts

Download challenge

EZ

Không biết ‘WORD’ ở đây có ý nghĩa gì, nhưng tác giả gợi ý chúng ta đi tìm nó, rồi mã hóa với sha1 để thu được flag. Click vào link thì tải về được 1 file ảnh png.

pic

Có thể flag được giấu đâu đó trong file ảnh này. Phản ứng đầu tiên là thử lệnh strings xem có thu được gì không. Kết quả là … không thu được gì. Như vậy bài này có thể là dạng Steganography. Có nhiều phương pháp để giấu tin trong file ảnh, trong đó phương pháp được biết đến nhiều nhất là LSB (least significant Bit) – sử dụng bit thấp nhất của các pixel để chứa thông tin ẩn. Ta có thể dùng tool online https://stylesuxx.github.io/steganography/ hoặc tự viết source, cũng khá đơn giản. Sau khi đã extract ta thu được đoạn văn ẩn giấu:

Screenshot from 2019-03-27 01-14-45

Trong đoạn văn trên có đoạn bị xóa mất , như vậy ‘WORD’ mà đề bài đề cập chính là chỗ bị xóa mất này. Đoạn văn trên chắc hẳn được lấy từ 1 cuốn sách hay tiểu thuyết nào đó. Copy vào google tìm được là memorandum-book. Làm y như đề bài, đem đi sha1 nó sẽ thu được flag

Flag: Securinets{b47f0d2a8866a75696f94a515d0cdf54c7ea3174}

 


[CRYPTO] – Useless Admin – 869 pts

Download Challenge

Unless_Admin

One time pad là một loại stream cipher được mệnh danh ‘Unbreakable’. Thế nhưng ở đây Admin đã sử dụng lại key stream để mã hóa cho nhiều đoạn plaintext (thế nên gọi là multi time pad). Khi dùng lại key stream nhiều lần sẽ tạo điểm yếu bảo mật.

Many time pad Attack

Trên mạng đã có sẵn source cho multi time pad attack, chỉ việc đưa vào áp dụng thôi.

https://github.com/Jwomers/many-time-pad-attack/blob/master/attack.py

Kết quả thu được:

Screenshot from 2019-03-27 22-28-12

Kết hợp thử sai và kỹ năng google, ta dễ dàng tìm lại được flag là một câu nói của ngài Author Conan Doyle (tác giả chắc là fan của ngài).

Flag: Securinets{I wanted to end the world, but I’ll settle for ending yours}

 


[CRYPTO] MAZE – 952 pts

Download Challenge

maze

Tiếp theo là 1 bài về RSA. Download file chall.zip về extract ra sẽ được 1 folder trong đó có file cipher.txt chứa ciphertext và 101 file publickey ở dạng .pem.

Screenshot from 2019-03-27 23-51-57.png

Theo caption từ đề bài thì có lẽ key đúng nằm ở 1 trong số 101 file này. Bài này là một thể hiện của phương pháp Common factor Attack. Đại khái là nếu ta dùng một công cụ tạo số nguyên tố ngẫu nhiên để phát sinh nhiều key RSA, nếu công cụ đó được lập trình không tốt thì sẽ có một tỷ lệ nhỏ hệ thống sẽ tạo ra các số n có chung factor, tức là sẽ có ni, nj nào đó mà ni = p*q1nj = p*q2. Nếu điều đó xảy ra, ta dễ dàng factor ni, nj bằng cách tính gcd(ni, nj) = gcd(p*q1, p*p2) = p.

Có 1 tool trên github rất hay về RSA ở link. Trong đó đã có sẵn source cho nhiều loại attack RSA. Quăng đống file này vào tool trên sẽ có luôn private key.

Screenshot from 2019-03-28 00-04-26

Sau khi có private key, ta sẽ trích xuất n, e, d để decrypt ciphertext. Sourcecode trong file solve.py ở link bên dưới. Nếu bạn nào không thích cách làm phụ thuộc vào tool như trên thì có thể tham khảo source trong file solve2.py

Screenshot from 2019-03-28 21-27-33.png

Flag: securinets{rs4_1s_g00d_s0m3t1m3s!}

 


[CRYPTO] RSA/Encoding error – 1000 pts

Download Challenge

RSA_Encodding_error

Lại là 1 bài RSA nữa, bài này khá khoai, nếu không có hint thì khó mà giải ra, vì không đoán được ý đồ của tác giả. Download file .zip về giải nén ra ta được 1 file ảnh ctf_image.png. Đây là 1 ảnh mã QRCode. Dùng app QRCode trên điện thoại quét ảnh thì được hint: every information bit matter. Cũng chẳng khác gì phần description. Thử ‘strings ctf_image.png’ có thể thấy được 1 số strings lạ: ‘tExtComment’, ‘e = 2^16 + 1’, ‘output.txt’, những string này chắc chắn có hữu ích. Thử ‘exiftool ctf_image.png’ thì có

Screenshot from 2019-03-28 20-30-50.png

Như vậy, rõ ràng ta đã có được e = 2^16 + 1. Hơn nữa có gì đó liên quan đến file output.txt. Thử ‘binwalk ctf_image.png’ thu được 3 file trong đó có file output.txt

Screenshot from 2019-03-28 20-33-44.png

file output.txt gồm nhiều dòng, mỗi dòng gồm các nhóm 5 bit. Đến đây bắt đầu bế tắc. May nhờ có hint từ discord:

Screenshot from 2019-03-28 20-35-20.pngĐến đây đã khá rõ. p, q chính là kích thước file ảnh. p = 887, q = 521. Mã hóa sử dụng Repetition code để hạn chế lỗi truyền tin, giờ mới thấy cái tên bài có liên quan :v. Việc còn lại chỉ là code thôi

Screenshot from 2019-03-28 20-39-12

Flag: Securinets{xJbht0oWpsOa1e3WnXo9FDnUj3VZpZsuxMPVlYEN}

 


[PWN] – Welcome – 416 pts

Download challenge

welcome

ssh vào server, kiểm tra server thấy có các file sau:

Screenshot from 2019-03-28 01-45-48

File wrapper được set SUID như vậy đây là file mà ta cần exploit. Các file flag.txt, welcome, welcome.c đã restrict quyền read. Xem sourcecode wrapper.c

Screenshot from 2019-03-28 02-00-01.png

Ở đây tác giả cho ta nhập vào một lệnh, sau khi filter qua blacklist[] sẽ thực hiện lệnh với system(str). Đây là bài dạng bypass command filter. Có khá nhiều lời giải cho bài này, chẳng hạn:

Screenshot from 2019-03-28 02-06-12.png

Flag: securinets{who_needs_exec_flag_when_you_have_linker_reloaded_last_time!!!?}

 


[REVERSE] Matrix of Hell! – 992 pts

 

Download challenge

matrix_of_hell

Chạy file rev, chương trình yêu cầu nhập PASSWORD, ta nhập bừa vào thì sẽ được thông báo ACCESS DENIED

Screenshot from 2019-03-29 20-58-45.png

Tiến hành decompile file rev bằng GHIDRA, sau khi đổi tên các biến cho dễ nhìn ta thu được pseudocode. Đoạn code đầu tiên tạo ra một mảng nào đó, tôi đặt là something.

Screenshot from 2019-03-29 21-09-06.pngChuyển code sang python cho dễ xử lý, in mảng something ra xem ta thu được gì

Screenshot from 2019-03-29 21-12-09

Để ý rằng mảng something gồm các phần tử là các số trong khoảng 65-90, đây là mã ASCII của các chữ cái ‘A’ -> ‘Z’.

Tiếp theo, chương trình cho người dùng nhập vào password, lưu vào biến PASSWORD. Từ đoạn code Screenshot from 2019-03-29 21-15-59.pngta biết rằng PASSWORD phải có chiều dài là 14 ký tự.

Đoạn code thứ 2 tạo ra chuỗi ENCODED từ PASSWORDsomething

Screenshot from 2019-03-29 21-17-04.png

Chuyển code trên sang python để xem đoạn code hoạt động thế nào

Screenshot from 2019-03-29 21-21-44

Phân tích code + tên đề bài, ta dễ suy ra được rằng something chính là ma trận bảng chữ cái với các dòng được đánh thứ tự từ ‘A’ -> ‘E’, các cột được đánh thứ tự từ ‘1’ -> ‘5’. ENCODED được tạo ra bằng cách tra từng ký tự của PASSWORD vào bảng. Ví dụ, ký tự ‘N’ với mã ASCII là 78 nằm ở ô C3, ký tự O có mã ASCII là 79 nằm ở ô C4, … Kết quả thu được chuỗi ENCODED tương ứng.

Tiếp tục với đoạn code quan trọng thứ 3

Screenshot from 2019-03-29 21-28-57

Vì sVar3 = strlen($ENCODE) < 28 nên bVar1 = c >> 0x37 luôn cho kết quả là 0. Vậy nên đoạn code trên có thể rút gọn thành

Screenshot from 2019-03-29 21-33-14.png

STRING sau đó được so sánh với chuỗi ‘B0C2A2C6A3A7C5@6B5F0A4G2B5A2’. Nếu STRING giống với chuỗi trên thì chương trình sẽ tiến hành tính FLAG và in ra màn hình.

Screenshot from 2019-03-29 21-34-34

Như vậy nhiệm vụ của ta đã rõ, ta sẽ phải tiến hành các bước reverse để tìm lai chuỗi PASSWORD đúng, nhập vào và chương trình sẽ in ra FLAG. Đến đây coi như đã hoàn thành 90% challenge, việc còn lại rất đơn giản, chỉ đơn thuần code 🙂 test.py, solve.py

Screenshot from 2019-03-29 21-54-03

Nhập PASSWORD vào ta nhận được FLAG

Screenshot from 2019-03-29 21-55-07

Flag: 1337_FD_DDLLLKMO_KUWRRRVL_HAHAHA


Một suy nghĩ 1 thoughts on “{CTF_Write-up} Securinets Prequals 2K19 – 23/3/2019

Bình luận về bài viết này