Posts

Exploit deaslr through _dl_runtime_resolve

Image
Chào tất cả mọi người, cuối cùng thì tôi cũng đã quay lại sau bao ngày im hơi lặng tiếng :)) Abstract: Hôm nay nhân một ngày đẹp trời, để đánh dấu sự trở lại của mình tôi có một bài viết để phân tích về một kỹ thuật exploit khi mà bạn không thể leak được bất kì thông tin gì và ASLR (Address space layout randomization) đang được bật và cũng không có bất kỳ thông tin về phiên bản libc được sử dụng trên server.  Explain: Đã bao giờ bạn đặt ra một câu hỏi "WTF? Tại sao chương trình nó chạy lại có thể run đến một cái hàm ở trong thư viện libc?" Để tìm hiểu thì bây giờ hãy thử compiler một file dơn giản sử dụng một hàm của thư viện nhé! File: test.c Hãy thử debug và next từng dòng lệnh assembly để khám phá!! Debug nào :)) Hãy chú ý đến từng lệnh vì tất cả nó đề có ý nghĩa rất quan trọng. Nhìn qua flow của chương trình thì thấy chương trình call đến hàm _dl_runtime_resolve_avx với 2 tham số được push vào stack. Trong trường hợp nà

WriteUp PWN 500pts - PwC Hackaday

Image
Map - PWN 500pts - PwC Hackaday Thực sự mà nói hôm thi thì cũng chưa có ngó đến được bài này thì phải. Nhưng tình cờ được "thần tượng" yêu cầu làm lại bài này. Sau một thời gian vật lộn với nó thì cũng đã xong (khá vất vả nhưng rất bổ ích). Sau đây mình sẽ trình bày write up về bài này để cho những ai quan tâm có thể tham khảo. Ở bài này mình chỉ thực hiện exploit ở local. Trước tiên đây là file cho những ai quan tâm: Map  (Mình đã patch bỏ qua phần alarm để cho dễ debug) Như thường lệ mình đưa file vào IDA pro để đọc code ( Mình đã rename một vài hàm cũng như biến để cho tiện theo dõi ). __int64 sub_555555554B95() {   puts("---------- Menu ------------");   puts("0. Select Map.");   puts("1. Add Map.");   puts("2. Edit Map.");   puts("3. View Map.");   puts("4. Delete Map.");   puts("5. Exit.");   putchar('>');   return (unsigned int)read_int(); }

[Night St0rm CTF] - WRITE UP PWN

Image
Ban đầu cũng không có ý định viết write up bởi cũng rất lười viết :v . Nhưng nghe phong phanh được tin là có thưởng cho write up hay và thú vị :) thế là lại phải viết rồi :) Cũng mong BTC đọc được dòng này rồi trao giải cho mình :)) vì để viết được chỗ write up này mình phải ngồi download lại file cũng như ngồi debug lại để chụp ảnh rồi balabala :)) ( Nói chung là kể khổ :v ) * PWN 1 - 50 pts nc motacoin.nightst0rm.net 1337 FILE Bước đầu tiên khi mình làm pwn là luôn kéo file binary vào IDA để hex-rays đọc code c :)) Ở bài này thì mình có được đoạn code sau :)) Thoạt nhìn qua thì mình đã copy nguyên xâu "KhongGiongTrenServer" để send lên server vì thấy là hàm memcmp chứ cũng chẳng quan tâm xâu đấy ý nghĩa là gì :v Nhưng sau khi gửi lên thì thấy không thành công mới đọc kĩ lại @@ "KhongGiongTrenServer" bây giờ thì mới hiểu ý nghĩa của nó :v mình cũng nghĩ ngay ra cách khác để nhập vào bài này, tuy nhiên để cho mọi người hiểu rõ hơn mình sẽ phân t

Write Up PWN300-Zone CSAW CTF 2017

