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

HTTP WinInet

Jeffs

(L1) cache
Забанен
Регистрация
28.12.2018
Сообщения
611
Реакции
358
Пожалуйста, обратите внимание, что пользователь заблокирован
В общем-то, написал простенький код для отправки http/https запросов:
C:
HTTP::Resp* HTTP::SendReq(LPWSTR type, LPWSTR domain, DWORD port, LPWSTR path, Buffer* data)
{
    BOOL bSuccess = TRUE;
    HINTERNET hInternet = nullptr, hConnect = nullptr, hRequest = nullptr;
    DWORD timeOut = HTTP_TIMEOUT_SEC * 10000;
    Resp* resp = nullptr;
    DWORD flag = INTERNET_FLAG_KEEP_CONNECTION | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_PRAGMA_NOCACHE;
    if (port == INTERNET_DEFAULT_HTTPS_PORT)
        flag |= INTERNET_FLAG_SECURE | INTERNET_FLAG_IGNORE_CERT_CN_INVALID | INTERNET_FLAG_IGNORE_CERT_DATE_INVALID |
        INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS;

    do
    {
        hInternet = InternetOpenW(HTTP_USERAGENT, INTERNET_OPEN_TYPE_PRECONFIG, nullptr, nullptr, 0);
        if (!(bSuccess = (hInternet != nullptr))) break;

        InternetSetOptionW(hInternet, INTERNET_OPTION_SEND_TIMEOUT, &timeOut, sizeof(timeOut));
        InternetSetOptionW(hInternet, INTERNET_OPTION_RECEIVE_TIMEOUT, &timeOut, sizeof(timeOut));
        InternetSetOptionW(hInternet, INTERNET_OPTION_CONNECT_TIMEOUT, &timeOut, sizeof(timeOut));

        hConnect = InternetConnectW(hInternet, domain, port, nullptr, nullptr, INTERNET_SERVICE_HTTP, 0, 0);
        if (!(bSuccess = (hConnect != nullptr))) break;

        hRequest = HttpOpenRequestW(hConnect, type, path, nullptr, nullptr, 0, flag, 0);
        if (!(bSuccess = (hRequest != nullptr))) break;

        if (!(bSuccess = HttpSendRequestW(hRequest, nullptr, 0, (LPVOID)data->data, data->size))) break;

        resp = (Resp*)Mem::Alloc(sizeof(Resp));
        if (!(bSuccess = (resp != nullptr))) break;

        resp->data = (BYTE*)Mem::Alloc(1);
        if (!(bSuccess = (resp->data != nullptr))) break;

        resp->code = GetStatusCode(hRequest);
        resp->size = 0;

        BYTE tempBuff[2048] = { 0 };
        DWORD dwRead;
        while (InternetReadFile(hRequest, tempBuff, 2048, &dwRead) && dwRead)
        {
            resp->data = (BYTE*)Mem::Realloc(resp->data, resp->size + dwRead);
            Mem::Copy(resp->data + resp->size, tempBuff, dwRead);
            resp->size += dwRead;
        }
    } while (FALSE);

    if (hInternet) InternetCloseHandle(hInternet);
    if (hConnect) InternetCloseHandle(hConnect);
    if (hRequest) InternetCloseHandle(hRequest);
    if (!bSuccess)
    {
        if (resp->data) Mem::Free(resp->data);
        Mem::Free(resp);
        return nullptr;
    }

    return resp;
}
Судя по доке - чтобы отправить https запрос достаточно добавить флаг INTERNET_FLAG_SECURE в HttpOpenRequestW, но даже если добавить этот флаг - запрос шлётся по http. В чём может быть проблема?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Офтоп, но я бы тебе посоветовал, раз уж ты используешь плюсы, а не сишечку, не использовать эту ужастную do-while-0 конструкцию, а взять реализацию defer для плюсов, которую я использовал в статье про анализ хуков.

По сабжу, особо проблем в самой функции я так с ходу не вижу, покажи, как ты ее вызываешь. И уверен, что сервер сам не редиректит на хттп?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Офтоп, но я бы тебе посоветовал, раз уж ты используешь плюсы, а не сишечку, не использовать эту ужастную do-while-0 конструкцию, а взять реализацию defer для плюсов, которую я использовал в статье про анализ хуков.

По сабжу, особо проблем в самой функции я так с ходу не вижу, покажи, как ты ее вызываешь. И уверен, что сервер сам не редиректит на хттп?
На домене висит Cloudflare с редиректом всех http запросов на https. При отключении редиректа особо ничего не меняется. При вызове указываю порт 443.
Да, согласен, костыли do-while не очень смотрится. Привык просто.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Попробуй подобавлять/поубирать флаги INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS и INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Попробуй подобавлять/поубирать флаги INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS и INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP.
Попробую чуть позже. Отпишусь по результатам.
 
А как ты откроешь сайт с клаудом, там же обязательная js защита от ддос.
Можно просто распарсить и решить.
Тут обсуждалось: http://xssforum7mmh3n56inuf2h73hvhnzobi7h2ytb3gvklrfqm7ut3xdnyd.onion/threads/33563/
 
Пожалуйста, обратите внимание, что пользователь заблокирован
У тебя на сайте включена капча или Bot fight/Im under attack mode

без жса вполне заходит на сайт под клаудфлейром
Как раз таки - нет. Переключил в настройках firewall на "Essential Off".
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Тестанул с вм 7, 10 - стучит по https отлично. С моей же рабочей вирты - ни в какую не хочет. Хз, может быть дело в whoenix.
 
А какая рабочая вирта? На некоторых Windows нет обновлений, где включили принудительно TSL 1.1+ для WinHTTP, а многие https-сайты работают только при наличии этого протокола.
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А какая рабочая вирта? На некоторых Windows нет обновлений, где включили принудительно TSL 1.1+ для WinHTTP, а многие https-сайты работают только при наличии этого протокола.
На рабочей вирте Вин 10 1607 ltsc, без обновлений.
Не знал. Выключу тогда http to https redirect в клауде.
 


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