While filling in one of my friend’s surveys I thought it would be
funny for them to know it is me without anyone else knowing.
We were young and had Inspect Element
ed a few things together,
so it was a safe bet that an HTML joke would let them know.
So I typed in my name like so:
BOLD_STEVE.JPG
Now in theory this should have shown in in the leaderboard as: “<b>Bold Steve</b>” However, to my horror and excitement, I saw this in the leaderboard:
BOLD_STEVE_LEADERBOARD.JPG
The text “Bold Steve” showed up in bold on the leaderboard.
This told me all I needed to know. To add a <script>
tag was next.
So I went on my merry way thinking about ways to use malicious javascript.
Then, I thought that might be mean, so I decided to warn users instead.
I filled in the name with a script tag and a call to alert()
to warn the user about this site.
JAVASCRIPT_NAME.JPG
I ran out of room before I could finish it. Hmmm. What if I do “Inspect Element” and manually override the max-length attribute?
The unfortunate truth is: this worked as well!
Not only could I manually set the max-length by changing it in the HTML, but there were no client-side OR server-side checks to make sure the name I was sending was less than or equal to 20 characters.
If Javascript checked it, it would have stopped me (although maybe not a professional). If the server checked it, it could have stopped almost anyone.
As a side note, here is a great reason why you should do most of your validation on the server side. As a user, I can edit any of the HTML, CSS, or Javascript your server serves to me.
Imagine trying to fit in a script tag doing anything useful with 20 characters?
<script src="http:">
There’s your 20 characters! No more! Good luck trying to do anything useful with this!
The Quiz My Friends server has no such checks in place. Therefore, I can send an almost arbitrary load to them. Being able to send something potentially very large (more than a few megabytes) is a vulnerability of its own. Imagine being able to send entire executable progrmas as your “name” in one of these quizes?
Suppose we’re on a vulnerable site like Quiz Your Friends and you decide you want to hack your friend’s quiz! How can this be done?
Here is my quiz below:
CREATING_QUIZ.IMG
Just like the image above, about how I found out about this vulnerability: go ahead and use an HTML tag in your name to test this out.
BOLD_ITALIC_STEVE.JPG