# DEADLINE CTF Task 3: Deadline 9/12/2024 Học cách sử dụng IDA, giải các bài trên picoctf.com , giải ít nhất 10 bài (Độ khó tự chọn) và viết writeup chi tiết về các bài đã giải được Link tải IDA 8.3 Pro Free: https://t.me/IDA_Pro/33 # Welcome ![image](https://hackmd.io/_uploads/H1qzsjnQkx.png) - Sau khi tải về ta có một file như sau ![image](https://hackmd.io/_uploads/Bk9MnjhXJg.png) - File này chưa thể thả vào ida được nên ta phải rename nó thành file .exe - Chạy thử chương trình xem nó có gì, sau khi chạy nó xuất hiện dòng như sau: - ![image](https://hackmd.io/_uploads/ryLPG0TXyg.png) - thấy có ``` The flag is...``` hơi nghi ngờ nên ta thả tệp vào IDA xem nó có gì đoạn đó. - Search dòng ```The flag is...``` , sau khi search ta có: ![image](https://hackmd.io/_uploads/HJs47R6Xke.png) - tới đây rồi ta ```fn f5 ``` cho nó qua ngôn ngữ C cho dễ đọc, sau khi f5 ta được: ![image](https://hackmd.io/_uploads/H1uWE0aQ1x.png) - Thấy có một đoạn mã nhìn có vẻ giống cờ, phía trước còn có hàm ``` main_rot``` nên có vẻ đem nó đi decode được - Sau khi decode nó bằng ```ROT13``` ta được flag: ```W1{YOU_DID_IT######WELCOME_TO_THE_WANNAGAME_FRESHMAN_2023!!!!!``` # CÁC BÀI TRONG PICOCTF ## VaultDoorTraining. ## ![image](https://hackmd.io/_uploads/H1eIk8ATmkl.png) - mở file mới tải về trên notepad ta thấy một chương trình java như sau: ![image](https://hackmd.io/_uploads/SkgvwRTQkg.png) - Thấy có phần ``` picoCTF{} ``` và một cái còn lại hình như hàm Password nên nhập thử, và đó là flag của bài này. ## file-run1 ## ![image](https://hackmd.io/_uploads/Hy2lFAaQkl.png) - Sau khi tải về ta chạy thử ta được flag kiểm tra quyền thực thi và chạy thử ta được flag: ![image](https://hackmd.io/_uploads/HkXiYCaX1l.png) ## file-run2 - Sau khi tải về ta chạy thử và nó ra dòng gì đó tôi không hiểu nên trích xuất file này thử xem có gì và thấy có một dòng flag ![image](https://hackmd.io/_uploads/Hk_zsC6Xkl.png) ## vault-door-1 ![image](https://hackmd.io/_uploads/ByKn20TmJe.png) - Tải file về mở nó trong notepad ta thấy một chương trình với các thứ tự kí tự nên tôi xếp lại thành flag: - ![image](https://hackmd.io/_uploads/By_jpRa7ke.png) ## Safe Opener ![image](https://hackmd.io/_uploads/B1Y000pmkx.png) - Tải file về ta có một chương trình java tương tự như vaultdoor, sau khi mở nó bằng notepad ta thấy một đoạn kí tự khó hiểu: ![image](https://hackmd.io/_uploads/Syq2RA6Qyg.png) - vì phần trên của chương trình có hàm ```base64``` nên tôi đem đoạn mã này đi decode bằng base64 và kết hợp với flag format ta giải được bài này: ![image](https://hackmd.io/_uploads/ryGj1kAQJg.png) ## Safe Opener 2 ![image](https://hackmd.io/_uploads/BkShx1RmJg.png) - Sau khi tải file về ta có một file java nhưng mở không được nên tôi ```strings ``` nó thử và lướt lên trên ta tìm được flag: ![image](https://hackmd.io/_uploads/SJM7-kCQkl.png) ## Reverse ![image](https://hackmd.io/_uploads/By55Zk0mke.png) - Bài này em thấy tương đối giống bài trước nhưng nó là file elf thôi - em kiểm tra quyền thực thi và chạy thử nó và nó bắt ta nhập password:![image](https://hackmd.io/_uploads/S1BQG1RXJl.png) - em ```strings``` file này thử và kéo lên ta thấy flag:![image](https://hackmd.io/_uploads/SJqFf1CXkx.png) ## GDB Test Drive ![image](https://hackmd.io/_uploads/rk2bGZRmJl.png) - Bài này hình như nó chỉ cách cho mình debug cho nên làm theo hướng dẫn thôi là mình có flag rồi hehe: - debug xong ta có flag:![image](https://hackmd.io/_uploads/B18LfZ07kx.png) ## Bit-O-Asm-1 ![image](https://hackmd.io/_uploads/B1YRw7lEJx.png) - Theo như đề thì gợi ý có vẻ là xem ở thanh ghi ```eax``` có gì, đoạn sau còn đề cập tới chuyển qua số thập phân theo dạng thì tìm được cờ. - Vậy nên tôi tải file về và xem trong chương trình chỗ thanh ghi ```eax```.![image](https://hackmd.io/_uploads/B19P_mgNJx.png) - Sau khi mở trên notepad thì ta sau thanh ghi ```eax``` có số ```0x30``` ta đem nó đi mã hóa sau khi mã hóa nó thành số thập phân ta được số ```48``` gắn vô với dạng cờ ```picoCTF{}``` ta được flag.![image](https://hackmd.io/_uploads/SJXrYme4ye.png) ## Bit-O-Asm-2 ![image](https://hackmd.io/_uploads/BkWChXx41g.png) - Bài này em thấy tương tự như bài trên nhưng chỗ ```hint``` nó nói là có liên quan đến con trỏ và xem con trỏ trỏ tới đâu. Thấy vậy em mở file trong notepad và đọc thử chương trình.![image](https://hackmd.io/_uploads/BJPVaQxNyx.png) - Nhìn vào thanh ghi ```eax``` có con trỏ hình như là trỏ đến ```<+15>``` và có dãy kĩ tự em đã bôi đen nhìn khá nghi ngờ là một dãy thập lục phân nên em đã đem đi mã hóa và ta có flag. ![image](https://hackmd.io/_uploads/r1ynaQl41l.png) - Kết hợp với dạng ta có flag. ![image](https://hackmd.io/_uploads/HyMZ07gV1g.png) ## Bit-O-Asm-3 ![image](https://hackmd.io/_uploads/ryIjH4xNke.png) - Bài này cũng giống hai bài trên nên tải file về và mở trong notepad xem: ![image](https://hackmd.io/_uploads/BJVNU4l4yx.png) - Sau khi mở và xem chương trình thì ta có thể thấy phần quan trọng của chương trình là phần em bôi đen ```asm! <+29>: mov eax,DWORD PTR [rbp-0xc] <+32>: imul eax,DWORD PTR [rbp-0x8] <+36>: add eax,0x1f5 ``` - Theo như em tìm hiểu thì đầu tiên là gán giá trị ```0x9fe1a``` cho thanh ghi eax - Sau đó ```imul``` là nhân eax với con trỏ ở vị trí ```<+22>``` là giá trị ```0x4``` - Cuối cùng là ```add``` cộng với ```0x1f5``` - Ta có thể chuyển các giá trị sang thập phân cho dễ tìm được giá trị sau khi nhân cộng theo chương trình thì ta có giá trị cuối cùng là ```2619997``` - Và ta có flag: ![image](https://hackmd.io/_uploads/r1sxuVg4Jx.png) ## Bit-O-Asm-4 ![image](https://hackmd.io/_uploads/r1ONaEgVkx.png) - Ừm bài này giống với 3 bài trên nên cứ thế mà làm thôi, sau khi tải file về và mở nó: ![image](https://hackmd.io/_uploads/H1pvaNlN1x.png) - Bài này có các phép toán logic ```asm! <+15>: mov DWORD PTR [rbp-0x4],0x9fe1a <+22>: cmp DWORD PTR [rbp-0x4],0x2710 <+29>: jle 0x55555555514e <main+37> <+31>: sub DWORD PTR [rbp-0x4],0x65 <+35>: jmp 0x555555555152 <main+41> <+37>: add DWORD PTR [rbp-0x4],0x65 <+41>: mov eax,DWORD PTR [rbp-0x4] ``` - Đây là phần quan trọng nhất của bài này. ```asm! cmp DWORD PTR [rbp-0x4],0x2710 <+29>: jle 0x55555555514e <main+37> ``` - ```cmp``` là phép so sánh giữa hai giá trị - ```jle``` là phép nếu so sánh giá trị đó mà nhỏ hơn hoặc bằng thì chương trình sẽ nhảy tới vị trí ```<main+37>``` - Nhưng sau khi so sánh thì ```654874 > 10000``` nên ```jle``` không thực hiện. ```asm! sub DWORD PTR [rbp-0x4],0x65 <+35>: jmp 0x555555555152 <main+41> ``` - Vậy thì lệnh này thực hiện thôi. Sau khi cộng vào và nhảy tới ```<main+41>``` thì có eax mới và đó là flag. ![image](https://hackmd.io/_uploads/rJqwyHxE1g.png) ## ASCII FTW ![image](https://hackmd.io/_uploads/ByC_zHeEkg.png) - Sau khi tải file về thì ta bỏ vào IDA ![image](https://hackmd.io/_uploads/Hyx3Mre41x.png) - Thấy chuỗi kí tự như kia thì ta có thể suy ra cờ là nó nên em sắp xếp lại thành chuỗi ta được flag. ![image](https://hackmd.io/_uploads/B1RJ7BlVJl.png)