[그림 1] 문제
Demo 문제에서는 CTF 자체 서버에서 /home/demo라는 디렉토리에 shell이 있는데 그것을 크랙해줄 수 있냐고 말하고 있습니다.
그렇다면 shell로 들어가보도록 해야 겠습니다.
[그림 2] /home/demo에 들어 있는 파일들
demo 디렉토리에는 demo라는 실행파일, demo.c, flag.txt, Makefile이 쭈루룩 나열되어 있습니다.
다행히 others 권한 부분에 read권한이 demo.c에 있는 것으로 보아 cat 명령어로 볼 수 있을 것 같습니다.
demo.c를 살펴보도록 합시다.
[그림 3] demo.c 소스코드
main보다는 먼저 void 형태의 함수인 give_shell()이 눈에 띕니다.
give_shell() 함수는 딱 보니 /bin/sh을 주도록 하는 것 같습니다.
그리고 main에서는 env에서 '_'의 끝이 icesh이라면 give_shell이라는 함수를 실행한다고 합니다.
그렇다면 env를 통해 환경변수를 보도록 합시다.
[그림 4] env 명령어로 본 환경변수
환경변수 이름 중 _ 라고 되어 있는 부분을 살펴보면 /usr/bin/env입니다.
/usr/bin/env의 끝 부분이 env로 되어 있습니다. 그리고 strncmp이므로 6글자씩 비교(null문자 포함)이지만 basename이기 때문에 끝의 글자가 icesh이어야 제대로 비교가 될 수 있다는 것을 알 수 있습니다.
따라서 우리는 /usr/bin/env를 바꿀 방법을 찾아보도록 합시다.
환경변수 _는 우리가 사용한 명령어의 위치를 말해주는 것 같습니다.
즉, 프로그램을 실행시키면 env에 실행한 파일의 PWD가 들어가게 된다는 것입니다.
같은 방법으로 env명령어가 아닌 set 명령어로 실행해보고 이를 확인할 수 있었습니다.
[그림 5] set 명령어로 본 환경변수
set 명령어를 사용하니 _환경변수가 /usr/bin/env에서 set으로 바뀐 것을 확인할 수 있습니다.
그렇다면 만약 demo실행파일을 실행시켰을 때, 환경변수 _에는 /home/demo/demo가 들어갈 것입니다.
그럼 우리는 끝에 icesh을 붙이기 위해서는 심볼릭 링크로 접근하는 방법이 있습니다.
심볼릭 링크 만드는 방법은 다음과 같습니다.
ln -s [링킹할 파일 위치] [링크파일의 이름 및 위치]
ln -s /home/demo/demo ~/icesh
[그림 6]은 simbolic link에 대한 실험 내용입니다.
simbol.c의 소스는 다음과 같습니다.(사실 어떤 header 파일을 해야 할 지 몰라서.... 죄다 집어넣었습니다.)
//simbol.c 소스코드 #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <libgen.h> #include <string.h> #include <stdio.h> int main() { printf("simpbolic ==> %s\n", getenv("_")); return 0; }
[그림 6] simbolic link 실험 모습
먼저 simbol.c 코딩하고 testest라는 심볼링 링크를 만들었습니다. 심볼링 링크는 [그림 6]과 같이 나타나있습니다.
getenv 함수를 통해 심볼링 링크로 실행했을 떄와 그냥 실행했을 때의 차이를 나타내보았습니다.
basename은 심볼링 링크가 뜨는 것을 확인할 수 있습니다.
그렇다면 이제 icesh이라는 심볼링 링크로 만들어 /home/demo/demo파일로 연결하도록 합시다.
[그림 7] icesh 심볼링 링크 생성
이제 icesh이라는 심볼링 링크를 실행하면 ~/icesh이 되며, 곧 basename이 icesh이 됩니다.
[그림 8] 문제 해결
'CTF > 2016_IceCTF' 카테고리의 다른 글
2016_IceCTF_Stage02_Kitty(70pt) (0) | 2016.09.04 |
---|---|
2016_IceCTF_Stage03_Corrupt Transmission(50pt) (0) | 2016.09.04 |
2016_IceCTF_Stage03_Audio(50pt) (0) | 2016.09.04 |
2016_IceCTF_Stage02_Miners(65pt) (0) | 2016.09.04 |
2016_IceCTF_Stage02_RSA(60pt) (0) | 2016.09.01 |
2016_IceCTF_Stage02_RSA?(50pt) (0) | 2016.08.26 |
2016_IceCTF_Stage02_Flag Storage(50pt) (0) | 2016.08.26 |
2016_IceCTF_Stage02_Toke(45pt) (0) | 2016.08.26 |