www.hackerschool.org 를 이용하여 공부한다.
목적 : signal() 함수의 취약점
시그널(signal)
> 하나의 프로세스(Process)가 다른 프로세스(Process)에게 보내는 비동기적 알림 이벤트 메시지
# kill [ -1 | -2 | -9 | -15 ] PID PID
level6 사용자로 로그인
ID : level6
PASS : what the hell
<ENTER>
>> 1, 2, 3 번 모두 입력해도 몇초 후 접속이 끊어진다.
예전에 PC통신 해킹 할 시 가장 많이 썼던 방법 2가지
1. 세미콜론을 사용하는 방법
> 결국에는 쉘이 해석했었다. 로그인창에서 /etc/passwd를 빼내서 해킹
2. 인터럽트를 쓰는 방법. CTRL + C
(windows) 원본 운영체제
cmd 창 열기.
BBS 화면은 가짜 모듈인 것 같다. 이 메뉴를 우회할 수 있는 무언가가 있을 것 같다.
대신 우회할 수 있는 시점이 어디인가가 중요하다.
level6 사용자로 새로 로그인
-> IP/PASS : level6 / what the hell
<CTRL + D>를 누르면 접속이 끊어진다.
level6 사용자로 새로 로그인
-> IP/PASS : level6 / what the hell
>> 이 시점에서 <CTRL + C>를 누르니 프롬프트가 열렸다.
>> ( ? ) 어떻게 로그인 하자마자 프로그램이 실행 되었을까?
$ id
$ my-pass
$ ls -al
$ cat hint
$ file tn
$ cat .bashrc
$ cat password
사용자 로그인 → 환경파일(.bashrc(./tn)) → tn 프로그램 실행(번호) → 천리안(telnet)
○ 의사코드 생성
$ gdb tn
(gdb) disas main
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | Dump of assembler code for function main: 0x080484f8 <main+0>: push %ebp 0x080484f9 <main+1>: mov %esp,%ebp 0x080484fb <main+3>: sub $0x8,%esp 0x080484fe <main+6>: sub $0xc,%esp 0x08048501 <main+9>: push $0x80486f2 0x08048506 <main+14>: call 0x8048384 <system> 0x0804850b <main+19>: add $0x10,%esp 0x0804850e <main+22>: call 0x8048354 <getchar> 0x08048513 <main+27>: sub $0xc,%esp 0x08048516 <main+30>: push $0x80486fb 0x0804851b <main+35>: call 0x8048384 <system> 0x08048520 <main+40>: add $0x10,%esp 0x08048523 <main+43>: sub $0xc,%esp 0x08048526 <main+46>: push $0x8048720 0x0804852b <main+51>: call 0x80483c4 <printf> 0x08048530 <main+56>: add $0x10,%esp 0x08048533 <main+59>: sub $0xc,%esp 0x08048536 <main+62>: push $0x8048760 0x0804853b <main+67>: call 0x80483c4 <printf> 0x08048540 <main+72>: add $0x10,%esp 0x08048543 <main+75>: sub $0xc,%esp 0x08048546 <main+78>: push $0x80487a0 0x0804854b <main+83>: call 0x80483c4 <printf> 0x08048550 <main+88>: add $0x10,%esp 0x08048553 <main+91>: sub $0xc,%esp 0x08048556 <main+94>: push $0x8048760 0x0804855b <main+99>: call 0x80483c4 <printf> 0x08048560 <main+104>: add $0x10,%esp 0x08048563 <main+107>: sub $0xc,%esp 0x08048566 <main+110>: push $0x8048760 0x0804856b <main+115>: call 0x80483c4 <printf> 0x08048570 <main+120>: add $0x10,%esp 0x08048573 <main+123>: sub $0xc,%esp 0x08048576 <main+126>: push $0x80487e0 0x0804857b <main+131>: call 0x80483c4 <printf> 0x08048580 <main+136>: add $0x10,%esp 0x08048583 <main+139>: sub $0xc,%esp 0x08048586 <main+142>: push $0x8048820 0x0804858b <main+147>: call 0x80483c4 <printf> ---Type <return> to continue, or q <return> to quit--- 0x08048590 <main+152>: add $0x10,%esp 0x08048593 <main+155>: sub $0xc,%esp 0x08048596 <main+158>: push $0x8048760 0x0804859b <main+163>: call 0x80483c4 <printf> 0x080485a0 <main+168>: add $0x10,%esp 0x080485a3 <main+171>: sub $0xc,%esp 0x080485a6 <main+174>: push $0x8048860 0x080485ab <main+179>: call 0x80483c4 <printf> 0x080485b0 <main+184>: add $0x10,%esp 0x080485b3 <main+187>: sub $0x8,%esp 0x080485b6 <main+190>: push $0x80484e0 0x080485bb <main+195>: push $0x2 0x080485bd <main+197>: call 0x8048374 <signal> 0x080485c2 <main+202>: add $0x10,%esp 0x080485c5 <main+205>: sub $0xc,%esp 0x080485c8 <main+208>: push $0x80488a0 0x080485cd <main+213>: call 0x80483c4 <printf> 0x080485d2 <main+218>: add $0x10,%esp 0x080485d5 <main+221>: sub $0x8,%esp 0x080485d8 <main+224>: lea 0xfffffffc(%ebp),%eax 0x080485db <main+227>: push %eax 0x080485dc <main+228>: push $0x80488c3 0x080485e1 <main+233>: call 0x8048394 <scanf> 0x080485e6 <main+238>: add $0x10,%esp 0x080485e9 <main+241>: cmpl $0x1,0xfffffffc(%ebp) 0x080485ed <main+245>: jne 0x80485ff <main+263> 0x080485ef <main+247>: sub $0xc,%esp 0x080485f2 <main+250>: push $0x80488c6 0x080485f7 <main+255>: call 0x8048384 <system> 0x080485fc <main+260>: add $0x10,%esp 0x080485ff <main+263>: cmpl $0x2,0xfffffffc(%ebp) 0x08048603 <main+267>: jne 0x8048615 <main+285> 0x08048605 <main+269>: sub $0xc,%esp 0x08048608 <main+272>: push $0x80488db 0x0804860d <main+277>: call 0x8048384 <system> 0x08048612 <main+282>: add $0x10,%esp 0x08048615 <main+285>: cmpl $0x3,0xfffffffc(%ebp) 0x08048619 <main+289>: jne 0x804862b <main+307> 0x0804861b <main+291>: sub $0xc,%esp 0x0804861e <main+294>: push $0x80488f1 ---Type <return> to continue, or q <return> to quit--- 0x08048623 <main+299>: call 0x8048384 <system> 0x08048628 <main+304>: add $0x10,%esp 0x0804862b <main+307>: cmpl $0x1,0xfffffffc(%ebp) 0x0804862f <main+311>: je 0x804864d <main+341> 0x08048631 <main+313>: cmpl $0x2,0xfffffffc(%ebp) 0x08048635 <main+317>: je 0x804864d <main+341> 0x08048637 <main+319>: cmpl $0x3,0xfffffffc(%ebp) 0x0804863b <main+323>: je 0x804864d <main+341> 0x0804863d <main+325>: sub $0xc,%esp 0x08048640 <main+328>: push $0x8048920 0x08048645 <main+333>: call 0x80483c4 <printf> 0x0804864a <main+338>: add $0x10,%esp 0x0804864d <main+341>: leave 0x0804864e <main+342>: ret 0x0804864f <main+343>: nop End of assembler dump. | cs |
○ 복원된 의사코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | #include <stdio.h> #include <signal.h> void sig_func(int signo) { printf("Can't use ctrl+c\n"); } int main() { char input; int select, i; system("cat hint"); input = getchar(); system("clear"); printf("#####################################\n"); printf("## ##\n"); printf("## 텔넷 접속 서비스 ##\n"); printf("## ##\n"); printf("## 1. 하이텔 2. 나우누리 ##\n"); printf("## 3. 천리안 ##\n"); printf("## ##\n"); printf("#####################################\n"); for(i=1; i<32; i++) { if(i == SIGINT) signal(i, sig_func); else signal(i, SIG_IGN); } printf("\n접속하고 싶은 bbs를 선택하세요 : "); switch(input) { case 1: system("telnet 203.245.15.76"); break; case 2: system("telnet 203.238.129.97"); break; case 3: system("telnet 210.120.128.180"); break; default: if(input !=1 && input !=2 && input !=3) printf("잘못 입력하셨습니다. 접속을 종료합니다.\n"); } return 0; } | cs |
'보안과정 > 리버싱' 카테고리의 다른 글
Level 8 → Level9 (0) | 2017.11.30 |
---|---|
Level 7 → Level 8 (0) | 2017.11.29 |
Level 5 → Level 6 (0) | 2017.11.29 |
Level 4 → Level 5 (0) | 2017.11.28 |
Level 3 → Level 4 (0) | 2017.11.28 |