안녕하세요 오늘은 basic rce leve2를 풀어보겠습니다.

홈페이지로 들어가 basic rce leve2를 눌러주세요.

패스워드를 분석하라는군요. Download를 눌러주세요.

다 받았으면 실행을 시켜 봅시다.

이런 ollydbg로 열어 봅시다.

왓더 뻐...

뭘로 해도 안열리네요. 이럴때는 어떻게 하느냐구요? 보통 사람들은 이럴때 hex로 봅니다.

그냥 파일을 보는 것이 아닌 파일의 16진수 코드를 보는 것이지요. hex로 볼려면 간단한 프로그램으로 쉽게 볼 수 있습니다. winhex 프로그램을 설치하여 실행한 후 파일을 열어봅시다.

숫자는 머리 아프니 보지말고 오른쪽 것만 편히 봅시다. 근데 못알아듣는 문자만 나오네요.

좀더 내려봅시다

오 정상적인 문구가 나옵니다. 음 NOPE 실패했다..

try again 다시 시도한다.. Yeah 성공했다. Crackme #1  JK3FJZh 이건 뭔 뜻일까요?

더이상 자세한 설명은 생략하겠습니다. 설마 패스워드를 못찾으신건가요?

눈앞에 있는데요??? 영어숫자가 섞였는데요??

이것으로 문제풀이를 마치겠습니다.


'codeengn' 카테고리의 다른 글

codeengn - basic rce level 8  (0) 2015.08.05
codeengn - basic rce level 7  (0) 2015.08.03
codeengn - basic rce level4  (0) 2015.07.20
codeengn - bagic rce level3  (0) 2015.07.20
CodeEngn - basic rce level 1  (5) 2015.07.15
Posted by englishmath
,

네 오늘은 코드엔진의 문제를 풀어보겠습니다.

http://codeengn.com/ 으로 들어가 challenges - start - basic rce의 level 1 문제를 클릭합니다. 이 사이트는 회원가입을 하지 않아도 됩니다.


음 문제가 나왓습니다. Author(저자)은 abex 이군요. HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가? 뭔 소리일까요? 일단 밑에 다운로드문구가 보입니다. 눌러서 파일을 받아 봅시다.

흠 한번 실행해 봅시다.


너의 하드를 CD-ROM으로 생각하도록 나를 만들어라. 즉 이프로그램을 만져서 저의 하드를 cd롬으로 인식시켜야 할 것 같습니다.

이것은 CD-ROM드라이브가 아니라고 뜨는 군요.

파일을 올리디버그로 열어봅시다.

OEP는 00401000이네요. 그림을 보시면 좌측에 빨간 글자로 된 함수를 보실 수 있습니다.

먼저 MessageBoxA함수를 살펴봅시다. 함수명만 봐도 하는 일이 딱 감이 옵니다. 메세지 박스를 띄워주는 함수이네요. 내용을 보면 아까 실행할 때 보였던 문자열이 보입니다.

Nah... This is not a CD-ROM Drive

드라이브가 CD-ROM이 아니라는 '실패' 문자열입니다. 그럼 반대로 성공 문자열도 있겠지요. 바로 밑에 있네요.

OK, I really think that your HD is a CD-ROM!

자 이쯤 에서 문제를 한번 체크 해 봅시다.

HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가?

즉 바꿔 말하면 성공문자열이 적힌 메세지박스함수를 실행시키기 위한 GetDriveTypeA의 리턴값을 구해라 라고 되겠네요.

GetDriveTypeA 함수 바로 다음 부분에 브레이크를 걸고 실행해 봅시다. 함수의 리턴값은 함수가 끝날때 반환되는 값이기 때문에 GetDriveTypeA함수를 호출하고 난 후 바로 멈추도록 브레이크를 걸었습니다. (브레이크를 걸고 실행하면 실행하다가 브레이크를 건 명령어를 실행하기 바로 전에 멈춥니다.)



