Una adreça de proxy vàlida no fa vàlid un missatge SOCKS escrit a mà. Enviar una struct de C o C++ pot enviar farciment o enters en ordre d'amfitrió que el protocol mai no ha demanat.

Per a una petició SOCKS5 CONNECT amb nom de domini, serialitzeu aquesta seqüència explícitament després de la negociació del mètode i de qualsevol autenticació seleccionada:

  1. Versió, ordre, byte reservat i tipus d'adreça
  2. Longitud del domini i bytes del domini
  3. El port de destinació de dos bytes en ordre de bytes de xarxa

Les longituds d'adreça depenen de la versió de SOCKS i del tipus d'adreça. Els camps numèrics d'amplada fixa necessiten la seva representació especificada; les cadenes de domini tenen la seva pròpia codificació de longitud. Un terminador de cadena de C no és una instrucció general per afegir un zero al missatge de xarxa.

Drecera d'implementacióProblema a comprovar
Assignar un valor de 32 bits mitjançant un punter de 8 bitsNo emet els quatre bytes
Convertir un buffer en un punter a un enter més granL'alineació i l'ordre dels bytes encara s'han de gestionar
Suposar que una lectura o escriptura és un sol missatgeTCP només pot transferir una part de la seqüència del protocol

Compareu cada camp amb la destinació prevista i gestioneu l'E/S parcial. Rebre dos bytes no estableix que hagi arribat tota la resposta. Inspeccionar aquests límits pot distingir una petició mal formada d'un servidor que rebutja una connexió descrita correctament.

Articles relacionats