Posts

Showing posts with the label CTF

LACTF2023 - MISC

Image
misc/CATS!      Đọc đề, chúng ta thấy đề yêu cầu "Figure out the name of this cat heaven" có nghĩa là đi tìm tên của thiên đường mèo này, thêm nữa, phần chữ nhỏ có nói: "câu trả lời là miền của website và flag sẽ có form lactf{domain}".      Vì vậy, chúng ta sẽ dùng google image để tìm ra thiên đường mèo. Nhưng không thể tìm ra khung cảnh giống ảnh 100%, chúng ta sẽ sử dụng thiên đường có hỉnh ảnh giống 98%. Từ đó, thấy được thiên đường là Lanai Cat Sanctuary".     Flag: lactf{ lanaicatsanctuary.org} misc/EBE      Đề bài đã gợi ý rằng, "tôi" đã chỉ gửi 1 kí tự/ 1 lần truyền thông tin. Thì có nghĩa là khi chúng ta xem thông tin của một lần bắt thì chỉ có 1 ký tự, thật dễ dàng để nhận ra đó là kí tự cuối cùng của chuỗi ACSII:      Bạn có thể nhìn thấy khi ấn vào dòng Data, nó sẽ là dữ liệu được truyền đi. Và dữ liệu đó là "X". Vậy thì rất có thể flag của chúng ta sẽ được gửi bằng cách gửi từng kí tự một.  Bên ...

Incognito 4.0 CTF (Pwn/babyFlow)

Image
I. Overview => Nghĩ ngay lỗi ret2win mà tôi đã phân tích trong các blog trước bạn có thể xem lại nó trước khi xem tôi làm bài này 🙂     II. Analysis hàm  vulnerable_function :     argument_address(src) khi hàm gets được gọi:  0xffffd070 argument_address(dest) khi hàm ctrcpy được gọi:  0xffffd044 ret_address khi hàm ret được gọi:  0xffffd05c Khoảng cách từ src => dest: 44 bytes Khoảng cách từ src => ret_addr: 20 bytes Khoảng cách từ dest_addr => ret_addr: 24 bytes => STACK:       dest_addr      ==>      ret_addr      ==>       src Script để khai thác: Nhập 24 bytes + địa chỉ của hàm get_shell( 0x080491fc ) III. Payload Success: 

Ret2Shellcode

Image
[!] Mình khuyên bạn nên đọc phần 1 trước khi qua phần 2 mặc dù nó không liên kết với nhau nhưng bạn sẽ hiểu cách tôi exploit nó. I. Overview     Code c:                 Buffer cấp phát 300 bytes thì tha hồ mà buffer overflow :)). Đùa thôi nếu bạn đọc bài trước thì nó cx cấp phát 1 lượng byte khá lớn hình như là 178 bytes :)). Chắc đây là đặc điểm của mấy bài shellcode thì phải nhể ?     Checksec:                                                                                                           (bạn sử dụng vmmap với peda thì sẽ xem đc ảnh ở trên)      Thì trên stack nơi mà ta ghi vào có quyền execute ==> Đây là lỗi shellcode. ...

Shellcode (Part1)

Image
  ShellCode I. Pre-Overview  Trước khi overview nó thì bạn cần lắm được những kiến thức mà tôi sẽ đề cặp nó ở dưới đây:      void (*)(): là 1 dạng pointer trỏ đến các hàm có các đối số không xác định(indeterminate argument) và return no value.      (void (*)()): được hình thành từ dạng trên.      (void (*)())buf: hình thành buf từ loại trên.      ((void (*)())buf)(): gọi hàm nhưng không có đối số ==> Nó yêu cầu trình biên dịch coi buf như một pointer đến 1 hàm và để gọi hàm đó Ok. Thì đây là những gì bạn cần lắm được khi đọc code:            Dòng 17:  2 dòng 21 22 của chương trình thì bạn không cần phải quan tâm vì chức năng của nó là set Group ID để ngăn chặn khi mà ta /bin/sh loại bỏ các đặc quyền (Tức là đảm bảo tính toàn vẹn của hệ thống). II. Over View Thì sau khi rút gọn thì chương trình được simple hóa  như này:  (không khuyến khích) Thì lỗi đầu tiên mà tôi...

Buffer OverFlow

