CTF/CodeEngn.kr

Basic RCE L07

HelloMG 2020. 2. 13. 19:03

Basic RCE L07 문제

문제를 보니 "CodeEngn은 어떤것으로 변경되는가?" 입니다.

조건이 컴퓨터 C 드라이브의 이름이 CodeEngn일 경우라네요!

 

그럼 일단 C드라이브의 이름을 바꿔줍시다!

(저는 처음에 C드라이브 이름 안바꾸고 했다가 한참 애먹었습니다..ㅠㅠ)

C 드라이브 이름 변경

자 변경을 시키고 Ollydbg로 열어줍니다 :D

EP

EP입니다!

처음부터 GetModuleHandleA함수를 통해 어떤 모듈의 정보를 가져오는군요 :D

https://docs.microsoft.com/en-us/windows/win32/api/libloaderapi/nf-libloaderapi-getmodulehandlea

 

GetModuleHandleA function (libloaderapi.h) - Win32 apps

Retrieves a module handle for the specified module. The module must have been loaded by the calling process.

docs.microsoft.com

그리고 DialogBoxParamA을 지나칠 때

다이얼로그박스가 실행이되는 것을 알 수 있습니다!

 

그리고 어떤값을 입력하라고 하는군요 :D

그래서 저는 좀 살펴보다가 밑에서 비교구문이랑 성공 및 실패 메시지박스 발견할 수 있었습니다!

비교구문

그럼 BP(BreakPoint)를 걸어주고 다이얼로그에

test라는 값을 입력해 주었습니다!

lstrcatA

그러자 입력한 test가 보이는군요!

그런데 lstrcatA가 보입니다 :D

lstrcat함수는 간략하게 설명해서 문자열을 이어붙여주는 기능을 합니다.

https://docs.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-lstrcata

 

lstrcatA function (winbase.h) - Win32 apps

Appends one string to another.Warning  Do not use.

docs.microsoft.com

lstrcatA는 취약점을 가진 함수네요!

어떤 취약점인지 이를 가지고 무엇을 할 수 있는지는 스스로 공부해보시길 바랍니다 :D

lstrcatA 2

ConcatString의 변수에 StringToAdd변수의 문자열이 붙여진걸 볼 수 있습니다!

그리고 계속실행하면 lstrcmpiA 함수가 보이네요 :D

lstrcmpiA

그러자 최종적으로 비교하는 것은

"test", "L2C-5781EqfqEngn4562-ABEX"

입니다!

 

그럼 정답이 무엇인지 짐작이 오시죠 :D?

성공

이렇게 성공했다는 메세지 박스를 받았습니다!

 

어떤 문자열의 암호화된 부분을 찾아내는 문제였네요 :D

이만 7번 문제 풀이를 마치겠습니다 !