이제 F.T.Z.도 거의 막바지네요.

Level19hint를 한번 보도록 하겠습니다.

살짝 당황스럽네요매우 짧은 코드가 나왔습니다.

BOF버그가 있는 gets함수를 이용해서 어떻게 하라는거 같은데 이전의 코드와는 달리 setreuidsystem(“/bin/bash”)가 보이지 않습니다.

즉 이부분이 필요할테니.. level20setreuid가 설정 되어 있는 쉘코드를 작성해야겠네요.

이번 문제는 이러한 쉘코드를 작성할 수 있느냐가 핵심입니다.

 

우선 level20의 계정 정보를 확인해 보도록 하겠습니다.

level20의 계정 번호는 3100이네요.

 

다음과 같은 코드를 쉘코드로 만들어야 합니다.

쉘코드를 만드는 방법은 Level11에 첨부해놓은 pdf를 보시면 알 수 있습니다.

 

간단하게 설명해 드리자면, 위의 코드를 static으로 컴파일한후 gccexecvesetreuid의 어셈블리어를 확인해 핵심만 추출하면 다음과 같이 됩니다.

이제 이 코드를 컴파일 해서 objdump로 어셈블리 명령어를 추출하면 다음과 같이 나옵니다.

여기서 필요한 부분은 0x08048304부터 0x084832d입니다. 이부분의 기계어만 추출하면 다음과 같은 쉘코드를 얻을 수 있습니다.

 

"\x31\xd2\x66\xb8\x1c\x0c\x66\xb9\x1c\x0c\x89\xc3\x89\xd0\xb0\x46\xcd\x80\x52\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\x31\xd2\x89\xd0\xb0\x0b\xcd\x80"

 

이제 이 쉘코드를 에그쉘에 올리고 그 주소를 ./attackmeret에 덮어 씌우면 됩니다.

에그쉘과 에그쉘의 주소를 얻는 파일은 아래에 있습니다.

(출처 : http://pwnbit.kr/7)

EGG Shell.c

getegg.c

egshell을 통해 등록한 쉘코드의 주소는 0xbffff2bc네요.

 

Gdbattackme를 확인해 보도록 하겠습니다.

확인한 결과 덮어 씌워야 할 ret의 위치는 입력 포인터로부터 44만큼 떨어져 있네요.

 

44만큼 채우고 쉘코드의 주소를 넣으면 될듯 합니다.

다행히도 생각한 대로 Level20의 쉘이 획득 되었습니다.


Level20의 패스워드는 we are just regular guys입니다.


작성하고 나서 보니 폴더 경로에 좋지 않은 문자가 들어가 있네요.... 쉘코드 만들다가 빡쳐서 그만... 죄송합니다. ㅎㅎ;

+ Recent posts