Μια έγκυρη διεύθυνση διακομιστή μεσολάβησης δεν κάνει έγκυρο ένα χειρόγραφο μήνυμα SOCKS. Η αποστολή μιας δομής C ή C++ μπορεί να στείλει γέμισμα ή ακέραιους σε σειρά κεντρικού υπολογιστή που το πρωτόκολλο δεν ζήτησε ποτέ.

Για ένα αίτημα SOCKS5 CONNECT με όνομα τομέα, σειριοποιήστε αυτή την ακολουθία ρητά μετά τη διαπραγμάτευση μεθόδου και οποιαδήποτε επιλεγμένη ταυτοποίηση:

  1. Έκδοση, εντολή, δεσμευμένο byte και τύπος διεύθυνσης
  2. Μήκος τομέα και byte τομέα
  3. Η θύρα προορισμού δύο byte σε σειρά byte δικτύου

Τα μήκη διευθύνσεων εξαρτώνται από την έκδοση SOCKS και τον τύπο διεύθυνσης. Τα αριθμητικά πεδία σταθερού πλάτους χρειάζονται την καθορισμένη αναπαράστασή τους· οι συμβολοσειρές τομέα έχουν τη δική τους κωδικοποίηση μήκους. Ένας τερματιστής συμβολοσειράς C δεν είναι γενική οδηγία να προστεθεί μηδέν στο μήνυμα δικτύου.

Συντόμευση υλοποίησηςΠρόβλημα προς έλεγχο
Εκχώρηση τιμής 32 bit μέσω δείκτη 8 bitΔεν εξάγει και τα τέσσερα byte
Μετατροπή buffer σε δείκτη μεγαλύτερου ακεραίουΗ στοίχιση και η σειρά byte πρέπει ακόμη να αντιμετωπιστούν
Υπόθεση ότι μία ανάγνωση ή εγγραφή είναι ένα μήνυμαΤο TCP μπορεί να μεταφέρει μόνο μέρος της ακολουθίας του πρωτοκόλλου

Συγκρίνετε κάθε πεδίο με τον επιδιωκόμενο προορισμό και χειριστείτε μερικό I/O. Η λήψη δύο byte δεν αποδεικνύει ότι έφτασε ολόκληρη η απάντηση. Η εξέταση αυτών των ορίων μπορεί να διακρίνει ένα παραμορφωμένο αίτημα από έναν διακομιστή που αρνείται μια σωστά περιγραφόμενη σύνδεση.

Σχετικά άρθρα