본문 바로가기

CodeEngn

[CodeEngn] Basic RCE L12

<문제>

 

<풀이>

우선 문제 파일을 다운로드하고, 7-Zip File Maneger로 압축을 푼다.

 

 

12.exe를 실행해본다.

Key를 입력받는 메시지 창이 뜬다.

 

아무 값이나 Key로 입력하고 Check 버튼을 클릭해본다.

아무 결과도 뜨지 않는다.

About 버튼을 클릭하면 안내 메시지 같은 것이 뜨고

Cancel 버튼을 클릭하면 프로그램이 종료된다.

 

 

Key를 찾기 위해 12.exe를 디버거로 열어본다.

스크롤을 내리면서 코드를 살펴보다가 0040108B에서 성공메시지를 발견했다.

근처에 해당 성공메시지로 분기될지 말지를 결정하는 CMP 명령어를 찾아본다.

 

0040107D에 EAX값과 어떤 수(7A2896BF)를 CMP하는 명령어가 있다.

이 부분에 breakpoint(F2)를 걸고 프로그램을 실행해본다.

 

 프로그램을 실행하고 key 값에 256이라는 숫자를 입력해보았다.

Check 버튼을 클릭한다.

 

십진수 256을 16진수로 변환한 값인 0x100이 EAX에 저장된 것을 볼 수 있다.

아마 Check 버튼을 클릭하면 이 EAX의 값과 7A2896BF를 비교하는 것 같다.

같으면 성공메시지를 출력하는 흐름으로 코드가 실행될 것으로 추측할 수 있다.

 

추측이 맞는지 확인하기 위해 다시 프로그램을 실행해서 

16진수 7A2896BF를 십진수로 입력해본다.

계산기 프로그램을 실행하여 View > Programmer 를 클릭한다.

왼쪽에 있는 라디오버튼 중에 Hex를 선택하고 7A2896BF를 입력한다.

 

라디오버튼 중에 Dec를 클릭하면 입력한 16진수가 10진수로 변환된다.

 

프로그램을 실행하여 변환된 10진수 2049480383을 Key로 입력하고

Check 버튼을 클릭하면 성공메시지가 출력된다.

 

이것으로 문제에서 요구하는 Key값은 2049480383인 것을 알 수 있다.

 

 

 

이제 Key값을 overwrite할 곳의 주소를 찾아야 한다.

HexEdit 프로그램인 HxD 프로그램으로 12.exe를 연다.

Decoded text 영역을 살펴보며 스크롤을 내리다보면 성공메시지를 찾을 수 있다.

성공메시지의 시작위치는 0x0D3B이다.

 

성공메시지부분에 Key를 overwrite해보면 0x0D44까지 overwrite된다.

여기에서 끝부분에 널바이트(0x00)까지 추가되어야 하므로 실제 overwrite하는 부분은 0x0D45가 된다.

따라서 overwrite하는 주소영역은 0x0D3B~0x0D45가 된다.

 

 

Key값과 주소영역을 문제에서 요구하는 형식에 맞게 쓰면

20494803830D3B0D45이다.

 

 

<정답제출>

코드엔진의 Auth페이지에 Key 값으로 20494803830D3B0D45를 입력하면 Success!!가 뜬다.

 

'CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L14  (0) 2023.11.13
[CodeEngn] Basic RCE L13  (0) 2023.11.12
[CodeEngn] Basic RCE L11  (0) 2023.11.07
[CodeEngn] Basic RCE L10  (0) 2023.11.05
[CodeEngn] Basic RCE L09  (0) 2023.11.04