Lesson Plan Title: Basic Authentication

Concept / Topic To Teach:

Basic Authentication is used to protect server side resources. The web server will send a 401 authentication request with the response for the requested resource. The client side browser will then prompt the user for a user name and password using a browser supplied dialog box. The browser will base64 encode the user name and password and send those credentials back to the web server. The web server will then validate the credentials and return the requested resource if the credentials are correct.

These credentials are automatically resent for each page protected with this mechanism without requiring the user to enter their credentials again.

General Goal(s):

For this lesson, your goal is to understand Basic Authentication and answer the questions below.

Figure 1 Lesson 13

To learn the name of the authentication header you must click “Submit” and intercept the request with WebScarab.

Figure 2 Intercepted request

The HTTP header that contains the Basic Authentication information is called "Authorization". This value Z3Vlc3Q6Z3Vlc3Q= is Base64 encoded. You can decode this by using WebScarab > Tools > Transcoder.

Figure 3 WebScarabs Transcoder

Click Base64 decode.

Figure 4 Decode value

These values must be used to complete the questions.

Figure 5 Answers

Figure 6 Part 1 completed

For this lesson it is very important that you understand how the JSESSIONID cookie is used for session management and how the basic authorization header is used for authentication.

When WebGoat is able to retrieve a valid session you are automatically redirected to the lesson you are working on. When there is no valid session, WebGoat will create a new JSESSIONID and you will see the first lesson, HTTP Basics.

When there is no session cookie, WebGoat will first verify if you already authenticated. If not, you will get a pop-up window from the browser that requests your user name and password (guest/guest). After the user credentials are validated, you will access the Start-page of WebGoat and WebGoat will create a new JSESSIONID for this session.

To access WebGoat as the user basic, you need to corrupt the existing JSESSIONID and the Authorization header. You can do this in WebScarab. Intercept the request and delete a character from the JSESSIONID value and the Authorization header.

WebGoat will require you to authenticate, so you now enter for the user name basic and for the password basic. This logs you on as the user basic.

Remember our JSESSIONID? This JSESSIONID is a non-persistent cookie which is set during our first visit. Every request from the browser to WebGoat will have this cookie value. Corrupting this value in the previous request will not change the cookie value stored in browser memory and that is the reason why the old JSESSIONID cookie is sent in every request.

Figure 7 Basic Authentication

You clearly see that the JSESSIONID is the same like in the previous request, but the Authorization header now contains the Base 64 encoded value of basic:basic (you can decode this value in WebScarab > Tools > Transcoder).

Figure 8 Logged on as user basic

Because of the valid JSESSIONID, WebGoat retrieves the authenticated user via the server-side session object using getSession().getUser(). To make WebGoat believe that you are authenticated as basic, you need to corrupt the JSESSIONID, as shown in the screenshot below.

Figure 9 Corrupt JSESSIONID

Figure 10 Start page for user basic

Now you are redirected to the WebGoat start page. The JSESSIONID is changed and you lost all your green stars because the basic user hasn’t completed any lesson. Go to the lesson "Basic Authentication" to complete this lesson.

Figure 11 Lesson 13 Completed

Solution by Erwin Geirnaert |