ㅇㅂㅇ

금고문 문제가 하나 더 나왔다.

 

문제를 보니 복잡한 배열을 사용한 소스 코드를 분석하라고 한다. 다운로드 받고 해보자.

 

import java.util.*;

class VaultDoor1 {
    public static void main(String args[]) {
        VaultDoor1 vaultDoor = new VaultDoor1();
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter vault password: ");
	String userInput = scanner.next();
	String input = userInput.substring("picoCTF{".length(),userInput.length()-1);
	if (vaultDoor.checkPassword(input)) {
	    System.out.println("Access granted.");
	} else {
	    System.out.println("Access denied!");
	}
    }

    // I came up with a more secure way to check the password without putting
    // the password itself in the source code. I think this is going to be
    // UNHACKABLE!! I hope Dr. Evil agrees...
    //
    // -Minion #8728
    public boolean checkPassword(String password) {
        return password.length() == 32 &&
               password.charAt(0)  == 'd' &&
               password.charAt(29) == '3' &&
               password.charAt(4)  == 'r' &&
               password.charAt(2)  == '5' &&
               password.charAt(23) == 'r' &&
               password.charAt(3)  == 'c' &&
               password.charAt(17) == '4' &&
               password.charAt(1)  == '3' &&
               password.charAt(7)  == 'b' &&
               password.charAt(10) == '_' &&
               password.charAt(5)  == '4' &&
               password.charAt(9)  == '3' &&
               password.charAt(11) == 't' &&
               password.charAt(15) == 'c' &&
               password.charAt(8)  == 'l' &&
               password.charAt(12) == 'H' &&
               password.charAt(20) == 'c' &&
               password.charAt(14) == '_' &&
               password.charAt(6)  == 'm' &&
               password.charAt(24) == '5' &&
               password.charAt(18) == 'r' &&
               password.charAt(13) == '3' &&
               password.charAt(19) == '4' &&
               password.charAt(21) == 'T' &&
               password.charAt(16) == 'H' &&
               password.charAt(27) == 'f' &&
               password.charAt(30) == 'b' &&
               password.charAt(25) == '_' &&
               password.charAt(22) == '3' &&
               password.charAt(28) == '6' &&
               password.charAt(26) == 'f' &&
               password.charAt(31) == '0';
    }
}

코드를 보니 입력받은 패스워드를 검사하는 함수에서 취약점이 존재한다. 순서대로 나열해보자.

 

d35cr4mbl3_tH3_cH4r4cT3r5_03f841 플래그인 듯하다.

 

플래그는 picoCTF{d35cr4mbl3_tH3_cH4r4cT3r5_03f841} 이다.

 

 

 

'PicoCTF > WriteUp' 카테고리의 다른 글

[shark on wire 1] - 150p  (0) 2020.11.30
[What Lies Within] - 150p  (0) 2020.11.30
[caesar] - 100p  (0) 2020.11.30
[Bases] - 100p  (0) 2020.11.30
[logon] - 100p  (0) 2020.11.30

+ Recent posts