attackme의 코드를 살펴보면, shell함수가 없는 것을 확인하실 수 있습니다.
그렇기에 환경변수에 쉘코드를 넣고 그 쉘코드의 주소 값을 메인함수의 리턴 값 (call함수가 호출하는 값) 으로 받아오면 됩니다.
메인함수를 들여다보니, call함수 초기화를 ebp-16에서 해주고 fgets함수로 56바이트를 받습니다.
이는 40바이트의 쓸모없는 값을 채워주고 쉘코드를 넣은 환경변수의 주소를 채워주면 된다는 뜻 입니다.
이렇게 환경변수를 만들어 줍니다.
환경변수의 주소를 구하는 코드입니다.
getenv()함수로 얻어오는 주소의 오차범위를 좀 더 줄이기 위한 코드입니다.
주소를 확인해줍니다.
쓸모 없는 값으로 40바이트를 채워준 뒤 구한 주소 값을 넣어 shell을 얻었습니다.
'Security > 해커스쿨_FTZ' 카테고리의 다른 글
[해커스쿨_FTZ] level19 (0) | 2018.10.07 |
---|---|
[해커스쿨_FTZ] level18 (0) | 2018.10.07 |
[해커스쿨_FTZ] level16 (0) | 2018.10.07 |
[해커스쿨_FTZ] level13 (0) | 2018.10.07 |
[해커스쿨_FTZ] level12 (0) | 2018.10.05 |