Basic RCE L07
문제를 보니 "CodeEngn은 어떤것으로 변경되는가?" 입니다.
조건이 컴퓨터 C 드라이브의 이름이 CodeEngn일 경우라네요!
그럼 일단 C드라이브의 이름을 바꿔줍시다!
(저는 처음에 C드라이브 이름 안바꾸고 했다가 한참 애먹었습니다..ㅠㅠ)
자 변경을 시키고 Ollydbg로 열어줍니다 :D
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라는 값을 입력해 주었습니다!
그러자 입력한 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
ConcatString의 변수에 StringToAdd변수의 문자열이 붙여진걸 볼 수 있습니다!
그리고 계속실행하면 lstrcmpiA 함수가 보이네요 :D
그러자 최종적으로 비교하는 것은
"test", "L2C-5781EqfqEngn4562-ABEX"
입니다!
그럼 정답이 무엇인지 짐작이 오시죠 :D?
이렇게 성공했다는 메세지 박스를 받았습니다!
어떤 문자열의 암호화된 부분을 찾아내는 문제였네요 :D
이만 7번 문제 풀이를 마치겠습니다 !