Bypassing Logins

by Vince
in Blog
Hits: 37796

I was playing around with Bootstrap CSS and I had an idea for creating a few different types of logins that all appeared the same but were different.  In the end, I created four different logins and I go into how to bypass them.  Or in the case of one of them, why you can't bypass it. 

In the first example, we have a PHP login form that has the credentials baked into the PHP. 

Viewing the UI, we see:



When we view the source on the server side, we see:


Note the credentials admin : chocolate are baked into the code.  On the client side, when we view source in the browser:


We only see the html. 

In this example, we can attempt to brute force with hydra:


Hydra successfully retrieves the password!

Moving on, the next example is similar to the first but this time -- instead of credentials baked into the page, we've stored them in a MySQL database. 

Looking at the UI, we see:


Viewing the source on the server side, we're taking input and directly inserting it into our query:


Because we're in the middle of the query, we can attempt to break it by inserting a semicolon:


When we hit login, we get an SQL error:


If you look back at our query, we see where password='$password' but we've now turned that into password=''' which is one too many semicolons which is why it breaks. 

We can bypass this login by entering a true statement.  Basically we're saying where username (or password) equals SOMETHING or 1=1.  And since 1 equals 1, a true statement, we can bypass the login.


In this example above, we can enter that into the username or password field and the result will be:


When we view this from the MySQL side, we can create that query with either the username or password and in each case, we get the same result:


Twisting this version, we see the following login page:


When we look at the source on the server side, we see:


mysql_real_escape_string -- escapes special characters.

The whole point is to prevent us from doing what we did in the previous SQL injection. 

Looking for ways to bypass mysql real escape string, I performed a bunch of searches and tested numerous methods that claim a successful bypass.  That said, In no case was I successful.  Either there are circumstances that are different with my particular coding method or this was something that worked back in the day but no longer works.  Point being, I was unable to bypass this login form.  Good to know!

In our final example, I used Javascript. 

When viewing the UI, we see the following:



The problem with Javascript is that it's client side and we're unable to hide the source from the viewer.  When we dig into the page source, we see:


Looking at the source on the server side, we see the credentials baked into the page:


We can obfuscate it.  I actually obfuscated the obfuscated code -- so double obfuscation:


In the end, we can see the password above and more importantly, we can't hide login.js from the user -- they can also see the password if the look hard enough:


In the source, I restrict the number of guesses before I lock the page but a refresh solves that issue and the password can be found without brute force so it's not a viable solution.