2022. 3. 10. 19:21ㆍSite/FTZ
이번시간에는 level19에 대하여 풀어보겠습니다
공부를 하는 입장이니 틀린게 있어도 양해부탁드리겠습니다
먼저 ls -al을 입력하여 디렉토리과 파일 목록을 확인해보았고 이번에도 attackme 파일이 있네요
hint파일을 열어주었는데 저번레벨보다 상당히 짧은 코드가 있습니다
char 형 buf에 20bytes를 할당하고
gets함수를 통해 buf를 입력받습니다 -> 버퍼오버플로우 취약점발생
그리고 printf함수로 buf를 출력해줍니다
기존것과 다른점은 setreuid를 실행시켜주는 어떠한 것도 없네요
쉘코드를 이용해서 접근을 해야될 것 같습니다
gdb를 통해 attackme를 실행시켜줍니다
main+3에서 40bytes[0x28] 공간을 확보해주는데 위에서 선언한 buf는 20bytes이므로 남은 20bytes가 dummy값인 것 같습니다
main+9에서 [ebp-40]를 eax에 전달하고 push해주고 main+13에서 gets함수를 호출하네요
아마 buf를 gets함수에 인자로 전달되는 것 으로보아서 [ebp-40]이 buf의 주소같습니다
buf가 [ebp-40]인것을 알아냈으니 44bytes[buf+dummy+sfp]까지를 쓰레기값으로 덮은다음
ret의 시작주소에 shell코드를 넣어주면 될것같습니다
환경변수를 등록시켜줍니다.
구글링을 해보니 기존에 저희가 쓰던 25bytes 쉘코드는 setreuid값이 포함이 안된 쉘코드였지만
41bytes 쉘코드에는 (setreuid(geteuid(), getreuid())가 포함되어있다고 합니다
cf)권한변경종류setuid : 프로세스 RUID, EUID, SUID변경, root아아니면 EUID만 가능seteuid : 프로세스 EUID변경setreuid : 프로세스 RUID, EUID변경getuid : 프로세스RUID반환geteuid : 프로세스 EUID반환
getenv를 통해 SHELLCODE의 주소값을 얻을수있게 shell소스파일을 만든 다음
gcc를 통해 프로그램파일로 컴파일해줍니다
확인해 보니 잘 생성되었네요
shell을 실행시켜준다음 쉘주소값을 얻어와보니 0xbffffdb4입니다
buf[20bytes] + dummy[20bytes] + sfp[4bytes]를 쓰레기 값으로 채워준 다음 ret의 자리에 0xbffffdb4을 넣어줍니다
cf) 위문제를 RTL(return to library) chaining을 이용해서 푸는 방법도 있던데 이부분은 추가로 공부해서 올리도록하겠습니다
다음시간에는 level20을 풀어보겠습니다
'Site > FTZ' 카테고리의 다른 글
FTZ level20 (0) | 2022.03.13 |
---|---|
FTZ level18 (0) | 2022.03.10 |
FTZ level17 (0) | 2022.03.09 |
FTZ level16 (0) | 2022.03.09 |
FTZ level15 (0) | 2022.03.09 |