<h1> Baby Dragon CTF </h1> <h2> RodidoR(WEB) </h2> http://207.148.79.171:5000/ Bài này là lỗ hỏng Idor, liên quan đến việc leo thang đặc quyền theo chiều ngang, cho phép user có thể xem nội dung của các user khác bằng cách thay đổi id ![image](https://hackmd.io/_uploads/S1oIt2D9a.png) Chúng ta có thể thấy id hiện tại là dXNlcjQ%3D ![image](https://hackmd.io/_uploads/rJXgj2w5p.png) Sau khi decode id ta nhận được user4, sau đó ta sẽ thay id thành user1...userN sau khi đã encode. Ta có thể dùng chương trình sau để thực hiện điều đó: ![image](https://hackmd.io/_uploads/rkh-22v5a.png) Sau khi thực hiện chương trình ta sẽ có các id từ user1 -> user2000 đã được encode. ![image](https://hackmd.io/_uploads/rJffRhPqT.png) ![image](https://hackmd.io/_uploads/rkdfR2wqp.png) Sau khi chạy thì ta thấy tại id user1337 xuất hiện Flag ![image](https://hackmd.io/_uploads/ry6cA3wca.png) <h2> #(WEB) </h2> http://207.148.79.171:24001/ ![image](https://hackmd.io/_uploads/r1ZmkavcT.png) Đây là lỗ hỏng SQL Injection, chúng ta có thể lợi dụng việc tiêm câu lệnh SQL vào hệ thống. Để thực hiện tiêm SQL vào hệ thống ta có thể nhập như sau: Username= '-- Password= ' <h2> 12 con giáp(WEB) </h2> http://207.148.79.171:5001/ ![image](https://hackmd.io/_uploads/rJvBMavcp.png) ![image](https://hackmd.io/_uploads/BkMOM6PqT.png) Sau khi truy cập vào trang thì ta được các hình ảnh như trên, và ta có thể ở đây là **Value** có sự thay đổi. Giá trị **Value** là tên các con vật, tuy nhiên đã bị đảo ngược. Để có thể đăng nhập với tư cách là msecer thì ta thay giá trị Value thành **recesm** ![image](https://hackmd.io/_uploads/H1mOQTD96.png) <h2> Dưa muối ngày Tết(WEB) </h2> http://207.148.79.171:5005/login Bài này liên quan đến việc leo thang đặc quyền theo chiều dọc. Đầu tiên ta sẽ thử đăng nhập với 1 username bất kỳ ![image](https://hackmd.io/_uploads/Sk454pPqT.png) Và kết quả trả về là: ![image](https://hackmd.io/_uploads/BJT346w5p.png) Hầu như các bài leo theo đặc quyền theo chiều dọc sẽ liên quan đến file **robots.txt** của hệ thống. Vì vậy ta sẽ check xem trong file gồm những gì. ![image](https://hackmd.io/_uploads/SkRgHpvcp.png) Ở đây hệ ta có thể thấy Username là **msec_member** vì vậy chúng ta hãy đăng nhập với Username là msec_member và role là cat ![image](https://hackmd.io/_uploads/B1aUHpDq6.png) Sau khi đăng nhập với Username là msec_member và role là cat thì hệ thống vẫn báo lỗi Vì vậy ta cần check xem cookie của trang ![image](https://hackmd.io/_uploads/S11cUaPcT.png) Ở đây xuất hiện cookie của trang là: gASVKwAAAAAAAAB9lCiMCHVzZXJuYW1llIwLbXNlY19tZW1iZXKUjARyb2xllIwDcmF0lHUu Sau đó ta đường link http://207.148.79.171:5005/login trong Chrome của Burp Suite và chuyển Intercep sang On ![image](https://hackmd.io/_uploads/HJ5qXvOj6.png) ![image](https://hackmd.io/_uploads/r1be4wOs6.png) Sau khi bấm login thì trong Burp Suite sẽ hiện ra 1 bảng như thế này ![image](https://hackmd.io/_uploads/BkyN4Pdia.png) Ta sẽ thay role cat -> admin và nhấn Forward và chuyển Intercep sang Off thì ta sẽ được Flag ![image](https://hackmd.io/_uploads/ryKxrPOiT.png) **Cách 2:** Sau khi đã lấy cookie của trang: gASVKwAAAAAAAAB9lCiMCHVzZXJuYW1llIwLbXNlY19tZW1iZXKUjARyb2xllIwDcmF0lHUu Ta có thể sử dụng tính năng decode trong Burp Suite ![Screenshot 2024-01-31 201058](https://hackmd.io/_uploads/HydXzV0ja.png) Ta thay thế role từ rat -> admin ![Screenshot 2024-01-31 201357](https://hackmd.io/_uploads/BJu7zNAi6.png) Khi đó ta sẽ thu được cookie mới, ta copy cookie đó và thay cho cookie cũ của trang là sẽ ra Flag. <h2> Crack me again(MISC) </h2> Đây là bài tìm password cho file ta có thể sử dụng phần mềm **Kraken** Anh em có thể bấm và đây để xem hướng dẫn https://www.youtube.com/watch?v=05YQxZZTD2I Làm theo hướng dẫn sẽ được pass là: x1nch40 nhập pass vào file để lấy FLag <h2> Bits_Convert(CRYPTO) </h2> ct = '10000001010100011010000110010100100000011001100110110001100001011001110010000001101001011100110010000001000110010011000100000101000111011110110110100101110100001101010101111100110011011011100011000001110101001110010110100001011111011010100101010100110101010101000101111101110100010011110101111101110011010010000011000101100110011101000101111101001101001100110111110100100000' ![image](https://hackmd.io/_uploads/rkAD4AD5T.png) Sau khi decode ta được như sau: FLAG{it5_3n0u9h_jU5T_tO_sH1ft_M3} Tuy nhiên format của giải là MSEC{} Nên Flag là: MSEC{it5_3n0u9h_jU5T_tO_sH1ft_M3} <h2> Baby RSA(CRYPTO) </h2> Đề bài: ![image](https://hackmd.io/_uploads/rkY_b3Ooa.png) Output.txt _n = 488594150018356104743360471780205403545441209060256729137164038537676599362878190981920516554421590258238515618449750985891175030926717331209498982161611981924927571937232980671860995692342844980196870803553484460965923405826239739612544997270974984272106618470669107922303287837996978131051615925495644837 _q = 80010678722841069804372512802456615676374598635439671916170512885067569296605399657233599421856535796385681607868510909937338841790332071846857268291 enc = 0x260772A51CABF4DB2AD87F563EBC1A7F1329D28900F1C2350F36B586B4D50E85EBDE64E5F547D9FE28FA90B1D1C1108E80452639D7D3560B2F161EA82625C8CEF3D8C2E881E1B010ECE2CE0C8F574180B2CC75D193C3006A95B1360D998EFA62E2B8F1496E61E44FC7B45F518EE1B8C237D46A151283B0AA704888F9A80AD376 Hướng giải: ![image](https://hackmd.io/_uploads/rkxh9JYjT.png) **B1: Tìm n và q** Từ đề bài ta có _n = n >> 8 nên n = _n << 8 + h (sao cho h chạy từ 0 - 255) _q = q%2**(512-16) => q = k *(2 ** 496) + _q với k chạy từ 2^15 -> 2^16 -1 **B2: Tìm p** Từ n và q vừa tìm được ta sẽ tìm p = n/q tuy nhiên phải thỏa 2 điều kiện sau: +p phải là số nguyên +n phải chia hết cho q **B3: Tìm m** Dựa trên các dữ kiện đã có, ta có thể tìm m bằng công thức sau: ![image](https://hackmd.io/_uploads/SytMo2diT.png) ![image](https://hackmd.io/_uploads/SyAb370ja.png) <h2> Advanced Bits_convert(CRYPTO) </h2> Đề bài ![image](https://hackmd.io/_uploads/ryI16qhsp.png) output: 111001011001011100011101010111100101001001001001110111110011101011111110100110100111011111100110010011111010110110011100001100001 - Giải thích đề : từ flag ban đầu loại bỏ MSEC{} chỉ còn lại nội dung bên trong {..} . sau khi loại bỏ đi xong thì chuyển từng kí tự trong cái nội dung đó về mã nhị phân và nếu mã nhị phân nào có tiền tố 0b thì xóa nó, rồi ghép chúng lại thành 1 mã nhị phân dài rồi bỏ vào tệp output . biết nội dung ban đầu có độ dài là 16 kí tự - Hướng giải : từ chuỗi nhị phân trong tệp output chúng ta sẽ viết code để tách cái chuỗi đó về thành 19 chuỗi con ban đầu, sau đó decode để tìm ra flag - Cách giải : đây là chuỗi nhị phân không đầy đủ do đã lượt bỏ 0xb ở phía trước. VD: 00010110 sau khi lượt bỏ 0xb thì ta sẽ được như sau: 10110 - Từ dữ kiện chuỗi nhị phân output đã cho có 129 số và có tổng cổng 19 kí tự chúng ta có thể phân tích ra sẽ có 15 chuỗi con gồm có 7 số và 4 chuỗi con gồm có 6 số . - vấn đề đặt ra ở đây là dùng hàm gì để tách được chuỗi dài ra 19 chuỗi con => hàm đệ quy Đoạn code để giải ra bài này : ![image](https://hackmd.io/_uploads/H10ucQCs6.png) - Giải thích đoạn code trên : 1, candidate = [] : tạo ra 1 danh sách dùng để lưu trữ 2, tmp [ ] : khởi tạo ra 1 cái danh sách tạm thời từ đó có thể chuyển bits qua ascii 3, maxLength = len(output) : lưu trữ chiều dài của chuỗi 4, def get_flag : định nghĩa hàm đệ qui get_flag 5, if idx < maxLength : kiểm tra xem idx có nhỏ hơn chiều dài của chuỗi không 6, if output[idx] == “1” : kiểm tra xem nếu tại idx bit là 1 - if idx + 6 <= maxLength : nếu có thể lấy 6 bit mà nó không lớn hơn độ dài của chuỗi => lưu vào danh sách tạm thời đồng thời gọi đệ quy với vị trí idx + 6 - if idx + 7 <= maxlength : cũng tương tự nhưng thay 6 = 7 7, else : pass : nếu bit không là 1 => không thực hiện hành động nào 8, else : nếu vị trí hiện tại lớn hơn hoặc bằng chiều dài tối đa của chuỗi bits - if len(tmp) == 19 : kiểm tra nếu chiều dài cảu danh sách tạm thời ‘tmp’ là 19 - candidate.append("".join([chr(int(_, 2)) for _ in tmp])) : chuyển đổi mỗi chuỗi bits thành ascii => in ra cuỗi cùng là : recUr$IoN_iS_LOV3!! => flag là : MSEC{recUr$IoN_iS_LOV3!!}