Derīga starpniekservera adrese nepadara ar roku rakstītu SOCKS ziņojumu derīgu. Sūtot C vai C++ struktūru, var nosūtīt polsterējumu vai veselus skaitļus saimniekdatora secībā, ko protokols nekad nav pieprasījis.

SOCKS5 CONNECT pieprasījumam ar domēna nosaukumu serializējiet šo secību tieši pēc metodes sarunām un jebkuras izvēlētās autentifikācijas:

  1. Versija, komanda, rezervētais baits un adreses tips
  2. Domēna garums un domēna baiti
  3. Divu baitu galamērķa ports tīkla baitu secībā

Adrešu garumi ir atkarīgi no SOCKS versijas un adreses tipa. Fiksēta platuma skaitliskiem laukiem nepieciešams to noteiktais attēlojums; domēnu virknēm ir savs garuma kodējums. C virknes terminators nav vispārīgs norādījums pievienot nulli tīkla ziņojumam.

Īstenošanas saīsnePārbaudāmā problēma
32 bitu vērtības piešķiršana caur 8 bitu rādītājuTas neizvada visus četrus baitus
Bufera pārveide par lielāka vesela skaitļa rādītājuIzlīdzināšana un baitu secība joprojām jāapstrādā
Pieņemt, ka viena lasīšana vai rakstīšana ir viens ziņojumsTCP var pārsūtīt tikai daļu protokola secības

Salīdziniet katru lauku ar paredzēto galamērķi un apstrādājiet daļēju I/O. Divu baitu saņemšana nepierāda, ka ir pienākusi visa atbilde. Šo robežu pārbaude var atšķirt bojātu pieprasījumu no servera, kas noraida pareizi aprakstītu savienojumu.

Saistītie raksti