gets함수의 길이 검증이 없어서 오버플로우가 일어나는 부분이 있다.
아주 간단하게 rtl로 풀려고 했다.
일단 메인함수를 gdb로 열어보고,
system함수의 주소도 찾고,
/bin/sh의 주소도 찾았다.
근데 막상 페이로드를 입력하고 보니 쉘을 얻었는데 level19의 쉘이 따졌다.
정상적이라면 level20의 쉘이 따져야하는데.. 19의 쉘을 땄다. 이것이 왜인고.. 하면
힌트 소스를 보면 setreuid가 없다..
즉 setreuid가 설정이 안된것이다.
그래서 구글링으로 setreuid가 있는 쉘코드를 찾았다.
쉘코드
\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\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
그리고 쉘코드를 환경변수에 등록했다.
등록한 환경변수를 gdb로 어디에 위치했는지 찾았다.
대략 0xbffffbbc쯤 있다.
페이로드를 작성해 쉘을 얻었다.
'Wargame > FTZ' 카테고리의 다른 글
[FTZ] level20@ftz (1) | 2017.11.26 |
---|---|
[FTZ] level18@ftz (0) | 2017.11.26 |
[FTZ] level17@ftz (0) | 2017.11.25 |
[FTZ] level16@ftz (0) | 2017.11.25 |
[FTZ] level15@ftz (0) | 2017.11.23 |