Troll을 잡으러 갑시다. 중간고사 때문에 며칠동안 글을 못올렸어요 ㅠㅜ

 

제약 조건이

1. 인자가 2개(제목, 인자1)이어야 함.

-argv[2]에 값을 넣어서 할 수 없게 되었습니다.

2. egghunter

-환경변수를 사용할 수 없습니다.

3. argv[1][47]에서 값이 \xbf여야 합니다.

-저 부분에는 주소값만 들어가야 합니다.

4. argv[1]의 길이가 48이 넘으면 안됩니다.

-따라서 ret주소 이후에 무언가를 할 수 없습니다.

5. buffer hunter

-버퍼를 이용할 수 없습니다.

6. argv[1]

-argv[1] 인자또한 이용할 수 없습니다.

 

정말 빡빡해진거 같네요.

하지만 할 수 있습니다. 제목을 사용하면 될 것 같거든요.

제목도 사용할 수는 있을 것 같았지만 잘 와닿지는 않아서 더 쉬운 방법만 했었는데 이번에 할 수 있을 것 같습니다.

 

일단 제목도 어딘가에 저장이 될테니 어디에 저장되는지 확인해봅시다.

 

대충 조건에 맞게 넣고 실행한 뒤 $esp 이후에 어떤 내용이 있는지 확인해 본 결과, 

예상대로 밑부분에 파일 주소와 이름이 있었습니다.

이제 ret의 주소를 저기로 바꾸면 되지 않을까 생각합니다만... 안될거같아보이기도 합니다...

저기에 \x90을 한 100번 정도 넣은 뒤 0xbffffc76부근으로 이동하게 하면 어떻게든 될거같기도 하네요.

한번 해보겠습니다.

우선 제목을 바꿔주도록 하죠.

 

`python -c "print'\x90'*200 + '\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80' +'\x90' *50 "`

이렇게 입력해줬는데 자꾸 No such file or firectory라고만 뜹니다. 왜이럴까요?

이건 쉘 코드에 /(slash) 가 포함되었기 때문이라고 합니다. /를 기준으로 좌우가 다른 폴더로 인식하기 때문에 파일 명을 바꿀 수 없다고 합니다. (0x2f가 '/'를 의미합니다.)

이를 해결하기 위해서는 다른 쉘 코드를 이용해야 할 것 같습니다.

\xd9\xc5\xd9\x74\x24\xf4\xb8\x15\xc3\x69\xd7\x5d\x29\xc9\xb1\x0b\x31\x45\x1a\x03\x45\x1a\x83\xc5\x04\xe2\xe0\xa9\x62\x8f\x93\x7c\x13\x47\x8e\xe3\x52\x70\xb8\xcc\x17\x17\x38\x7b\xf7\x85\x51\x15\x8e\xa9\xf3\x01\x98\x2d\xf3\xd1\xb6\x4f\x9a\xbf\xe7\xfc\x34\x40\xaf\x51\x4d\xa1\x82\xd6

슬래시 없는 이 쉘코드를 사용하도록 하겠습니다.

바꿔줬더니 이렇게 뜨네요. 참고로 저 파일은 cp를 통해 만든 파일로 따라서 권한은 orge에 있습니다. 저 파일로 되는지 확인하고 troll이름 바꿔서 진행하겠습니다.

 

이렇게 제목이 나오게 되는데 위에서 봤던거랑 주소값이 달라졌네요.. 다시 정해야겠습니다.

 

이렇게 위치를 알 수 있었습니다.

0xbffffb34 이 주소를 사용해서 문제를 해결하도록 할게요.

 

bash2를 입력하고 위와같이 하니까 orge의 bash를 열 수 있었습니다. 위의 주소를 사용했었지만 '\x90'의 개수가 부족해서인지 잘 안돼서 주소를 약간 바꿔주니까 성공했습니다.

 

이름을 바꾸고 다시 진행해줬습니다.

다음 password를 바로 구할 수 있었네요.

 

이렇게! troll도 잡아보았습니다.

+ Recent posts