Image
Chào mừng quay lại với blog của tôi. ______________________________ Cũng rất lâu rồi không có bài viết nào. Đang cảm thấy mình lười đi rất nhiều.......... Hôm nay sẽ cố gắng viết lại một bài write up mà bản thân mình thấy tâm đắc trong giải vừa rồi và cũng mất rất nhiều thời gian để hoàn thành nó. Trở lại nội dung chính của bài viết, ở bài này chúng ta có 2 file: zone and libc-2.32.so Mở file bằng IDA ta có nội dung code như sau: Ban đầu đọc code tôi nhận thấy có một sự bế tắc, code khá là phức tạp và khó hiểu, các hàm giống y hệt nhau nhưng lại được tạo ở 2 địa chỉ khác nhau nên việc đọc code là rất vất vả. Không dừng lại ở đó, để đọc được hết code là điểu không thể? Nhận thấy điều đó tôi đã bỏ qua những phần nội dung có vẻ như không cần hiểu quá kỹ. Các đoạn code trước dòng 29 có thể nói là khác phức tạp nhưng nhận thấy mình không thể can thiệp vào trình sử lý đó nên tạm thời tôi bỏ qua. Và chỉ sử dụng break point để khảo sát xem chương trình đã làm gì ở giai đoạn

SHA2017 - Write up Pwn 200

Welcome to my blog. Today, I will write up for SHA2017 CTF. In here, I write for Pwn 200 This source file: FILE System is running Ubuntu 16.04, ASLR is disabled. nc megan35.stillhackinganyway.nl 3535 int __cdecl main(int a1) { const char *v1; // eax@1 int v2; // edx@1 char s; // [sp+0h] [bp-21Ch]@1 char dest; // [sp+100h] [bp-11Ch]@1 int v6; // [sp+200h] [bp-1Ch]@1 int *v7; // [sp+214h] [bp-8h]@1 v7 = &a1; v6 = *MK_FP(__GS__, 20); puts("Decrypt your text with the MEGAN-35 encryption."); fflush(stdout); fgets(&s, 0xFF, stdin); v1 = sub_804866B(&s, strlen(&s)); strcpy(&dest, v1); printf(&dest); v2 = *MK_FP(__GS__, 20) ^ v6; return 0; } In challenge input one megan-35 encode, program decode and print decoded text. We can leak in  printf(&dest);  by format string. First, I had source encode megan-35.py : import base64, sys megan35 = "3GHIJKLMNOPQRSTUb=cdefghijklmnopWXYZ/12+406789VaqrstuvwxyzABC

SHA2017 - Write up Crypto 200

Welcome to my blog. Today, I will write up for SHA2017 CTF. First, write for Crypto 200: The challenge give me source code: source If we want to get flag we must send to server signed of text start with ' ' ticket:admin|root|'  : if ticket.startswith('ticket:admin|root|'): self.request.sendall("Here you go!\n") self.request.sendall(flag + "\n") break else: self.request.sendall("Sorry that function is only available to admin user root\n") In the server provide 3 services: Welcome to the secure login server, make your choice from the following options: 1. Register yourself as a user. 2. Collect flag 3. Sign a message 4. Exit In the "Sign a message": We send to server one text in hex format, and server send to our sign of this text pading one more '\xff' in the beginning of text. We know  $a^d*b^d  =  (a*b)^d$ then i had a good idea: If we have some text start with '\xff' and multip

Meepwn-CTF-2017

Image
MeePwn-CTF MeePwn-CTF là kì đầu tiên tôi chơi CTF của MeePwn, đây là một team khá tên tuổi ở VN cũng như đấu trường quốc tế. Ở bài viết này tôi muốn gửi đến các bạn write up của những bài mà tôi làm được trong kì MeePwn-CTF vừa rồi, dù chỉ là vài bài ít ỏi nhưng với mức hiện tại của tôi thì đó cũng là một thành công nhỏ. 1 - Simpler than RSA? Bài này thì đề bài có cho mình một đoạn code python: simple.py Và một vài dữ kiện khác là public key và encrypted. pub_key encrypted Nhìn vào hàm encrypt có thể hiểu đơn giản là cipher được mã hóa theo cách sau: Có thể thấy c chỉ phụ thuộc vào m mà không phụ thuộc vào số được random r, mà m lại nằm trong khoản từ 0 đến 255 nên dễ dàng brute force để tìm được flag. solve.py 2 - MATH Ở bài này thì để bài cho rất ngắn gọn chỉ gồm một file code trong đó có chú thích kèm theo cipher: Bài này cơ bản hack được tính với công thức sau: Vì ord() kí tự của flag dự đoán được chỉ nằm trong khoảng từ 32 đế