level 19 로그인 후 hint를 본다.
level 18에 비해 코드가 엄청나게 간단해졌다. 그러나 간단해져도 너무 간단해졌다.
사용자를 바꾸는 setreuid 함수까지 없는 간단한 코드가 되어서 level 11에서 만들었던 쉘코드만으로는 해결할 수가 없다. level 11 쉘코드로 실행하면 사용자 변경 없이 그냥 쉘코드가 실행된다.
level 19 hint와 같이 글로 준 hint를 합쳐 생각하면 setreuid를 실행하는 쉘코드를 만들어 이전 쉘코드와 함께 사용하면 된다.
setreuid 쉘코드
사용자 ID를 바꾸는 setreuid 함수의 인자로는 사용자 ID에 해당하는 uid이다. 쉘코드를 만들기 위해서는 얻고 싶은 ID의 uid를 알아야 한다.
level 20의 uid는 3100이다. 인자를 알았으면 쉘코드 실습에서 배웠던 시스템 콜 번호를 알아야 한다.
위 위치에 있는 파일을 열어야 시스템 콜 번호를 볼 수 있다.
이때 setreuid 함수의 시스템 콜 번호는 70이다.
setreuid를 만들기 위한 준비는 끝이 났다.
이 코드를 어셈블리 언어로 작성해 기계어를 봐야 한다.
어셈블리어로 작성하고 분석하면 이렇게 된다.
어셈블리에서는 16진수로 바꿔 작성해야 한다.
objdump로 기계어를 본다.
NULL 코드가 없는 기계어가 잘 만들어졌다.
setreuid의 쉘코드는 "\x31\xc0\xb0\x46\x66\xbb\x1c\x0c\x66\xb9\x1c\x0c\xcd\80"이다.
이 쉘코드를 eggshell에서 만든 쉘코드 앞에 넣어주면 된다.
환경변수에 넣어주는 eggshell 만들 때 shellcode 배열 제일 앞에 setreuid 쉘코드를 넣어주면 된다.
이제 gdb로 스택 구조를 분석해본다.
스택 구조
buf[20] 20byte |
dummy 20byte |
SFP 4byte |
RET 4byte |
스택 구조를 알았으니 공격을 하면 된다.
우선 쉘코드의 주소를 알아온다.
주소까지 알았으니 공격 코드를 입력한다.
SFP까지 BOF를 실행해야 하므로 "A"가 44byte 들어간다.
'System Hacking > 해커스쿨 F.T.Z Hacking Zone' 카테고리의 다른 글
해커스쿨 F.T.Z level 11 FSB(Format String Bug) (0) | 2020.03.03 |
---|---|
해커스쿨 F.T.Z Level 20 (0) | 2020.03.02 |
해커스쿨 F.T.Z Level 18 (0) | 2020.02.29 |
해커스쿨 F.T.Z Level 17 (0) | 2020.02.27 |
해커스쿨 F.T.Z Level 16 (0) | 2020.02.27 |
댓글