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

WinInet

Пожалуйста, обратите внимание, что пользователь заблокирован
Ragnar, trueslowmo спасибо за ответы, все получилось.

Еще хотел спросить по WinInet:
Каким образом можно отследить, что все куки получены? Есть код, все работает, куки получаются с помощью функции HttpQueryInfo. В мсдн написано, что переменная cnt (последний параметр вышеупомянутой функции) служит для счетчика одноименных заголовков, и когда их больше нет, возвращает ERROR_HTTP_HEADER_NOT_FOUND. Но такого не происходит, счетчик тупо доходит до 15 и все. Почему так? Возможно, я что-то не так понял в мсдн из-за языкового барьера.

Код:
.486                      
.model flat, stdcall      
option casemap :none      

include \masm32\include\windows.inc
include \masm32\macros\macros.asm
uselib kernel32, masm32, user32,wininet

.data
szData db 1024 dup(0)
host db "www.test.ru",0
postdata db "log=admin&pwd=666999&wp-submit=Log+In&redirect_to=http%3A%2F%2Ftest.ru%2Fwp-admin%2F&testcookie=1",0
headers db 13,10,"Keep-Alive: 115",
13,10,"Connection: keep-alive",
13,10,"Content-Type: application/x-www-form-urlencoded",0

.data?
hInternet dd ?
hConnect dd ?
hRequest dd ?
bSend dd ?
hFile dd ?
dwBytesRead dd ?
bRead dd ?
bwr dd ?

.code
main PROC
call cookies
invoke ExitProcess,0
main ENDP

cookies PROC
local cook[2048]:byte
local cookS:dword;
local cnt:dword
mov cnt,0

mov hInternet,FUNC(InternetOpen,chr$("WinInet Test"),INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0)
    .if    hInternet==NULL
        invoke MessageBox,0,chr$("InternetOpen error"),0,0
        exit
    .endif
    
invoke InternetConnect,hInternet,offset host,INTERNET_DEFAULT_HTTP_PORT,NULL,NULL,INTERNET_SERVICE_HTTP,0,0
mov hConnect,eax
    .if hConnect == NULL
        invoke MessageBox,0,chr$("InternetConnect error"),0,0
        exit
    .endif
        
mov hRequest,FUNC(HttpOpenRequest,hConnect,chr$("POST"),chr$("/wp-login.php"),NULL,chr$("www.cmsbru.te/wp-login.php"),0,INTERNET_FLAG_KEEP_CONNECTION,1)
    .if hRequest == NULL
        invoke MessageBox,0,chr$("HttpOpenRequest error"),0,0
        exit
    .endif        


invoke HttpSendRequest,hRequest,offset headers,sizeof headers-1,offset postdata,sizeof postdata-1
.if eax == 0
        invoke MessageBox,0,chr$("HttpSendRequest error"),0,0
        exit
.endif    

            
;читаю 1 раз, т.к. нужны хидеры + пример сугубо тестовый, меньше кода
invoke InternetReadFile,hRequest,offset szData,sizeof szData-1,offset dwBytesRead
    test eax,eax;if (bRead == FALSE)
    jz @exit
   .if dwBytesRead==0
        jmp @exit
    .endif
@@:
mov cookS,sizeof cook
invoke HttpQueryInfo,hRequest,HTTP_QUERY_SET_COOKIE,addr cook,addr cookS,addr cnt
invoke MessageBox,0,addr cook,0,0
invoke wsprintf,offset szData,chr$("%d"),cnt
invoke MessageBox,0,offset szData,0,0
cmp cnt,ERROR_HTTP_HEADER_NOT_FOUND
jnz @b
                                            
@exit:                        
invoke InternetCloseHandle,hRequest
invoke InternetCloseHandle,hConnect
invoke InternetCloseHandle,hInternet
ret
cookies ENDP
end main
 
Пожалуйста, обратите внимание, что пользователь заблокирован
Как быть, если у сайта невалидный сертификат? Можно ли как-то получить контент с него или нет?
Ошибка InternetOpenUrl - ERROR_INTERNET_INVALID_CA . Вроде поставил флаги игнора невалидных сертов, и все равно почему-то ошибка есть. С сайта с норм. сертом (в данном случае дамага) контент получает норм.
Код не особо качественный, нет проверок, буфер фиксированный и так далее, но это тестовый вариант, так что не суть важно.

Код:
.386
.model flat, stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\macros\macros.asm
uselib kernel32,masm32,user32,wininet


.data
badsite db "https://eof-project.net/rk/index.php",0
goodsite db "https://xss.pro/index.php?topic=19346#34;,0
lpBuf db 1024 dup (0)

.data?
hUrl dd ?
hInternet dd ?
bwr dd ?

.code
start:
invoke InternetOpen,chr$("Mozilla 5/0"),INTERNET_OPEN_TYPE_PRECONFIG,0,0,0
	test eax,eax
  je @ex
	mov hInternet,eax
invoke InternetOpenUrl,hInternet,offset badsite,0,0,INTERNET_FLAG_IGNORE_CERT_CN_INVALID or SECURITY_FLAG_IGNORE_UNKNOWN_CA or INTERNET_FLAG_IGNORE_CERT_DATE_INVALID,0
	test eax,eax
  je @ex
	mov hUrl,eax
invoke InternetReadFile,hUrl,offset lpBuf,1024,offset bwr
invoke InternetCloseHandle,hInternet
invoke InternetCloseHandle,hUrl
invoke write_disk_file,chr$("file.htm"),addr lpBuf,bwr

@ex:
exit
end start
 
Необходимо выставить для реквеста необходимые флаги, либо сразу, либо когда HttpSendRequest вернет ошибку:

Код:
// request получен вызовом HttpOpenRequest
DWORD flags;
DWORD buffLen = sizeof(flags);

InternetQueryOption(request, INTERNET_OPTION_SECURITY_FLAGS, (PVOID)&flags, &buffLen);
flags |= SECURITY_FLAG_IGNORE_UNKNOWN_CA;

InternetSetOption(request, INTERNET_OPTION_SECURITY_FLAGS, &flags, sizeof(flags));

Это для самоподписанных сертификатов и неимеющих в цепочке валидных CA. Для проссроченных и тому подобное нужно ешё

- SECURITY_FLAG_IGNORE_CERT_DATE_INVALID
- SECURITY_FLAG_IGNORE_CERT_CN_INVALID

более подробно
- http://support.microsoft.com/kb/182888
- http://msdn.microsoft.com/en-us/library/wi...8(v=vs.85).aspx
 


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