• 문제경로
  • 문제정보
  • 문제풀이

 

 

 

[문제경로]

https://dreamhack.io/wargame/challenges/960

 

Type c-j

Description php로 작성된 페이지입니다. 알맞은 Id과 Password를 입력하여 플래그를 획득하세요. 플래그의 형식은 DH{...} 입니다.

dreamhack.io


 

 

 

[문제정보]


 

 

 

[문제풀이]

1. 우선 웹서버에 접속했다. ID와 Password를 입력받을 수 있는 페이지가 있다. 

 

 

2. 얻을 수 있는 특별한 정보가 없어 소스코드를 다운로드하였다. 3개의 php 파일이 있는데 코드를 확인해 보니 check.php 파일을 통해서 ID와 Password를 얻을 수 있었다.

 

check.php 파일의 소스코드에서 ID와 Password를 얻을 수 있는 코드를 확인해 봤다. getRandStr() 함수를 호출하여 나온 값이 id에 저장되고 sha1("1") 함수를 호출해서 나온 값은 pw에 저장되는 것을 알 수 있다.

 

 

3. id 값을 먼저 구하기 위해서 getRandStr() 함수가 있는 코드로 가봤다. 어떠한 연산을 수행해서 결과적으로 randomString을 리턴하는 것을 알 수 있다.

 

randomString 값을 구하기 위해서 getRandStr() 함수를 호출하고 반환되는 값을 ID 변수에 저장한 후 해당 변수의 값을 출력하는 코드를 구성했다.

 

그리고 이 코드를 온라인 컴파일러에 돌렸더니 다음과 같은 ID 값이 출력되었다. 

 

ID 값이 맞는지 확인하기 위해서 다음 코드를 보면 알 수 있다. 입력한 id가 주어진 id와 같고, id의 길이가 10자리라면 ID pass를 출력한다는 것이다. 

 

그래서 ID 값에 구한 값을 넣고 Password에 아무 값이나 집어넣어 제출했다.

 

ID가 맞다는 것을 알 수 있다.

 

 

4. 이제 Password 값을 구해야 한다. pw 변수에는 sha1("1") 함수의 결과 값이 저장된다. (sha1 함수는 "Secure Hash Algorithm 1"의 약자로, 입력 데이터를 메시지 다이제스트라는 해시 값으로 만드는 암호화 해시 함수이며 보통 16진수 40자리로 랜더링 된다.) 온라인으로 SHA1 해시를 생성해 주는 사이트에서 1을 입력하고 생성한 결과는 다음과 같다.

 

나온 해시 값은 총 40자리이다. 그런데 소스코드에서 pw는 8자리 이어야 flag 출력이 가능하다. 

 

그냥 해시 값 앞 8자리를 pw에 넣어보기로 했다. 

 

바로 FLAG가 도출된 것을 확인할 수 있다. 

 

 

 

Reference:  https://www.mycompiler.io/ko/new/php

                        https://www.convertstring.com/ko/Hash/SHA1

                        https://ko.wikipedia.org/wiki/SHA-1

'Wargame & CTF > dreamhack' 카테고리의 다른 글

[Webhacking] what-is-my-ip  (0) 2024.03.30
[Webhacking] php7cmp4re  (0) 2024.01.30
[Webhacking] Flying Chars  (0) 2023.08.22
[Webhacking] devtools-sources  (0) 2023.08.21
[Webhacking] session-basic  (0) 2023.08.13

+ Recent posts