Skip to content

Commit 74f4cbc

Browse files
authored
Merge pull request #1961 from OWASP/cached_answers
start of putting all challenges to cached answers
2 parents 90c3c52 + e82fe9f commit 74f4cbc

File tree

18 files changed

+67
-175
lines changed

18 files changed

+67
-175
lines changed
Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,21 @@
11
package org.owasp.wrongsecrets.challenges.docker;
22

33
import lombok.extern.slf4j.Slf4j;
4-
import org.owasp.wrongsecrets.challenges.Challenge;
5-
import org.owasp.wrongsecrets.challenges.Spoiler;
4+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
65
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.BinaryExecutionHelper;
76
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.MuslDetectorImpl;
87
import org.springframework.stereotype.Component;
98

109
/** This challenge is about finding a secret hardcoded in a C binary. */
1110
@Slf4j
1211
@Component
13-
public class Challenge19 implements Challenge {
12+
public class Challenge19 extends FixedAnswerChallenge {
1413

15-
private final BinaryExecutionHelper binaryExecutionHelper;
16-
17-
public Challenge19() {
18-
this.binaryExecutionHelper = new BinaryExecutionHelper(19, new MuslDetectorImpl());
19-
}
20-
21-
/** {@inheritDoc} */
2214
@Override
23-
public Spoiler spoiler() {
24-
return new Spoiler(binaryExecutionHelper.executeCommand("", "wrongsecrets-c"));
25-
}
15+
public String getAnswer() {
2616

27-
/** {@inheritDoc} */
28-
@Override
29-
public boolean answerCorrect(String answer) {
30-
return binaryExecutionHelper
31-
.executeCommand(answer, "wrongsecrets-c")
32-
.equals("This is correct! Congrats!");
17+
BinaryExecutionHelper binaryExecutionHelper =
18+
new BinaryExecutionHelper(19, new MuslDetectorImpl());
19+
return binaryExecutionHelper.executeCommand("", "wrongsecrets-c");
3320
}
3421
}
Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,20 @@
11
package org.owasp.wrongsecrets.challenges.docker;
22

33
import lombok.extern.slf4j.Slf4j;
4-
import org.owasp.wrongsecrets.challenges.Challenge;
5-
import org.owasp.wrongsecrets.challenges.Spoiler;
4+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
65
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.BinaryExecutionHelper;
76
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.MuslDetectorImpl;
87
import org.springframework.stereotype.Component;
98

109
/** This challenge is about finding a secret hardcoded in a C++ binary. */
1110
@Slf4j
1211
@Component
13-
public class Challenge20 implements Challenge {
12+
public class Challenge20 extends FixedAnswerChallenge {
1413

15-
private final BinaryExecutionHelper binaryExecutionHelper;
16-
17-
public Challenge20() {
18-
this.binaryExecutionHelper = new BinaryExecutionHelper(20, new MuslDetectorImpl());
19-
}
20-
21-
/** {@inheritDoc} */
22-
@Override
23-
public Spoiler spoiler() {
24-
return new Spoiler(binaryExecutionHelper.executeCommand("", "wrongsecrets-cplus"));
25-
}
26-
27-
/** {@inheritDoc} */
2814
@Override
29-
public boolean answerCorrect(String answer) {
30-
return binaryExecutionHelper
31-
.executeCommand(answer, "wrongsecrets-cplus")
32-
.equals("This is correct! Congrats!");
15+
public String getAnswer() {
16+
BinaryExecutionHelper binaryExecutionHelper =
17+
new BinaryExecutionHelper(20, new MuslDetectorImpl());
18+
return binaryExecutionHelper.executeCommand("", "wrongsecrets-cplus");
3319
}
3420
}
Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,20 @@
11
package org.owasp.wrongsecrets.challenges.docker;
22

33
import lombok.extern.slf4j.Slf4j;
4-
import org.owasp.wrongsecrets.challenges.Challenge;
5-
import org.owasp.wrongsecrets.challenges.Spoiler;
4+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
65
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.BinaryExecutionHelper;
76
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.MuslDetectorImpl;
87
import org.springframework.stereotype.Component;
98

109
/** This challenge is about finding a secret hardcoded in a Golang binary. */
1110
@Slf4j
1211
@Component
13-
public class Challenge21 implements Challenge {
12+
public class Challenge21 extends FixedAnswerChallenge {
1413

15-
private final BinaryExecutionHelper binaryExecutionHelper;
16-
17-
public Challenge21() {
18-
this.binaryExecutionHelper = new BinaryExecutionHelper(21, new MuslDetectorImpl());
19-
}
20-
21-
/** {@inheritDoc} */
22-
@Override
23-
public Spoiler spoiler() {
24-
return new Spoiler(binaryExecutionHelper.executeGoCommand(""));
25-
}
26-
27-
/** {@inheritDoc} */
2814
@Override
29-
public boolean answerCorrect(String answer) {
30-
return binaryExecutionHelper.executeGoCommand(answer).equals("This is correct! Congrats!");
15+
public String getAnswer() {
16+
BinaryExecutionHelper binaryExecutionHelper =
17+
new BinaryExecutionHelper(21, new MuslDetectorImpl());
18+
return binaryExecutionHelper.executeGoCommand("");
3119
}
3220
}
Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,20 @@
11
package org.owasp.wrongsecrets.challenges.docker;
22

33
import lombok.extern.slf4j.Slf4j;
4-
import org.owasp.wrongsecrets.challenges.Challenge;
5-
import org.owasp.wrongsecrets.challenges.Spoiler;
4+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
65
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.BinaryExecutionHelper;
76
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.MuslDetectorImpl;
87
import org.springframework.stereotype.Component;
98

109
/** This challenge is about finding a secret hardcoded in a Rust binary. */
1110
@Slf4j
1211
@Component
13-
public class Challenge22 implements Challenge {
12+
public class Challenge22 extends FixedAnswerChallenge {
1413

15-
private final BinaryExecutionHelper binaryExecutionHelper;
16-
17-
public Challenge22() {
18-
this.binaryExecutionHelper = new BinaryExecutionHelper(22, new MuslDetectorImpl());
19-
}
20-
21-
/** {@inheritDoc} */
22-
@Override
23-
public Spoiler spoiler() {
24-
return new Spoiler(binaryExecutionHelper.executeCommand("", "wrongsecrets-rust"));
25-
}
26-
27-
/** {@inheritDoc} */
2814
@Override
29-
public boolean answerCorrect(String answer) {
30-
return binaryExecutionHelper
31-
.executeCommand(answer, "wrongsecrets-rust")
32-
.equals("This is correct! Congrats!");
15+
public String getAnswer() {
16+
BinaryExecutionHelper binaryExecutionHelper =
17+
new BinaryExecutionHelper(20, new MuslDetectorImpl());
18+
return binaryExecutionHelper.executeCommand("", "wrongsecrets-rust");
3319
}
3420
}

src/main/java/org/owasp/wrongsecrets/challenges/docker/Challenge25.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,23 @@
1010
import javax.crypto.spec.SecretKeySpec;
1111
import lombok.extern.slf4j.Slf4j;
1212
import org.bouncycastle.util.encoders.Base64;
13-
import org.owasp.wrongsecrets.challenges.Challenge;
14-
import org.owasp.wrongsecrets.challenges.Spoiler;
13+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
1514
import org.springframework.beans.factory.annotation.Value;
1615
import org.springframework.stereotype.Component;
1716

1817
/** This challenge is about finding a secret hardcoded in a web3 contract. */
1918
@Slf4j
2019
@Component
21-
public class Challenge25 implements Challenge {
20+
public class Challenge25 extends FixedAnswerChallenge {
2221
private final String cipherText;
2322

2423
public Challenge25(@Value("${challenge25ciphertext}") String cipherText) {
2524
this.cipherText = cipherText;
2625
}
2726

28-
/** {@inheritDoc} */
2927
@Override
30-
public Spoiler spoiler() {
31-
return new Spoiler(quickDecrypt(cipherText));
32-
}
33-
34-
/** {@inheritDoc} */
35-
@Override
36-
public boolean answerCorrect(String answer) {
37-
String correctString = quickDecrypt(cipherText);
38-
return answer.equals(correctString) && !DECRYPTION_ERROR.equals(correctString);
28+
public String getAnswer() {
29+
return quickDecrypt(cipherText);
3930
}
4031

4132
private String quickDecrypt(String cipherText) {

src/main/java/org/owasp/wrongsecrets/challenges/docker/Challenge26.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,23 @@
1010
import javax.crypto.spec.SecretKeySpec;
1111
import lombok.extern.slf4j.Slf4j;
1212
import org.bouncycastle.util.encoders.Base64;
13-
import org.owasp.wrongsecrets.challenges.Challenge;
14-
import org.owasp.wrongsecrets.challenges.Spoiler;
13+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
1514
import org.springframework.beans.factory.annotation.Value;
1615
import org.springframework.stereotype.Component;
1716

1817
/** This challenge is about finding a secret hardcoded in a web3 contract. */
1918
@Slf4j
2019
@Component
21-
public class Challenge26 implements Challenge {
20+
public class Challenge26 extends FixedAnswerChallenge {
2221
private final String cipherText;
2322

2423
public Challenge26(@Value("${challenge26ciphertext}") String cipherText) {
2524
this.cipherText = cipherText;
2625
}
2726

28-
/** {@inheritDoc} */
2927
@Override
30-
public Spoiler spoiler() {
31-
return new Spoiler(quickDecrypt(cipherText));
32-
}
33-
34-
/** {@inheritDoc} */
35-
@Override
36-
public boolean answerCorrect(String answer) {
37-
String correctString = quickDecrypt(cipherText);
38-
return answer.equals(correctString) && !DECRYPTION_ERROR.equals(answer);
28+
public String getAnswer() {
29+
return quickDecrypt(cipherText);
3930
}
4031

4132
private String quickDecrypt(String cipherText) {

src/main/java/org/owasp/wrongsecrets/challenges/docker/Challenge27.java

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,32 +10,23 @@
1010
import javax.crypto.spec.SecretKeySpec;
1111
import lombok.extern.slf4j.Slf4j;
1212
import org.bouncycastle.util.encoders.Base64;
13-
import org.owasp.wrongsecrets.challenges.Challenge;
14-
import org.owasp.wrongsecrets.challenges.Spoiler;
13+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
1514
import org.springframework.beans.factory.annotation.Value;
1615
import org.springframework.stereotype.Component;
1716

1817
/** This challenge is about finding a secret hardcoded in a web3 contract based on hashing. */
1918
@Slf4j
2019
@Component
21-
public class Challenge27 implements Challenge {
20+
public class Challenge27 extends FixedAnswerChallenge {
2221
private final String cipherText;
2322

2423
public Challenge27(@Value("${challenge27ciphertext}") String cipherText) {
2524
this.cipherText = cipherText;
2625
}
2726

28-
/** {@inheritDoc} */
2927
@Override
30-
public Spoiler spoiler() {
31-
return new Spoiler(quickDecrypt(cipherText));
32-
}
33-
34-
/** {@inheritDoc} */
35-
@Override
36-
public boolean answerCorrect(String answer) {
37-
String correctString = quickDecrypt(cipherText);
38-
return answer.equals(correctString) && !DECRYPTION_ERROR.equals(answer);
28+
public String getAnswer() {
29+
return quickDecrypt(cipherText);
3930
}
4031

4132
private String quickDecrypt(String cipherText) {
Lines changed: 6 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package org.owasp.wrongsecrets.challenges.docker;
22

33
import lombok.extern.slf4j.Slf4j;
4-
import org.owasp.wrongsecrets.challenges.Challenge;
5-
import org.owasp.wrongsecrets.challenges.Spoiler;
4+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
65
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.BinaryExecutionHelper;
76
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.MuslDetectorImpl;
87
import org.springframework.stereotype.Component;
@@ -12,24 +11,12 @@
1211
*/
1312
@Slf4j
1413
@Component
15-
public class Challenge36 implements Challenge {
16-
private final BinaryExecutionHelper binaryExecutionHelper;
17-
private String executable;
18-
19-
public Challenge36() {
20-
this.executable = "wrongsecrets-advanced-c";
21-
this.binaryExecutionHelper = new BinaryExecutionHelper(36, new MuslDetectorImpl());
22-
}
23-
24-
@Override
25-
public Spoiler spoiler() {
26-
return new Spoiler(binaryExecutionHelper.executeCommand("spoil", executable));
27-
}
14+
public class Challenge36 extends FixedAnswerChallenge {
2815

2916
@Override
30-
public boolean answerCorrect(String answer) {
31-
return binaryExecutionHelper
32-
.executeCommand(answer, executable)
33-
.equals("This is correct! Congrats!");
17+
public String getAnswer() {
18+
BinaryExecutionHelper binaryExecutionHelper =
19+
new BinaryExecutionHelper(36, new MuslDetectorImpl());
20+
return binaryExecutionHelper.executeCommand("spoil", "wrongsecrets-advanced-c");
3421
}
3522
}
Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package org.owasp.wrongsecrets.challenges.docker;
22

3-
import org.owasp.wrongsecrets.challenges.Challenge;
4-
import org.owasp.wrongsecrets.challenges.Spoiler;
3+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
54
import org.springframework.beans.factory.annotation.Value;
65
import org.springframework.stereotype.Component;
76

87
/** This challenge is about having a secrets stored as a Docker ARG var. */
98
@Component
10-
public class Challenge4 implements Challenge {
9+
public class Challenge4 extends FixedAnswerChallenge {
1110

1211
private final String argBasedPassword;
1312

@@ -16,12 +15,7 @@ public Challenge4(@Value("${ARG_BASED_PASSWORD}") String argBasedPassword) {
1615
}
1716

1817
@Override
19-
public Spoiler spoiler() {
20-
return new Spoiler(argBasedPassword);
21-
}
22-
23-
@Override
24-
public boolean answerCorrect(String answer) {
25-
return argBasedPassword.equals(answer) || argBasedPassword.equals("'" + answer + "'");
18+
public String getAnswer() {
19+
return argBasedPassword;
2620
}
2721
}
Lines changed: 6 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,20 @@
11
package org.owasp.wrongsecrets.challenges.docker;
22

3-
import com.google.api.client.util.Strings;
43
import lombok.extern.slf4j.Slf4j;
5-
import org.owasp.wrongsecrets.challenges.Challenge;
6-
import org.owasp.wrongsecrets.challenges.Spoiler;
4+
import org.owasp.wrongsecrets.challenges.FixedAnswerChallenge;
75
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.BinaryExecutionHelper;
86
import org.owasp.wrongsecrets.challenges.docker.binaryexecution.MuslDetectorImpl;
97
import org.springframework.stereotype.Component;
108

119
/** challenge about dotnet binaries. Please download them from the wrongsecrets-binaries release. */
1210
@Slf4j
1311
@Component
14-
public class Challenge50 implements Challenge {
15-
private final BinaryExecutionHelper binaryExecutionHelper;
16-
private String correctAnswer;
12+
public class Challenge50 extends FixedAnswerChallenge {
1713

18-
public Challenge50() {
19-
this.binaryExecutionHelper = new BinaryExecutionHelper(50, new MuslDetectorImpl());
20-
}
21-
22-
/** {@inheritDoc} */
23-
@Override
24-
public Spoiler spoiler() {
25-
if (Strings.isNullOrEmpty(correctAnswer)) {
26-
this.correctAnswer = binaryExecutionHelper.executeCommand("", "wrongsecrets-dotnet");
27-
}
28-
return new Spoiler(correctAnswer);
29-
}
30-
31-
/** {@inheritDoc} */
3214
@Override
33-
public boolean answerCorrect(String answer) {
34-
if (Strings.isNullOrEmpty(correctAnswer)) {
35-
this.correctAnswer = binaryExecutionHelper.executeCommand("", "wrongsecrets-dotnet");
36-
}
37-
return correctAnswer.equals(answer);
15+
public String getAnswer() {
16+
BinaryExecutionHelper binaryExecutionHelper =
17+
new BinaryExecutionHelper(50, new MuslDetectorImpl());
18+
return binaryExecutionHelper.executeCommand("", "wrongsecrets-dotnet");
3819
}
3920
}

0 commit comments

Comments
 (0)