ftz.hackershool.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 12월 1 20:51 tmp |
|
> program 디렉토리에 접근 할 수 있는 사용자가 root 사용자 뿐이다.
> root 사용자를 이용해서 접근해보았다.
[root@ftz program]# file level10
|
level10: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped |
|
[root@ftz program]# gdb level10
|
GNU gdb Red Hat Linux (5.3post-0.20021129.18rh) Copyright 2003 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"... (gdb) disas main Dump of assembler code for function main: 0x08048470 <main+0>: push %ebp 0x08048471 <main+1>: mov %esp,%ebp 0x08048473 <main+3>: sub $0x8,%esp 0x08048476 <main+6>: sub $0x4,%esp 0x08048479 <main+9>: push $0x3b6 0x0804847e <main+14>: push $0x404 0x08048483 <main+19>: push $0x1d6a 0x08048488 <main+24>: call 0x804832c <shmget> 0x0804848d <main+29>: add $0x10,%esp 0x08048490 <main+32>: mov %eax,%eax 0x08048492 <main+34>: mov %eax,0x80496d0 0x08048497 <main+39>: sub $0x4,%esp 0x0804849a <main+42>: push $0x0 0x0804849c <main+44>: push $0x0 0x0804849e <main+46>: pushl 0x80496d0 0x080484a4 <main+52>: call 0x804834c <shmat> 0x080484a9 <main+57>: add $0x10,%esp 0x080484ac <main+60>: mov %eax,0x80496cc 0x080484b1 <main+65>: sub $0x8,%esp 0x080484b4 <main+68>: push $0x8048560 0x080484b9 <main+73>: pushl 0x80496cc 0x080484bf <main+79>: call 0x804835c <strcpy> ---Type <return> to continue, or q <return> to quit--- 0x080484c4 <main+84>: add $0x10,%esp 0x080484c7 <main+87>: leave 0x080484c8 <main+88>: ret 0x080484c9 <main+89>: lea 0x0(%esi),%esi 0x080484cc <main+92>: nop 0x080484cd <main+93>: nop 0x080484ce <main+94>: nop 0x080484cf <main+95>: nop End of assembler dump. |
|
> level11 암호를 얻기위해 작성한 코드와 같은 함수들이 사용되었다.
|
0x08048479 <main+9>: push $0x3b6 OCT(666) 0x0804847e <main+14>: push $0x404 DEC(1028) 0x08048483 <main+19>: push $0x1d6a DEC(7530) 0x08048488 <main+24>: call 0x804832c <shmget> x0804848d <main+29>: add $0x10,%esp 0x08048490 <main+32>: mov %eax,%eax 0x08048492 <main+34>: mov %eax,0x80496d0 (gdb) x/s 0x80496d0 0x80496d0 <shmid>: "" |
|
int shmget(key_t key, int size, int shmflg);
>key -> 7530 size -> 1028 shmflg -> 666
>반환된 ID는 shmid 에 저장된다.
|
0x0804849a <main+42>: push $0x0 0x0804849c <main+44>: push $0x0 0x0804849e <main+46>: pushl 0x80496d0 0x080484a4 <main+52>: call 0x804834c <shmat> 0x080484a9 <main+57>: add $0x10,%esp 0x080484ac <main+60>: mov %eax,0x80496cc (gdb) x/x 0x80496d0 0x80496d0 <shmid>: 0x00000000 (gdb) x/x 0x80496cc 0x80496cc <text>: 0x00000000 |
|
void *shmat(int shmid, const void *shmaddr, int shmflg
> shmget에서 리턴받은 shmid를 받아서 넣어준다. 나머지 인자는 0
( 프로그램이 실행되지 않았으므로 shmid 값은 0으로 나온다. )
> text로 연결 된 것 같다.
|
0x080484b4 <main+68>: push $0x8048560 0x080484b9 <main+73>: pushl 0x80496cc 0x080484bf <main+79>: call 0x804835c <strcpy> (gdb) x/x 0x80496cc 0x80496cc <text>: 0x00000000 (gdb) x/s 0x8048560 0x8048560 <_IO_stdin_used+28>: "멍멍: level11의 패스워드는?\n구타: what!@#$?\n" |
|
char * strcpy( char *dest, const char *src);
> 메모리로 연결된 text 에 다음과 같은 글을 복사한다.
- 의사코드
|
#include <sys/ipc.h> #include <sys/shm.h> #include <string.h> int main() { int shmid; char *text; shmid = shmget(7530,1028,666); text = shmat(shmid,0,0); strcpy(text,"멍멍: level11의 패스워드는?\n구타: what!@#$?\n"); } |
|
> 정상적으로 잘 동작한다.
> 메모리를 사용하면 shmdt()를 통해 메모리를 반환해야 하지만 문제를 풀기 위해서는 계속 있어야 하기 때문에 적지 않은 거 같다.
( 실제 사용하려면 반환해야 한다. )
[참고]
shmid = shmget((ket_t)7530, 1038, 0666 | IPC_CREATE);
text = shmat(shmid, (void *)0, 0);
> 결국 같은 의미 ( 그냥 숫자를 넣어도 똑같다. )
'Security > 리버싱' 카테고리의 다른 글
쉘코드 (shellcode) 만들기 (1) | 2017.12.04 |
---|---|
포맷스트링 버그 (Format String Bug) (0) | 2017.12.01 |
Level 10 문제 해결 (공유 메모리 해킹) (0) | 2017.12.01 |
Level9 응용 (스크립트로 반복되는 문자 입력) (0) | 2017.11.30 |
Level9 문제 해결 (0) | 2017.11.30 |