안녕하세요. 오늘은 basic rce level 17 문제를 풀어보겠습니다.

홈페이지로 들어가 basic rce level 17을 눌러주세요.

Name을 알아내는 것이군요. Name은 한자리 라고 합니다. 무차별 대입을 막기 위해 정답인증은 Name의 MD5 해쉬값이라고 적어 놨네요. 파일을 받아 봅시다.

재생버튼을 눌러 봅시다. PUSHED가 아닌 걸러 보아 패킷된 파일은 아니군요. 바로 텍스트를 찾아 봅시다.

둘러보니까 성공문자열이 보이는군요. 한 번 들어가 봅시다.

보니까 성공문자열 말고도 다른 문자열이 보입니다. 글자를 더 입력하라는 메세지와 30글자를 넘으면 안된다는 문자열도 있군요. 흠.. 확인을 위해 프로그램을 실행시키고 문제에서 제시한 키값을 입력해 봅시다.

check it을 눌러줍시다.

글자를 더 입력하라는 군요. Name을 빼먹어서 그런가 봅니다. 아무거나 하나 적어놓고 다시 해봅시다.

??? 분명 Name은 한글자고 키값도 문제에 나온대로 했는데 계속 글자를 더 입력하라고 나옵니다. 흠.. 뭔가 이상하군요. 올리디버그로 가서 More Chars 부분을 한번 봅시다.

위에 비교함수인 CMP와 조건점프인 JGE가 있군요. CMP에 브레이크를 걸고 실행해봅시다.

아까처럼 입력하신 후 check it을 누르시고 브레이크 된 CMP부분을 한 번 봅시다.

EAX값이 1이라고 나와있네요.

여기서 JGE 조건점프에 대해 설명하겠습니다.

JGE는 앞의 CMP a,b 에서 a가 b보다 크거나 같을 때에 점프를 하게 됩니다.

즉 정리를 하면 EAX가 3보다 크거나 같아야 JGE에 의해 점프를 하게 되고 점프를 해야 More Chars 문구가 뜨지 않습니다. 여기서 EAX는 Name이란 걸 알 수 있죠,. 그런데 아까 본 숫자 1이 값을 의미하는지 아니면 자릿수를 의미하는 지 알 수가 없습니다. 그래서 다시 한번 해 봅시다.

check it을 눌러주시고 브레이크를 확인합시다.

2가 나오는군요. 즉 EAX는 Name의 자릿수를 의미합니다. 그런데?

문제에서 Name는 한자리라고 했습니다. 즉 EAX가 1이어야 합니다. 근데 그렇게 하면 조건에 맞지 않아 More Chars 문구를 뜨게 합니다. 이럴땐 그냥 조건을 바꿔주시면 됩니다.

CMP EAX,3 부분을 더블클릭하고 조건을 아래와 같이 맞춰줍시다.

이렇게 해야 EAX가 1이 되어도 조건에 맞기 때문에 JGE가 실행됩니다. 

그런데 여기서 밑으로 좀 더 내려가면 30자리 이상은 안된다는 문자열이 있습니다. 여기선 EAX와 1E를 비교하며 JLE가 쓰였습니다. JLE는 JGE와 반대로 a가 b보다 작거나 같을 때 점프합니다. JLE이므로 건드릴 필요는 없습니다.

수정이 완료되었으면 실행해 봅시다.

Check it을 눌렀는데 아무런 반응이 없습니다. 성공적으로 수정이 됐다는 것입니다.

그러면 이제 정답을 찾아야 합니다. 한글자 라고 했으므로 그냥 뭐 다 입력해보면 되겠지요. 

1~9 그리고 알파벳 소문자,대문자, 한글 그리고 기타 특수문자 등 입력 할 수 있는건 전부 입력해 봅시다.

몇번을 삽질하다보니 정답이 나왔습니다. F라는군요. F를 MD5 해쉬해봅시다.

값에 대문자가 있으므로 맞는 것 같습니다. 인증해봅시다.



정답이 맞는 것 같습니다. 네 이것으로 문제풀이를 마치겠습니다.

'codeengn' 카테고리의 다른 글

codeengn - basic rce level 16  (0) 2015.10.02
codeengn - basic rce level 18  (0) 2015.09.25
codeengn - basic rce level 15  (0) 2015.08.18
codeengn - basic rce level 14  (0) 2015.08.18
codeengn - basic rce level 13  (0) 2015.08.12
Posted by englishmath
,