Image
 Buffer OverFlow (Lỗi tràn bộ đệm) Trong bài này mình xin phép lấy source của DownUnderCTF 2021 từ 1 anh trên mạng 😁 Các bạn lưu ý là chúng ta có  Stack OverFlow(Bộ nhớ tĩnh)  và Heap OverFlow (Bộ nhớ động) I. Overview Thứ mà bạn nhận được: Mình sẽ dùng ida64 để view pseudo code:       Đọc qua 1 lượt thấy mảng v4 cấp phát 24 phần tử dạng character và 1 variable v5. Nhưng điều bất thường ở đây bạn có thể thấy đó là chương trình yêu cầu nhập vào v4 nhưng mà lại lấy v5 mang đi so sánh 🙂. Bạn chưa phải biết gì vội hãy check xem hàm gets có chức năng gì ?           Khi bạn đọc xong dòng trên bạn nghĩ điều gì sẽ xảy ra nếu mình viết 25 phần tử + "\x00" or NULL byte? Follow tiếp phần checksec của trình gỡ lỗi gdb-peda  của nó:         Thì bạn có thể thấy chế độ CANARY đã bị disable thì ta có thể kết luận chắc chắn rằng đây là lỗi Buffer OverFlow  2. Analysis     Thì từ ảnh ida64 ở t...

PWN/bot write-up LACTF2023

Image
[DANGEROUS]: Cảnh báo bài này là 1 bài rất chi là "bịp" không được hỏi người viết tại sao 🙂  PWN/BOT I. Overview Firstly, Overview code c:            Bạn có thể thấy ở dòng 11 có 1 lỗi Stack Overflow. Và việc của bạn cần là by pass để gọi được system ra? No, no, no. Bạn không sai ==> Chúng ta sai Như bạn đã biết thì 1 chương trình c có điều kiện if-else cơ bản sẽ như sau:           thì khi mà conditions thỏa mãn thì nó sẽ dừng vòng lặp if-else và câu lệnh return 0 sẽ được gọi right ?? 1 vấn đề nữa trước khi chúng ta bắt đầu vào phân tích đó là nếu bạn ko return 0 thì chương trình mặc định vẫn sẽ làm điều đó thay bạn.              Oke, let's go. Bạn đã thử nhìn vào chương trình trên và thấy điều bất thường chưa :>?.     Câu lệnh exit(1) mà tôi thấy ở dòng thứ 31 nó được định nghĩa trên manual page:               Hơi, đi ngược l...

Ret2Win (phần 2)

Image
 RET TO WIN Mình nhặt được challenge này trên mạng: View source code c của đề:  Thoạt nhìn qua thì ta có thấy hàm void flag() không hề được nhắc đến or gọi ở hàm void main() ==> Như ở phần 1 thì chắc hẳn là các bạn nghĩ ngay phải ret nó vào hàm main để nó  puts ( " Exploited!!!!! " ); . Ngoài ra thì chúng ta vẫn còn 1 lỗi nữa là Stack Overflow. Nếu bạn nào đã xem được phần 1 thì bạn có thể dừng ở đây và tập thực hành với bài này.  Cú pháp để compiler nó gcc source.c -o vuln -no-pie -fno-stack-protector -z execstack -m32   I. Start     1. Checksec               2. Analysis          Set breakpoint at  0x0804919d of gets function  and  0x080491aa of ret instruction          Run this program with debugger gdb-peda:                We will have an arguments to use for gets function. It at  0xffffd078....

Ret và Ret2Win

Image
 Sơ lược về lệnh RET và lỗi Ret2Win 1. Analysis Để mọi người hiểu rõ hơn. Mình xin lấy bài easybin ở GrapCON CTF 2021.  Analysis main function:  Main function không hề đề cập đến hàm vuln ở chương trình của nó. Chúng ta cần phải can thiệp vào chương trình để hàm trả về của nó sẽ là hàm vuln. Khai thác tiếp theo thì mình thấy được ở chương trình này còn 1 lỗi nữa ở đây:  Đó chính là Stack OverFlow. Hàm gets thể kiểm soát được được số lượng input được nhập vào. Chính vì vậy ta có thể ghi đè lên stack địa chỉ của hàm vuln.  Chế độ bảo vệ stack CANARY ,NX, PIE, FORTIFY đều đã bị disable. Trong đó FORTIFY dùng cho lỗi GOT overwrite mình sẽ cố tìm hiểu nó ở những bài viết sau.  Vì vậy kịch bản khai thác chương trình của chúng ta sẽ là:     1. Tìm được địa chỉ của hàm vuln     2. Tính địa chỉ từ lúc nó được nhập đến câu lệnh ret     3. Overwrite địa chỉ đó lên stack     4. RET nó và lấy shell. 2. Exploit. A. Check vuln ad...