-
LEVEL 01 gate write-upSystem hacking training/Hackerschool LOB 2018. 3. 11. 17:52
LOB 첫 번째 문제를 풀었다.
문제풀이에 앞서
Redhat Linux 6.2는 기본적으로 bash의 버전이 1.14버전이다.
이 버전에서는 0xff를 인식하지 못하는 버그가 있다고 한다.
0xff 가 0x00과 같은 역할을 하게된다.
따라서 중간에 0xff가 들어가게되면 strcpy()같은 문자열을 복사하는 함수에서 복사를 하는 도중 끊기게 된다.
그렇지만 bash2는 이 버그를 고친 2.3버전이기 때문에 bash2를 사용하여야 Payload에 0xff를 넣을 수 있다.
이러한 점을 알고있어야한다.
따라서 /bin/bash 대신 /bin/bash2를 사용하여 문제를 풀이하였다.
ID : gate / PW : gate 로 로그인을 하면 gremlin 이라는 바이너리와 gremlin.c 라는 c 파일이 존재한다.
gremlin.c 파일을 열어보면 다음과 같이 strcpy()의 사용으로 bof가 일어날 수 있는데
strcpy()는 문자열을 복사해주는 용도로 사용이 되지만 길이를 제한하지 않아 Overflow가 일어날 수 있다.
또한 gremlin이라는 파일에는
이처럼 setuid가 걸려있다.
gremlin 바이너리를 실행시키면 gremlin의 권한을 잠시 빌려 실행을 하기때문에
이 파일을 이용하여 쉘을 띄운다면 gremlin의 권한으로 쉘이 실행된다.
char buf[256]의 위치를 확인하기 위해 gdb로 열어보았다.
sub esp , 0x100 으로 스택에 256byte를 할당해놨다.
스택구조는 이러하다.
| char buf[256] | SFP | RET |
char buf 다음으로 오는 SFP를 덮고, RET에 쉘코드의 주소를 입력하면 쉘을 띄울 수 있다.
이에 따라 먼저 쉘코드를 환경변수에 등록해준다.
그리고 fkillrra 라는 환경변수의 주소를 구하기 위해 c 파일 하나를 만들어준다.
실행을 하게 되면
환경변수의 주소를 구할 수 있고 이 주소를 return address에 덮어주면 shell을 띄울 수 있다.
이상 LOB LEVEL 01 gate의 풀이를 마친다.
반응형'System hacking training > Hackerschool LOB' 카테고리의 다른 글
LEVEL 06 darkelf write-up (0) 2018.03.21 LEVEL 05 wolfman write-up (0) 2018.03.16 LEVEL 04 goblin write-up (0) 2018.03.16 LEVEL 03 cobolt write-up (0) 2018.03.15 LEVEL 02 gremlin write-up (0) 2018.03.15