Wargame/CodeEngn

[CodeEngn] Basic RCE L07

핏디 2021. 7. 30. 17:18
SMALL

[문제]

 

07.exe
0.01MB


[풀이]

문제 파일을 다운하여 임의의 문자열을 넣고 실행해보면 error 메시지가 출력된다.

 

GetDlgItemText 함수와 GetVolumeInformation함수, strcat함수가 눈에 띈다.

GetDlgItemText 함수는 입력 값을 가져온다.

입력 값이 저장된 모습

00401097  6A 00          push    0              ;  RootPathName = NULL 
-> RootPathName = NULL이면 C:\를 말한다!

 

GetVolumeInformation함수는 드라이버의 정보를 가져온다.

가져온 정보는 위의 버퍼에 저장된다!

 

004010A8  E8 94000000    call    <jmp.&KERNEL32.lstrcatA>       ; \lstrcatA

-> strcat 함수: 문자열 붙여주는 함수, 인자 값으로 4562-ABEX와 07.0040225C 값을 가져와서 붙여준다.

-> 07.0040225C는 드라이버 이름을 가리키는데 현재 비어있으므로 strcat 함수를 호출 후에도 4562-ABEX가 된다!

 

004010AD  |. B2 02          mov     dl, 2
004010AF  |> 8305 5C224000 >/add     dword ptr ds:[40225C], 1
004010B6  |. 8305 5D224000 >|add     dword ptr ds:[40225D], 1
004010BD  |. 8305 5E224000 >|add     dword ptr ds:[40225E], 1
004010C4  |. 8305 5F224000 >|add     dword ptr ds:[40225F], 1
004010CB  |. FECA           |dec     dl
004010CD  |.^75 E0          \jnz     short 07.004010AF

-> dl 에 2를 넣고 각 자리에 대한 add 1을 진행한다.

 각 자리 값 값을 연산하여 L2C-5781뒤에 붙여주면서 최종 시리얼 값을 나타낸다.

 

C드라이브 이름을 문제에서 제시한 CodeEngn으로 변경한 후에 이 과정을 살펴보면 이해가 잘된다.

C드라이브 이름을 바꿔준 뒤에 07.exe 파일을 ollydbg로 열어서 실행해보면, 

 

GetVolumeInformation 함수 호출후에 CodeEngn이 들어간 것을 볼 수 있다.

strcat 함수를 지나고 나면 4562-ABEX가 CodeEngn 뒤에 덧붙게 된다.

 

mov dl 2부분을 통해서 2번 반복하는 것을 알 수 있고, 각각 진행해보면 다음과 같다.

 

CodeEngn -> DodeEngn

CodeEngn -> DpdeEngn

CodeEngn -> DpeeEngn

CodeEngn -> DpefEngn

===================2번째 반복========================

CodeEngn -> DpefEngn -> EpefEngn

CodeEngn -> DpefEngn -> EqefEngn

CodeEngn -> DpefEngn -> EqffEngn

CodeEngn -> DpefEngn -> EqfgEngn이 되고 strcat 함수를 지나면서 최종적으로 EqfgEngn4562-ABEX이 된다.

 

이후에는 strcat이 다수 호출되는데,

1번째 strcat 부분을 지나면 L2C-5781이 EqfgEngn4562-ABEX과 합쳐질 준비를 하게 되고,

 

2번째 strcat 부분을 지나면 L2C-5781EqfgEngn4562-ABEX로 최종 시리얼이 완성된 것을 볼 수 있다.

 

해당 값을 실행 파일에 넣어보면 정답 메시지가 출력되는 것을 볼 수 있다.

 

 

LIST

'Wargame > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L09  (0) 2021.08.11
[CodeEngn] Basic RCE L08  (0) 2021.08.04
[CodeEngn] Basic RCE L05  (0) 2021.07.29
[CodeEngn] Basic RCE L04  (0) 2021.07.22
[CodeEngn] Basic RCE L03  (0) 2021.07.22