정상적으로 함수가 호출되고 종료되었습니다. 반환값을 확인해 봅시다. 함수의 리턴값은 레지스터에 저장됩니다. 레지스터는 여러 레지스터가 있는데 일단 함수의 반환값은 EAX레지스터에 저장되는 것만 확인하시면 됩니다.

EAX값이 3으로 되어있네요. 즉 기본 GetDriveTypeA 함수의 반환값은 3입니다.

다만 이 반환값으론 성공문자열을 가지 못하고 실패 문자열로 가게 됩니다. 원인을 살펴보면 도중에 아래와 같은 명령어를 볼 수 있습니다.

명령어들을 살펴봅시다.

CMP [값1],[값2] = 값1과 값2를 비교하여 두 값이 같으면 1 다르면 0을 ZeroFlag에 대입합니다.
JE [주소] = ZeroFlag의 값이 1일 경우 해당 주소로 점프한다.

확인해봅시다. CMP 다음 명령문에 브레이크를 걸고 실행해봅시다.

 

CMP EAX,ESI 가 실행되었습니다. 레지스터 값을 확인해 봅시다.

함수의 반환값 즉 EAX레지스터의 값은 1, ESI 레지스터 값은 3, 1과 3은 다르므로      z(ZeroFlag)의 값은 0이 됩니다. z값이 0이 됨으로써 JE 명령문에서 점프를 하지 않고
그대로 실행함으로써 실패문자열이 출력됩니다.

우리가 원하는 성공문자열을 출력하기 위해서는 JE명령문에서 점프를 해야 합니다. 점프를 하기 위해선 ZF의 값을 1로 맞춰줄 필요가 있고  ZF가 1이 되기 위해선 EAX와 ESI의 값이 같아야 합니다.

EAX는 1이고 ESI는 3입니다.  이중 함수의 반환값은 EAX이고 EAX는 ESI보다 2작으므로 기본 함수 반환값(EAX)에 2를 더해서 5로 만들어줘 최종적으로 EAX와 ESI가 값이 3으로 통일되도록 만들어줍시다.

수정하는 방법은 EAX 값을 더블클릭 하면 됩니다.

성공적으로 수정했을 시 성공문자열이 출력됩니다. 그러면 정답은 성공으로 가는 EAX값 즉 5가 됩니다.

감사합니다.

'codeengn' 카테고리의 다른 글

codeengn - basic rce level 8  (0) 2015.08.05
codeengn - basic rce level 7  (0) 2015.08.03
codeengn - basic rce level4  (0) 2015.07.20
codeengn - bagic rce level3  (0) 2015.07.20
codeengn - basic rce level2  (0) 2015.07.15
Posted by englishmath
,


ssh://ftz.hackerschool.org
id : level6
pw : what the hell

서버에 접속하여 문제를 확인한다.



hint - 인포샵 bbs의 텔넷 접속 메뉴에서 많이 사용되던 해킹 방법이다.

 


접속하자마자 힌트가 뜹니다만 프롬프트가 실행되지 않습니다. 일단 ctrl+c를 프로세스를 종료시킵니다. 그런데 종료를 시키자마자 프롬프트가 나타났습니다. 일단 파일목록을 확인해봅시다.

^C
[level6@ftz level6]$ ls -l
합계 32
-rw-r--r--    1 root     root           72 11월 23  2000 hint
-rw-r-----    1 root     level6         36  3월 24  2000 password
drwxr-xr-x    2 root     level6       4096  5월 16  2005 public_html
drwxrwxr-x    2 root     level6       4096  6월 25 21:50 tmp
-rwxr-x---    1 root     level6      14910  3월  5  2003 tn
[level6@ftz level6]$ cat password 
Level7 password is "come together".

??  password란 파일이 있습니다.  확인해 봅시다.

password is "come together".

패스워드를 얻었습니다.


'HackerSchool' 카테고리의 다른 글

HackerSchool - trainer  (0) 2015.07.22
HackerSchool - F.T.Z 로컬환경 구축  (0) 2015.07.22
Hacker school ftz level5  (0) 2015.07.15
hacker school - ftz level4  (0) 2015.07.15
hackerSchool - level 1  (0) 2015.07.15
Posted by englishmath
,