Platná adresa proxy neudělá ručně psanou zprávu SOCKS platnou. Odeslání struktury C nebo C++ může odeslat výplň nebo celá čísla v pořadí hostitele, která protokol nikdy nevyžadoval.

Pro požadavek SOCKS5 CONNECT s názvem domény serializujte tuto posloupnost explicitně po vyjednání metody a případné zvolené autentizaci:

  1. Verze, příkaz, rezervovaný bajt a typ adresy
  2. Délka domény a bajty domény
  3. Dvoubajtový cílový port v síťovém pořadí bajtů

Délky adres závisí na verzi SOCKS a typu adresy. Číselná pole pevné šířky potřebují své určené zobrazení; řetězce domén mají vlastní kódování délky. Ukončovací znak řetězce C není obecný pokyn přidat k síťové zprávě nulu.

Zkratka v implementaciProblém k prověření
Přiřazení 32bitové hodnoty přes 8bitový ukazatelNevypíše všechny čtyři bajty
Přetypování bufferu na ukazatel na větší celé čísloZarovnání a pořadí bajtů je stále třeba řešit
Předpoklad, že jedno čtení nebo zápis je jedna zprávaTCP může přenést jen část posloupnosti protokolu

Porovnejte každé pole se zamýšleným cílem a ošetřete částečný I/O. Přijetí dvou bajtů nedokazuje, že dorazila celá odpověď. Zkoumání těchto hranic může odlišit poškozený požadavek od serveru, který odmítá správně popsané spojení.

Související články