tmxklab

[CodeEngn] Basic RCE L17 본문

War Game/CodeEngn

[CodeEngn] Basic RCE L17

tmxk4221 2021. 1. 29. 15:50

1. 문제

1) 문제확인


2. 접근방법


3. 문제풀이

  • 문제에서 Name이 한 자리라고 알려줬으니 "A"를 입력하고 Check it!버튼을 눌러보자

  • 그런데 이상하게도 입력한 값("A")의 길이와 3을 비교하여 작으면 우리가 원하는 곳으로 분기하지 않는다.

  • 이거는 EIP값을 변경하여 위 사진이 나오도록 실행하였는데 여기서도 입력한 값의 길이와 0x1E(30)과 비교한다.

처음에 한 자리수가 아닐거라 생각하고 입력 값의 길이를 3보다 크고 30보다 작은 문자열을 여러 개 만들어 브포 때리려고 했는데 뭔가 이상했다. 문제에서는 분명히 한 자리수라고 했는데...

그래서 브포 때리기에는 시간 낭비될 것같아서 롸업을 봤는데 처음 입력한 값의 길이와 3을 비교할 때 코드 패치하여 이상한데로 분기되지 않도록 하였다.

(cmp eax, 3 ; jge 0x45BB3E → cmp eax, 3 ; jle 0x45BB3E)

쭉 내려가다보면 sub_45B850()에 의해 입력 값 "A"에 의해 "FFE3-2C73-0502A34C-8A48-E1CB" 값이 나오는데 요거랑 아까 입력했던 Serial값인 "BEDA-2F56-BC4F4368-8A71-870B"와 비교한다.

입력한 값에 따라 계속 변하기 때문에 한 자리 수씩 계속 넣다보면 Serial값과 같아지도록 한다.

최종적으로 "F"를 입력하면 Serial값과 같아지고

위 사진처럼 메시지 박스가 뜨게 된다.

문제에서는 MD5해쉬 값을 입력하라고 했으니깐 MD5해시 생성하는 사이트에서 값을 얻어와서 인증하면 된다.


4. 몰랐던 개념

'War Game > CodeEngn' 카테고리의 다른 글

[CodeEngn] Basic RCE L19  (0) 2021.01.29
[CodeEngn] Basic RCE L18  (0) 2021.01.29
[CodeEngn] Basic RCE L16  (0) 2021.01.29
[CodeEngn] Basic RCE L15  (0) 2021.01.29
[CodeEngn] Basic RCE L14  (0) 2021.01.29
Comments