Ξεκινώντας θα πω ότι η κάθε σελίδα διαφέρει από την άλλη… που σημαίνει ότι
μπορεί να μην δουλέψει κάτι από αυτά που θα γράψω εδώ… αλλά αυτό δεν σημαίνει ότι
δεν είναι ευάλωτη σε xss
Επιπλέον μπορεί να καταφέρεται να κάνετε xss σε firefox και να δοκιμάσετε την ίδια
τεχνική σε chrome χωρίς να δουλέψει… αυτό γίνετε γιατί έχουν και οι browsers κάποιες
άμυνες για το xss
Ας ξεκινήσουμε από τα βασικά…
1)
Συχνά κάποια σελίδα διαγράφει την λέξη <script> από τα πεδία που ελέγχει ο χρήστης…
δηλαδή αν δώσουμε <script>alert("xss")</script>
το <script> θα διαγραφτεί…
Παρόλα αυτά μου έχει τύχει περίπτωση που περνάει αυτό: <sCriPt>
Πιθανότατα δεν έκανε όλα τα γράμματα μικρά πριν ελέγξει τα δεδομένα που εισάγομε στην σελίδα…
Επόμενος αν γράψουμε <scRIPt>alert("xss")</script>
θα λειτουργήσει κανονικά!
2)
Ίδια με τα παραπάνω… μόνο που τώρα ελέγχει και τα κεφαλαία γράμματα
Επόμενος αν γράψουμε <script>alert("xss")</script>
θα διαγραφτεί το <script>
και θα γράψει alert("xss")</script>
Αυτό μπορούμε να το εκμεταλλευτούμε… και να γράψουμε
<scr<script>ipt>alert("xss")</script>
Όταν ο browser διαγράψει το <script> θα ενωθούν τα <scr και ipt> φτιάχνοντας
το <script>. Με αυτόν τον τρόπο θα ήταν σαν να βάζαμε:
<script>alert("xss")</script>
3)null bite
<sc%00ript>
το %00 είναι ένα null byte το όποιο μπορεί να περάσει μερικά filters
αλλά στην ουσία δεν γράφει τίποτα με αποτέλεσμα το <script> να γράφετε κανονικά στην σελίδα
4)Encryption:
Μπορείτε να κωδικοποιήσετε τα script σε διάφορες μορφές ώστε να παρακάμψετε πολλά filters
Για παράδειγμα μπορεί κάποια σελίδα να μην σας αφήνει να γράψετε το < και το > ή τα “
Μπορείτε να τα κωδικοποιήσετε σε διάφορες μορφές… για παράδειγμα url encoding
%3Cscript%3Ealert(%22xss%22)%3C%2Fscript%3E
το παραπάνω είναι το <script>alert("xss")</script>
κωδικοποιημένο σε url…
τα < > κλπ αλλάξαν… Για παράδειγμα το < έγινε %3C
Πέρα από το url encoding μπορείτε να δοκιμάσετε και unicode encoding για παράδειγμα
%u003C
το όποιο μπορεί να γραφτεί και με διάφορους τρόπους: %u03C %u0003C
Επιπλέον είναι και τα html chars που πρέπει να γνωρίζεται και το base64… Υπάρχουν
και άλλα όπως base16 αλλά τα παραπάνω είναι τα σημαντικότερα… χωρίς αυτό να σημαίνει ότι
δεν πρέπει να δείτε και τα υπόλοιπά… τρύπες ψάχνουμε… πρέπει να ξέρουμε τις λεπτομέρειες
για να τις βρούμε… Μπορείτε να κάνετε και διπλό url encoding
5)
Υποθέτουμε ότι δεν μπορούμε να βάλουμε το <script> στον κώδικα της σελίδας με κανέναν από του
τρόπους που γνωρίζουμε… μπορούμε να κάνουμε κάτι άλλο…
<img src="invalidimg.img" onerror="alert('xss')" />
θα προσπαθήσει να βάλει μια
εικόνα στην σελίδα… δεν θα την βρει θα πάει στο onerror και θα εκτελέσει το scriptaki μας…
6)Bypassing ” filtering.
Αν έχετε όλα τα παραπάνω αλλά δεν μπορείτε να βάλετε ” τότε σας προτείνω να
χρησιμοποιήσετε την συνάρτηση String.fromCharCode
Για παράδειγμα: <script>alert(String.fromCharCode(65,66,67))</script>
Είναι σαν να γράψαμε: <script>alert("ABC")</script>