Kelvollinen välityspalvelimen osoite ei tee käsin kirjoitetusta SOCKS-viestistä kelvollista. C- tai C++-rakenteen lähettäminen voi lähettää täytettä tai isäntäjärjestyksessä olevia kokonaislukuja, joita protokolla ei koskaan pyytänyt.

SOCKS5-verkkotunnuksen CONNECT-pyynnössä serialisoi tämä järjestys eksplisiittisesti menetelmäneuvottelun ja valitun todennuksen jälkeen:

  1. Versio, komento, varattu tavu ja osoitetyyppi
  2. Verkkotunnuksen pituus ja verkkotunnuksen tavut
  3. Kaksitavuinen kohdeportti verkon tavujärjestyksessä

Osoitteiden pituudet riippuvat SOCKS-versiosta ja osoitetyypistä. Kiinteäleveyksiset numerokentät tarvitsevat määritellyn esityksensä; verkkotunnusmerkkijonoilla on oma pituuskoodauksensa. C-merkkijonon lopetusmerkki ei ole yleinen ohje lisätä nolla siirtoviestiin.

Toteutuksen oikotieTarkistettava ongelma
32-bittisen arvon sijoittaminen 8-bittisen osoittimen kauttaSe ei tulosta kaikkia neljää tavua
Puskurin tyyppimuunnos suuremman kokonaisluvun osoittimeksiTasaus ja tavujärjestys on silti hoidettava
Olettaa, että yksi luku tai kirjoitus on yksi viestiTCP voi siirtää vain osan protokollan järjestyksestä

Vertaa jokaista kenttää aiottuun kohteeseen ja käsittele osittainen I/O. Kahden tavun vastaanottaminen ei todista, että koko vastaus saapui. Näiden rajojen tarkastelu voi erottaa viallisen pyynnön palvelimesta, joka hylkää oikein kuvatun yhteyden.

Aiheeseen liittyvät artikkelit