hint를 열어보자!
이 코드는 사용자가 입력한 문자열을 똑같이 출력하는 코드이다.
gets는 입력받는 문자열에 제한이 없기때문에 저기서 문제가 발생할것
같다.
gdb로 한번 뜯어보자!
<main+3>에서 esp에 0x108(264)만큼 공간을 할당해 주었고 그 밑에
<main+9>에서 esp에 0x8(8)만큼의 dummy값이 들어가 있다.
그러면 264-8인 256이 str의 공간이고 8만큼의 dummy 그리고 4만큼의 spf를 지나서
4만큼의 ret이 나온다.
따라서 256+8+4 만큼인 268을 임의의 값을 채워주고 쉘 주소를 입력해서 ret값을 변조
시킬 수 있다.
tmp로 가서 쉘코드를 환경변수에 등록한다.
getenv함수를 이용하여EGG라는 환경변수의 주소 값을 가져오는 코드 작성
실행을 해보니 환경변수의 주솟값은 0xbffffc91이라는것을 알 수 있다.
그래서 이렇게 공격을 하였더니 실패하였다.
아마도 이미 컴파일을 돌린 상패라서 명령어가 먹히지 않는것 같다.
그래서 |를 이용하여 왼쪽 출력값을 오른쪽 프로그램으로 넘겨서 실행시켜보았다.
이번에는 복사가 된것같지 않으니 id를 알아보자
유저 아이디가 level13이 되었다!
my-pass를 통해 password를 알아보자!
성공!
'Write-Up > FTZ(Write-Up)' 카테고리의 다른 글
[FTZ] level14 (Write-Up) (0) | 2019.07.09 |
---|---|
[FTZ] level13 (Write-Up) (0) | 2019.06.19 |
[FTZ] level11 (Write-Up) (0) | 2019.05.31 |
[FTZ] level10 (Write-Up) (0) | 2019.05.24 |
[FTZ] level9 (Write-Up) (0) | 2019.05.24 |