해커스쿨 L.O.B level 1 [gate]를 시작한다.
F.T.Z에서와같이 어떤 파일이 있는지 확인하고 힌트가 될만한 파일을 읽어본다.
파일이 두 개 있다. F.T.Z에서 해왔던 대로 코드를 열어서 분석해야 한다.
주석은 간단한 힌트 같은 느낌이고 코드를 보면 F.T.Z 난이도와 비슷한 문제다.
strcpy는 복사할 때 크기를 검사하지 않기 때문에 BOF에 취약하다고 F.T.Z level 11, level 13에 나왔다.
gdb를 확인해 본다. 이때 gremlin.c는 gate의 권한이지만 gremlin 실행파일은 gremlin의 권한이다.
gdb로 디스어셈블을 할 수는 있지만 gdb에서 r 명령어로 쓰려고 하면 권한 오류가 난다.
그러므로 r 명령어를 쓰려면 cp 명령어로 gate 권한의 파일로 복사해서 사용하면 된다.
gdb를 보면 0x100(256)byte 확보하고 strcpy 함수에서까지 ebp가 256이다. 그렇다면 이 사이에 더미가 없다는 뜻이다.
이 문제는 정말 F.T.Z에 있어도 될만한 난이도의 문제다.
변수 사이에 더미도 없고 크게 어려운 코드도 없다.
그렇다면 간단하게 생각할 수 있다. 셸 코드를 환경변수에 넣어주고 셸 코드 주소를 getenv 함수로 찾아서 그 주소에 공격하면 된다.
문제 풀이 전에 공격 실패 사례들을 알려주려고 한다.
여기서 F.T.Z level 11에서 처음 썼던 eggshell을 생각할 수 있는데 어떤 이유에서인지 eggshell을 사용해서 주소를 얻어오면 공격이 이루어지지 않는 걸 확인했다. 이것 때문에 하루가 없어졌다.
eggshell로 되지 않는다면 export로 셸 코드만 넣는 방법이 있다. 기본적으로 25byte 셸 코드를 사용한다.
그런데 여기서 또 무슨 오류가 있는지 25byte 셸 코드를 export로 넣어주면 공격이 이루어지지 않았다.
왜 안되는지 짜증이 난 상태로 검색을 해보다가 야무미르님의 블로그에서 25byte 셸 코드가 안된다는 것을 알게 되었다.
그래서 eggshell에서 쓴 셸 코드만 가져와서 export로 넣어서 공격했더니 아주 간단하게 공격이 이루어졌고, 41byte 셸 코드도 공격이 이루어졌다.
L.O.B에서는 eggshell을 사용하면 공격이 안 될 것 느낌을 하루 동안 받았으므로 L.O.B에서는 사용하지 않고 export로 사용할 예정이다.
다시 문제 풀이로 넘어간다.

export로 EGG라는 환경변수를 넣어준다. 이 셸 코드는 eggshell에서 쓰던 코드를 가져온 것이다.
export의 기본값 "export [변수명]=[환경변수 값]" 이다. 이때 변수명과 환경변수 값 사이에 "="는 띄어쓰기하면 데이터로 인식하여 오류가 나기 때문에 띄어쓰기하면 안 된다.
환경변수를 등록했으면 환경변수 주소를 알려주는 getenv를 작성한다.

getenv를 실행해서 주소를 알아본다.

주소를 알았고 스택의 상황을 알았으니 공격하면 된다. 스택을 도식화하면 이렇게 된다.
char buffer[256] 256byte |
SFP 4byte |
RET 4byte |
dummy도 없이 간단하다. SFP까지 BOF를 해야 하므로 260byte의 BOF를 일으키면 된다.

공격하게 되면 gremlin의 셸이 실행된다. 여기서는 F.T.Z에서처럼 setreuid 함수도 없고 setreuid가 들어간 셸 코드가 아닌데 셸이 나오는 건 실행파일이 gremlin의 권한, 그룹권한을 다 가지고 있어서 나오는 것 같다.
정확하게 아시는 분을 알려주시면 감사하겠습니다.
'System Hacking > 해커스쿨 L.O.B Hacking Zone' 카테고리의 다른 글
해커스쿨 L.O.B level 6 [wolfman] (0) | 2020.05.25 |
---|---|
해커스쿨 L.O.B level 5 [orc] (0) | 2020.05.21 |
해커스쿨 L.O.B level 4 [goblin] (0) | 2020.05.18 |
해커스쿨 L.O.B level 3 [cobolt] (0) | 2020.05.17 |
해커스쿨 L.O.B level 2 [gremlin] (0) | 2020.05.16 |
댓글