Added Assignment for Security Questions.
This commit is contained in:
parent
37b5abea80
commit
0588daff9d
@ -1,52 +0,0 @@
|
||||
package org.owasp.webgoat.plugin;
|
||||
|
||||
import org.owasp.webgoat.assignments.AssignmentEndpoint;
|
||||
import org.owasp.webgoat.assignments.AssignmentHints;
|
||||
import org.owasp.webgoat.assignments.AssignmentPath;
|
||||
import org.owasp.webgoat.assignments.AttackResult;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Assignment for picking a good security question.
|
||||
* @author Tobias Melzer
|
||||
* @since 11.12.18
|
||||
*/
|
||||
@AssignmentPath("/PasswordReset/SecurityQuestions")
|
||||
public class SecurityQuestionAssignemnt extends AssignmentEndpoint {
|
||||
|
||||
private static Map<String, String> questions;
|
||||
|
||||
static {
|
||||
questions = new HashMap<>();
|
||||
questions.put("What is your favorite animal?", "Bad: Can easily be guessed and can most likely be figured out through social media.");
|
||||
questions.put("In what year was your mother born?", "Bad: Can be easily guessed.");
|
||||
questions.put("What was the time you were born?", "Good: If you know the time you were born it is really good, because " +
|
||||
"it is hard to figure out through social media and the answer is not subject to change.");
|
||||
questions.put("What is the name of the person you first kissed?", "Fair: it is not a bad question, but friends and family may know and someone might figure it out through social media.");
|
||||
questions.put("What was the house number and street name you lived in as a child?", "Good: hard to guess and even close friends might not know the answer.");
|
||||
questions.put("In what town or city was your first full time job?", "Fair / Good: Might be easy to figure out if someone is on LinkedIn or posts a lot on social media");
|
||||
questions.put("In what city were you born?", "Fair: Might be hard to figure out for a person who does not know you, but not for a person that knows, did know you.");
|
||||
questions.put("What was the last name of your favorite teacher in grade three?", "Good/Fair: Most people would probably not know the answer to that, but if someone does its quite a good question.");
|
||||
questions.put("What is the name of a college/job you applied to but didn't attend?", "Good: Most people will probably no an answer to that and it is really hard to figure out, even for people close to you.");
|
||||
questions.put("What are the last 5 digits of your drivers license?", "Bad: Is subject to change, and the last digit of your driver license might follow a specific pattern. (For example your birthday.)");
|
||||
questions.put("What was your childhood nickname?", "Fair: if someone had a nickname they probably remember it, but not all people had one.");
|
||||
questions.put("Who was your childhood hero?", "Fair: If your childhood hero, was someone not obvious it can be quite good, but not everyone really had one and can remember it easily.");
|
||||
questions.put("On which wrist do you were your watch?", "Awful: Easy to guess.");
|
||||
questions.put("What is your favorite color?", "Bad: Can easily be guessed.");
|
||||
}
|
||||
@RequestMapping(method = RequestMethod.POST)
|
||||
public
|
||||
@ResponseBody
|
||||
AttackResult completed(@RequestParam String question) {
|
||||
String answer = questions.get(question);
|
||||
if(answer.startsWith("Good"))
|
||||
return success().output(answer).build();
|
||||
return failed().output(answer).build();
|
||||
}
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package org.owasp.webgoat.plugin;
|
||||
|
||||
import org.owasp.webgoat.assignments.AssignmentEndpoint;
|
||||
import org.owasp.webgoat.assignments.AssignmentPath;
|
||||
import org.owasp.webgoat.assignments.AttackResult;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMethod;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Assignment for picking a good security question.
|
||||
* @author Tobias Melzer
|
||||
* @since 11.12.18
|
||||
*/
|
||||
@AssignmentPath("/PasswordReset/SecurityQuestions")
|
||||
public class SecurityQuestionAssignment extends AssignmentEndpoint {
|
||||
|
||||
private static int triedQuestions = 0;
|
||||
|
||||
private static Map<String, String> questions;
|
||||
|
||||
static {
|
||||
questions = new HashMap<>();
|
||||
questions.put("What is your favorite animal?", "The answer can easily be guessed and figured out through social media.");
|
||||
questions.put("In what year was your mother born?", "Can be easily guessed.");
|
||||
questions.put("What was the time you were born?", "This may first seem like a good question, but you most likely dont know the exact time, so it might be hard to remember.");
|
||||
questions.put("What is the name of the person you first kissed?", "Can be figured out through social media, or even guessed by trying the most common names.");
|
||||
questions.put("What was the house number and street name you lived in as a child?", "Answer can be figured out through social media, or worse it might be your current address.");
|
||||
questions.put("In what town or city was your first full time job?", "In times of LinkedIn and Facebook, the answer can be figured out quite easily.");
|
||||
questions.put("In what city were you born?", "Easy to figure out through social media.");
|
||||
questions.put("What was the last name of your favorite teacher in grade three?", "Most people would probably not know the answer to that.");
|
||||
questions.put("What is the name of a college/job you applied to but didn't attend?", "It might not be easy to remember and an hacker could just try some company's/colleges in your area.");
|
||||
questions.put("What are the last 5 digits of your drivers license?", "Is subject to change, and the last digit of your driver license might follow a specific pattern. (For example your birthday).");
|
||||
questions.put("What was your childhood nickname?", "Not all people had a nickname.");
|
||||
questions.put("Who was your childhood hero?", "Most Heroes we had as a child where quite obvious ones, like Superman for example.");
|
||||
questions.put("On which wrist do you were your watch?", "There are only to possible real answers, so really easy to guess.");
|
||||
questions.put("What is your favorite color?", "Can easily be guessed.");
|
||||
}
|
||||
@RequestMapping(method = RequestMethod.POST)
|
||||
public
|
||||
@ResponseBody
|
||||
AttackResult completed(@RequestParam String question) {
|
||||
triedQuestions+=1;
|
||||
String answer = questions.get(question);
|
||||
answer = "<b>" + answer + "</b>";
|
||||
if(triedQuestions > 1)
|
||||
return trackProgress(success().output(answer).build());
|
||||
return failed().output(answer).build();
|
||||
}
|
||||
}
|
@ -139,6 +139,37 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="lesson-page-wrapper">
|
||||
<div class="adoc-content" th:replace="doc:PasswordReset_SecurityQuestions.adoc"></div>
|
||||
<div class="attack-container">
|
||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||
<form class="attack-form" accept-charset="UNKNOWN"
|
||||
method="POST" name="form"
|
||||
action="/WebGoat/PasswordReset/SecurityQuestions"
|
||||
enctype="application/json;charset=UTF-8">
|
||||
<select name="question">
|
||||
<option>What is your favorite animal?</option>
|
||||
<option>In what year was your mother born?</option>
|
||||
<option>What was the time you were born?</option>
|
||||
<option>What is the name of the person you first kissed?</option>
|
||||
<option>What was the house number and street name you lived in as a child?</option>
|
||||
<option>In what town or city was your first full time job?</option>
|
||||
<option>In what city were you born?</option>
|
||||
<option>On which wrist do you were your watch?</option>
|
||||
<option>What was the last name of your favorite teacher in grade three?</option>
|
||||
<option>What is the name of a college/job you applied to but didn't attend?</option>
|
||||
<option>What are the last 5 digits of your drivers license?</option>
|
||||
<option>What was your childhood nickname?</option>
|
||||
<option>Who was your childhood hero?</option>
|
||||
<option>What is your favorite color?</option>
|
||||
</select>
|
||||
<input name="Check Question" value="check" type="SUBMIT"/>
|
||||
</form>
|
||||
<br/>
|
||||
<div class="attack-output"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="lesson-page-wrapper">
|
||||
<div class="adoc-content" th:replace="doc:PasswordReset_host_header.adoc"></div>
|
||||
<div class="attack-container">
|
||||
@ -235,36 +266,4 @@
|
||||
<div class="lesson-page-wrapper">
|
||||
<div class="adoc-content" th:replace="doc:PasswordReset_mitigation.adoc"></div>
|
||||
</div>
|
||||
|
||||
<div class="lesson-page-wrapper">
|
||||
<div class="adoc-content" th:replace="doc:PasswordReset_SecurityQuestions.adoc"></div>
|
||||
<div class="attack-container">
|
||||
<div class="assignment-success"><i class="fa fa-2 fa-check hidden" aria-hidden="true"></i></div>
|
||||
<form class="attack-form" accept-charset="UNKNOWN"
|
||||
method="POST" name="form"
|
||||
action="/WebGoat/PasswordReset/SecurityQuestions"
|
||||
enctype="application/json;charset=UTF-8">
|
||||
<select name="question">
|
||||
<option>What is your favorite animal?</option>
|
||||
<option>In what year was your mother born?</option>
|
||||
<option>What was the time you were born?</option>
|
||||
<option>What is the name of the person you first kissed?</option>
|
||||
<option>What was the house number and street name you lived in as a child?</option>
|
||||
<option>In what town or city was your first full time job?</option>
|
||||
<option>In what city were you born?</option>
|
||||
<option>On which wrist do you were your watch?</option>
|
||||
<option>What was the last name of your favorite teacher in grade three?</option>
|
||||
<option>What is the name of a college/job you applied to but didn't attend?</option>
|
||||
<option>What are the last 5 digits of your drivers license?</option>
|
||||
<option>What was your childhood nickname?</option>
|
||||
<option>Who was your childhood hero?</option>
|
||||
<option>What is your favorite color?</option>
|
||||
</select>
|
||||
<input name="Check Question" value="check" type="SUBMIT"/>
|
||||
</form>
|
||||
<br/>
|
||||
<div class="attack-feedback"></div>
|
||||
<div class="attack-output"></div>
|
||||
</div>
|
||||
</div>
|
||||
</html>
|
@ -1,17 +1,16 @@
|
||||
== Choosing a Security Question
|
||||
== The Problem with Security Questions
|
||||
|
||||
We have already talked about Security questions a bit. A good security question should meet the following criteria:
|
||||
While Security Questions my at first seem like a good way for authentication of a user, they
|
||||
have some big problems.
|
||||
|
||||
- Safe: The answer should not be easy to research or guess.
|
||||
- Stable: The answer should be stable, meaning that it is not subject to change.
|
||||
- Memorable: The answer should be easy to remember.
|
||||
- Simple: The question should be: precise, easy and consistent.
|
||||
- Many: The question should have many possible answers.
|
||||
The "perfect" Security Question should be hard to crack, but easy to remember. Also the answer needs to fixed,
|
||||
so the answer must not be subject to change.
|
||||
|
||||
== Try It! Choosing a good security question.
|
||||
There are only a handful of questions which satisfy these criteria and practically none which apply to anybody.
|
||||
|
||||
In this assignment your goal is to good security question from the dropdown list below.
|
||||
The Assignment is complete when you picked a security question which is considered good.
|
||||
If you have to pick a security question, we recommend not answering them truthfully.
|
||||
|
||||
Note: Some may say that one question is better than another, so this list is a bit subjective.
|
||||
But you should not be having any problem differencing between the good and bad.
|
||||
To further elaborate on the matter, there is a small assignment for you: There is a list of some common security questions.
|
||||
if you choose one, it will show to you why the question you picked is not really as good as one may think.
|
||||
|
||||
When you have looked at two questions the assignment will be marked as complete.
|
Loading…
x
Reference in New Issue
Block a user