FTZ level19

2022. 3. 10. 19:21Site/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을 풀어보겠습니다

 

참고 : https://m.blog.naver.com/zzffgg/220661641930

'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