본문 바로가기

CTF

[Vishwa CTF] Eeezzy(미해결)

<문제>

 

<풀이>

1. 시작

받은 링크로 들어가면 뜨는 첫 화면이다. 로그인 폼을 확인할 수 있다.

 

코드도 제공되고 있다. 분석해보면, username과 password 값을 GET 방식으로 받고 있다. 둘다 값이 존재하면 $flag와 값을 비교해서 $flag와 값이 같으면 $_SESSION['status']에 $flag를 저장하고 다르면 "Invalid username or password"라는 문구를 저장한다. 예외가 발생하면 $_SESSION['status']에 $flag를 저장한다.

 

2. 페이지 기능 확인

username과 password에 임의의 값을 입력하고 로그인을 했더니 로그인 폼 안에 Invalid username or password라는 문구가 출력된다. 앞서 코드를 살펴본 바에 따르면 $_SESSION['status'] 가 출력되는 것으로 보인다.

 

3. 익스플로잇 시도

코드와 페이지 동작을 보았을 때 $_SESSION['status']에 $flag를 저장하면 화면 상에 $flag 값이 출력되는 것 같다. $_SESSION['status']에 $flag가 저장되는 경우는 코드 상에서 두가지인데, 하나는 username과 password가 $flag와 같은 경우이고, 다른 하나는 예외가 발생하는 경우이다. 전자의 경우는 $flag 값을 알아야 해당하는 것이므로 후자로 접근해야 할 것으로 추론했다.

 

첫번째 시도로 username과 password에 아무 값을 입력하지 않아보았다.

폼이 전송되지 않고 '이 입력란을 작성하세요.'라는 알림이 뜬다. HTML 코드 상에 required 속성이 들어가 있는 것 같다.

개발자 도구를 열어서 해당 element를 찾아낸 다음 required 속성을 지워봤다. 그리고 다시 폼을 전송해보았다.

여전히 'Invalid username or password' 문구가 뜬다.

 

두번째 시도로 username과 password에 전달되는 값이 string이 아닌 형식이 되게 해서 strcmp()함수를 호출할 때 예외가 발생하도록 유도해봤다.

input 태그의 타입을 text에서 number로 바꾸어 보았다.

여전히 'Invalid username or password' 문구가 뜬다.

 

세번째 시도로 GET방식으로 넘어가는 파라미터의 이름을 바꾸어 username, password라는 이름으로 넘어가는 파라미터가 없게 해봤다.

input 태그의 name 속성의 값 username에서 끝에 e를 지워 usernam으로 보내보았다.

'Invalid username or password'라는 문구는 뜨지 않지만 flag도 뜨지 않는다.

혹시 cookie에 flag가 저장되었을까 확인해보았는데 flag를 찾을 수 없었다.

 

문제를 해결하지 못한 채로 풀이를 종료했다.

'CTF' 카테고리의 다른 글

[TJCTF 2023]swill-squill  (0) 2023.05.28
[BYUCTF 2023] Notes (미해결)  (0) 2023.05.27
[LINE CTF 2023] old pal(미해결)  (0) 2023.03.27
[LINE CTF 2023] baby simple gocurl  (0) 2023.03.27
[Digital Overdose CTF] Can you tell me my email?(미해결)  (0) 2022.11.22