# ASCIS 2022 FINAL Đa số các bài viết mình đều chú trọng vào writeup của một bài CTF nào đó. Tuy nhiên bài này mình sẽ nói về cách team đã chuẩn bị từ vòng Sơ Khảo đến Chung Khảo, và quá trình cả team làm bài ở vòng Chung Khảo. ## Về vòng Sơ Khảo Trước vòng sơ khảo team mình không chuẩn bị gì nhiều ngoài việc chơi thật nhiều CTF. Về kì thi, mình nghĩ cả team đều làm rất tốt ngoại trừ bản thân, vì mình cảm thấy đề CTF nhìn chung nghiêng nhiều về RE, nhưng cũng chính bản thân lại phải mất rất nhiều thời gian vì một lỗi cơ bản, khiến cho bản thân không thể giúp đồng đội giải những bài khác. Và mình đã khiến cho team phải trả giá điều đó bằng việc chỉ đứng thứ hai, và mất luôn cơ hội đi thi Cyber SEA Game. ![](https://i.imgur.com/OhSnTgF.jpg) Sau đó mình đã tự trách bản thân rất nhiều, nhưng mình cũng ý thức được rằng bản thân cần phải tiến tiếp vì chỉ còn 3 tuần nữa để bước vào vòng Chung Khảo. ## Trước Chung Khảo Lúc này mình biết được tin VCS sẽ ra đề vòng chung khảo, mình đã nghĩ ngay tới việc format đề sẽ được thay đổi bằng thể thức từ King of the hill sang Attack Defense. Nhờ sự hỗ trợ của các thầy trong CLB, mình đã setup và test thử những tool cơ bản để làm quen trước, nhưng khi thi lại không dùng đến tool nào đã được chuẩn bị cả =))))). Nhưng có một điều may mắn thay, lúc chuẩn bị mình đã sử dụng platform Forcad của team `C4T_BuT_S4D` vì platform sử dụng python là chính, nên mình có thể điều chỉnh mọi thứ theo ý muốn một cách dễ dàng. Và lúc đi thi, ban tổ chức cũng đã sử dụng chính platform này để tổ chức kì thi, nên lúc làm bài mình cảm thấy thoải mái hơn vì mình cũng tương đối hiểu được cách hoạt động của chính platform này. Mặc dù chuẩn bị như thế, team chỉ dành vỏn vẻn 1-2 ngày để test tool rồi quăng qua một bên để chơi CTF tiếp. ## Chuẩn bị bước vào kì thi BTC công bố thể thức thi trước 2 ngày, đó cũng là lúc cả team đã đặt chân xuống Hà Nội. Thế là thay vì được đi chơi ở khắp thủ đô, cả team lại dành mọi thời gian để chuẩn bị tool. Ngoài ra nhờ các anh cựu sinh viên, mình đã xin được một tool proxy khá xịn, giúp cho team dễ thở hơn trong việc phòng thủ. Tuy vậy, một trong những điều mình đã rất lo lắng đó chính là cả team phải làm như thế nào nếu không setup được proxy, vì nếu không làm được điều đó, cả team sẽ không thể phòng thủ được và có thể sẽ mất rất nhiều điểm. Mình đã phải đi hỏi anh Google rất nhiều, và cũng không quên hỏi những câu ngớ ngẩn với các anh cựu sinh viên (và mình cũng đã hi vọng các anh sẽ không đấm mình về những câu hỏi đó nếu có gặp ngoài đời thật). ## Và thế là chuỗi đau khổ bắt đầu ### Bắt đầu kì thi (8h30 hơn) Team mình chia công việc ra: 2 bạn Web và Pwn của team sẽ tập trung Attack, mình sẽ lo hết chuyện hậu cần, bao gồm setup các tool và phòng thủ, còn bạn Crypto sẽ tập trung giải các bài Jeopardy. Lúc này mọi chuyện đều theo kế hoạch rất mượt, kể cả việc setup proxy, việc này có thể diễn ra tốt hơn để không bị mất điểm khi con bot check service, tuy vậy team chỉ mất một số điểm không lớn nên đối với mình việc setup proxy đã thành công ngoài mong đợi. Sau 1 tiếng, team đã nhanh chóng tấn công được service của các đội khác và mang về một số điểm lớn, qua đó chiếm được đỉnh bảng một cách nhanh chóng. Nhưng mình đã không nhận ra chính mình đã mắc phải lỗi dẫn đến việc team cũng mất điểm... ### Sự ổn định (12h trưa) Lúc này các team đã bắt đầu chặn được payload tấn công của các team khác, và team mình cũng nằm trong số đó, nên Pwn và Web bên mình lại tiếp tục tìm các cách khác nhau để tấn công. Trong lúc này Crypto của team mình đã làm được bài Crypto và Forensics ở phần Jeopardy, đem về số điểm đủ lớn để thúc đẩy tinh thần của team lên cao và tiếp tục đà thăng tiến. Lúc này mình quyết định để bạn Web của team phụ trách cả việc tấn công lẫn phòng thủ cho bài web duy nhất của giải, mình chỉ việc reset proxy mỗi khi rule mới được thêm vào cho bài web. Và mình đã toàn tâm phòng thủ cả 2 bài pwn. Tóm tắt sơ, trong bài pwn2 mình đã filter 2 kí tự byte `\x7f` và `\x40`, hầu như chính cả 2 rules này đã chặn được đại đa số các payload của team khác. Còn về bài pwn1, mình chỉ việc lọc các từ như `cat`, `flag`,... để chặn command injection. Nhưng khi mình filter luôn cả 2 kí tự byte như bài pwn2, con bot lại không cho, và mình không nhận ra điều này suốt cả quá trình thi cho đến khi sắp kết thúc. Chính vì điều này, team đã mất hạng nhất vào tay của team `KMA.L3N0V0`, nhưng lúc này web đã tìm ra được nhiều cách tấn công nên đã kéo team lại top 1 không lâu sau đó, tuy vậy việc trừ mất điểm liên tục ở bài pwn1 đã khiến cho vị trí của team mình bị đe doạ liên tục, nhưng rất may các bạn đảm nhận việc Attack đã làm rất tốt nhiệm vụ. ### Đường về đích (3h hơn) Đây là lúc mình đã phát hiện vấn đề này và đang tìm cách sửa cách phòng thủ cho bài pwn1. Tới đây mình đã kết hợp với bạn Crypto bên mình: bạn Crypto sẽ theo dõi vào bảng thống kê để biết ai và bao nhiêu người đang lấy được flag các service của team, còn mình tìm cách phòng thủ sao cho con bot có thể check được service của mình và đồng thời mình không bị tấn công nhiều nhất có thể. Trong lúc này team Duy Tân có vẻ đã tìm được cách tấn công các service của các team khác (đặc biệt là bài web) theo một cách nào đó và đã lấy được rất nhiều điểm từ các team hạng cao, kéo cả team lên hạng nhì và liên tục đe doạ vị trí hạng nhất của team mình. Cũng chính lúc này con bot bắt đầu "ám" bài web của team, khi con bot có vẻ không cho phép các rule của bạn Web team mình thêm vô. Lúc này khoảng cách của 2 team hạng nhất và team hạng nhì chỉ vỏn vẻn 1000 điểm, nên mình đã bàn với bạn Web rằng nếu như tìm được một tập các filter nào mà con bot chấp nhận thì cứ giữ nguyên như thế, vì việc để service bị down sẽ mất điểm nhiều hơn so với việc bị cướp flag. Và team mình cứ theo chiến thuật này mà làm đến khi kì thi kết thúc, lúc này khoảng cách của team Duy Tân và team mình ngày càng ngắn đi nhưng vẫn không đủ để Duy Tân có thể lấy được vị trí hạng nhất của team mình. Và cuối cùng ước mơ 2 năm trước của mình đã trở thành hiện thực, khi có thể cùng đồng đội chạm được chức vô địch kì thi Sinh Viên An Toàn Thông Tin. ![](https://i.imgur.com/C15UMCC.jpg) Sau kì thi, mình biết được rằng team Duy Tân có vẻ như không gửi payload qua gateway mà gửi thẳng vô service của các team để tránh bị filter, có vẻ như Duy Tân có thể làm được điều này là vì một số team đã setup proxy không đúng chỗ nào đó, dẫn đến việc payload có thể được gửi thẳng tới service. ## Những lời cuối cùng Kì thi Sinh Viên An Toàn Thông Tin lần này có vẻ tất cả các team đều không có kinh nghiệm nhiều vì thể loại Attack Defense không được phổ biến ở Việt Nam, đồng thời việc công bố luật thi trễ đã khiến cho việc các team không có thời gian chuẩn bị, nên mình cảm thấy team đã chiến thắng nhờ việc chuẩn bị kĩ lưỡng trong một khoảng thời gian cho phép tương đối ngắn. Và đây cũng chính là lí do mình viết bài này. Mặc dù mình rất muốn trường mình luôn đạt giải cao ở các kì thi Sinh Viên An Toàn Thông Tin năm tới, nhưng mình mong muốn rằng các bạn đọc bài blog này ở các trường khác nhau sẽ có được một cái nhìn mới hơn và hiểu rõ hơn về thể thức này, như thế các cuộc thi ở những năm tới sẽ cạnh tranh khốc liệt hơn và hấp dẫn hơn. Lời cuối cùng mình xin cảm ơn rất nhiều các anh trong CLB đã giúp team cả quá trình luyện tập, cảm ơn các anh cựu sinh viên, đặc biệt là anh Thế Đức và anh Trùng Khánh đã chỉ dẫn mình rất nhiều, và cảm ơn team đã đồng hành cùng mình để mình có thể đạt được những gì có được trong hôm nay.