나혼자 공부장

[FTZ] Level 17 write-up 본문

pwnable/FTZ

[FTZ] Level 17 write-up

라부송 2019. 11. 20. 23:28

hint 파일을 조회해서 문제 해결 방향을 생각해보면, 

buf에 사용자 입력이 들어가고 그걸 call 포인터가 printit의 주소를 가리키고 있는 부분까지 BOF를 일으켜 풀 수 있을 듯 하다. 즉 이 문제를 해결하려면

 

1. 쉘 코드를 환경변수로 만들어준다.

2. 쉘 코드의 환경변수의 주소를 알아내는 코드를 짜고 실행해서 주소를 알아낸다.

3. printit의 주소가 오는 부분에 쉘 코드 환경변수의 주소를 넣는 형태로 페이로드를 짜서 실행한다.

 

gdb 로 더 자세히 살펴보자.

 

위와 같이 구성할 수 있다.

 

쉘코드를 환경변수를 지정해준다.

 

getenvaddr.c

환경변수를 구하는 코드는 위와 같이 짤 수 있다.

그냥 getenv로 받아서 출력하기만 하면 프로그램 길이에 영향을 받아서 환경변수 주소가 밀리기 때문에 위와 같이 연산을 진행하고 출력해주어야 한다.

 

 

0xbffffeec 라는 주소를 얻었다.

 

여기까지 하면 페이로드를 짤 수 있다.

 

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

 

 

password : why did you do it

'pwnable > FTZ' 카테고리의 다른 글

[FTZ] Level 19 write-up  (0) 2019.12.05
[FTZ] Level 15 write-up  (0) 2019.11.20
[FTZ] Level 11 풀이  (0) 2019.11.13
Comments