반응형
ID : level17
PW : king poetic
1.
level17로 로그인 하고, hint 파일을 읽어보자.
16번 문제와 소스코드가 비슷하지만, shell을 실행시키는 함수 부분이 제외되었다. 그렇다면 환경변수에 쉘코드를 등록하고 쉘코드 주소를 이용해 문제를 해결해보자.
(level18의 권한은 실행해주는데 /bin/bash 명령어가 없어서 쉘이 실행이 안 됨. 그래서 쉘코드 넣은 환경변수 주소를 *call에 넣어주는 거)
디버깅. 스택 구조가 buf(20) + dummy(20) + *call ~~~ 임을 알 수 있다.
환경변수에 쉘코드 넣어주고 그 환경변수를 출력하는 코드를 만들어서 실행하자.
페이로드.
(python -c 'print "\x90"40 + "\x1e\xfb\xff\xbf"';cat)|./attackme
buf(20)와 dummy(20)을 NOF 40바이트로 덮어주고, *call 포인터 변수를 shell code가 들어있는 환경변수의 주소로 덮어줬다. (메모리 상)
🤔 여기서 궁금한 점.
Q. fgets 함수에 있는 48바이트는 무엇을 의미하는 것인가? 48바이트 이상을 입력해야 그 코드를 넘어갈 수 있는 것이 아니면 뭘 의미하는 것이지?
→ 딱 48바이트만 입력을 받는다, 즉 50바이트를 입력해도 무조건 48바이트만 입력된다는 뜻
Q. 그것은 어떤 제약을 주는가? 포인터변수는 항상 4바이트인가?
→ 32바이트 환경에의 포인터는 4바이트, 64바이트 환경에서의 포인터는 8바이트이다.
반응형
'Pwnable > FTZ' 카테고리의 다른 글
[FTZ] level 19 풀이 <BOF> (0) | 2024.01.18 |
---|---|
[FTZ] level 18 풀이 <BOF> (0) | 2024.01.18 |
[FTZ] level 16 풀이 <BOF-함수 덮기> (0) | 2024.01.18 |
[FTZ] level 15 풀이 <BOF-포인터> (0) | 2024.01.18 |
[FTZ] level 14 풀이 <BOF-그냥덮> (0) | 2024.01.18 |