http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=8592 [º¹»ç]
#include <stdio.h>
#include <string.h>
int main(void)
{
char password[32];
int admin = 0;
printf("Enter password: ");
fgets(password,50,stdin);
if(strncmp(password, "SuPeRsEcUrEPaSsWoRd123", strlen("SuPeRsEcUrEPaSsWoRd123")) == 0)
{
printf("Correct Password!\n");
}
else
{
printf("Incorrect Password!\n");
return 0;
}
if(admin)
{
printf("INTIGRITI{b4bypwn_9cdfb439c7876e703e307864c9167a15}\n");
}else{
printf("Are you sure you are admin? o.O\n");
}
return 0;
}
========================================================
¼Ò½º¸¦ º¸´Ï º°·Î ¾î·ÆÁö ¾Ê´Â ¹®Á¦¶ó°í ÆǴܵǾú´Ù. (¸öÇ®±â ¹®Á¦¶ó¼ ±×·±°¡?)
checksec·Î ctfÆÄÀÏÀ» º¸´Ï ½ºÅà ī³ª¸®µµ ¾ø¾ú´Ù.
º¸Åë »ó½ÄÀûÀ¸·Î »ý°¢Çغ¸ÀÚ¸é CÄڵ忡¼ Áö¿ªº¯¼ö°¡ À§¿¡¼ ¾Æ·¡·Î ³»·Á¿Ã ¶§
½ºÅà ¸Þ¸ð¸®ÀÇ ³ôÀº ÁÖ¼Ò¿¡¼ ³·Àº ÁÖ¼Ò·Î pushµÇ¸é¼ ½×ÀÌ°Ô µÈ´Ù.
ÇÏÁö¸¸ ÄÄÆÄÀÏ·¯¿¡ µû¶ó Áö¿ªº¯¼öÀÇ À§¿¡¼ ¾Æ·¡·Î ³»·Á¿Ã ¶§
¹Ýµå½Ã ½ºÅà ¸Þ¸ð¸®ÀÇ ³ôÀº ÁÖ¼Ò¿¡¼ ³·Àº ÁÖ¼Ò·Î ÇÒ´çµÈ´Ù´Â º¸ÀåÀº
¾îµð¿¡µµ ¾ø´Ü °É ¸í½ÉÇØ¾ß µÈ´Ù.
[ Ä¿³Î ¿µ¿ª ] ³ôÀº ÁÖ¼Ò
[ ½ºÅà ¿µ¿ª ]
[ °øÀ¯ ¶óÀ̺귯¸® ]
[ Èü ¿µ¿ª ]
[ µ¥ÀÌÅÍ ¿µ¿ª ]
[ ÅؽºÆ® ¿µ¿ª ] ³·Àº ÁÖ¼Ò
¸Þ¸ð¸® °ø°£Àº(RAM) Å©°Ô ÄÚµå(Code), µ¥ÀÌÅÍ(Data), ½ºÅÃ(Stack), Èü(Heap) ¿µ¿ªÀ¸·Î ³ª´¶´Ù.
ÄÚµå(Code) ¿µ¿ª: ½ÇÇàÇÒ ÇÁ·Î±×·¥ÀÇ ÄÚµå
µ¥ÀÌÅÍ(Data) ¿µ¿ª: Àü¿ª º¯¼ö, Á¤Àû º¯¼ö
Èü(Heap) ¿µ¿ª: ·±Å¸ÀÓ ½Ã Å©±â°¡ °áÁ¤µÊ(»ç¿ëÀÚÀÇ µ¿Àû ÇÒ´ç)
½ºÅÃ(Stack) ¿µ¿ª: ÄÄÆÄÀÏ Å¸ÀÓ¿¡ Å©±â°¡ °áÁ¤µÊ
ÄÚµå(Code) ¿µ¿ª (ȤÀº ÅؽºÆ® ¿µ¿ª)
ÀÛ¼ºÇÑ ¼Ò½ºÄڵ尡 ÀúÀåµÇ´Â ¿µ¿ªÀ¸·Î ÅؽºÆ® ¿µ¿ªÀ̶ó°íµµ ºÎ¸¥´Ù.
±â°è¾î ÇüÅÂ(0,1)·Î ÀúÀåÇÑ´Ù.
½ÇÇà ÆÄÀÏÀ» ±¸¼ºÇÏ´Â ¸í·É¾îµéÀÌ ¿Ã¶ó°¡´Â ¸Þ¸ð¸® ¿µ¿ªÀ¸·Î ÇÔ¼ö, Á¦¾î¹®, »ó¼ö µîÀÌ ¿©±â¿¡ ÁöÁ¤µÈ´Ù.
CPU´Â ÄÚµå ¿µ¿ª¿¡ ÀúÀåµÈ ¸í·É¾îµéÀ» Çϳª¾¿ °¡Á®°¡¼ ½ÇÇàÇÑ´Ù.
µ¥ÀÌÅÍ(Data) ¿µ¿ª
Àü¿ª º¯¼ö¿Í Á¤Àû º¯¼ö(static)°¡ ÇÒ´çµÇ´Â ¿µ¿ªÀÌ´Ù.
¸ÞÀÎ ÇÔ¼ö Àü¿¡ ¼±¾ðµÇ¾î ÇÁ·Î±×·¥ÀÇ ½ÃÀÛ°ú µ¿½Ã¿¡ ÇÒ´çµÇ°í ÇÁ·Î±×·¥ÀÌ Á¾·áµÅ¾ß ¸Þ¸ð¸®°¡ ¼Ò¸êµÈ´Ù.
Èü(Heap) ¿µ¿ª
ÀÌ °ø°£¿¡ ¸Þ¸ð¸® ÇÒ´çÇÏ´Â °ÍÀ» µ¿Àû ÇÒ´ç(Dynamic Memory Allocation) À̶ó°í ºÎ¸¥´Ù.
»ç¿ëÀÚ¿¡ ÀÇÇØ ¸Þ¸ð¸® °ø°£ÀÌ µ¿ÀûÀ¸·Î ÇÒ´çµÇ°í ÇØÁ¦µÈ´Ù.
ÀÀ¿ë ÇÁ·Î±×·¥ÀÌ Á¾·áµÉ ¶§±îÁö ¸Þ¸ð¸®°¡ À¯ÁöµÇ±â ¶§¹®¿¡ »ç¿ëÇÏ°í ³ ÈÄ ¹Ýµå½Ã ¸Å¸ð¸® ÇØÁ¦¸¦ ÇØÁà¾ß ÇÑ´Ù.(memory leak ¹ß»ý), Java¿¡¼´Â °¡ºñÁö Ä÷ºÅÍ°¡ ÀÚµ¿À¸·Î ÇØÁ¦ÇÑ´Ù
¿µ¿ª Áß À¯ÀÏÇÏ°Ô ·±Å¸Àӽà ũ±â°¡ °áÁ¤
ÂüÁ¶Çü(Reference Type) µ¥ÀÌÅÍ Å¸ÀÔÀ» °®´Â °´Ã¼(ÀνºÅϽº), ¹è¿ µîÀÌ ÀúÀåµÇ´Â °ø°£,
´Ü Èü ¿µ¿ª¿¡ ÀÖ´Â ¿ÀºêÁ§Æ®µéÀ» °¡¸®Å°´Â ·¹ÆÛ·±½º º¯¼ö´Â ½ºÅÿ¡ ÀûÀç
¸Þ¸ð¸®ÀÇ ³·Àº ÁÖ¼ÒºÎÅÍ ÇÒ´çµÇ´Â ¼±ÀÔ¼±Ãâ(FIFO) ±¸Á¶
½ºÅÃ(Stack) ¿µ¿ª
ÇÁ·Î±×·¥ÀÌ ÀÚµ¿À¸·Î »ç¿ëÇÏ´Â Àӽà ¸Þ¸ð¸® ¿µ¿ª
ÇÔ¼ö È£Ã⠽à »ý¼ºµÇ´Â Áö¿ª º¯¼ö¿Í ¸Å°³ º¯¼ö°¡ ÀúÀåµÇ´Â ¿µ¿ª
ÇÔ¼ö È£ÃâÀÌ ¿Ï·áµÇ¸é ÀúÀåµÈ ¸Þ¸ð¸®µµ ÇØÁ¦µÈ´Ù
¸Þ¸ð¸®ÀÇ ³ôÀº ÁÖ¼ÒºÎÅÍ ÇÒ´çµÇ´Â ÈÄÀÔ¼±Ãâ(LIFO) ±¸Á¶
½ºÅÃÀº ³ôÀº ÁÖ¼Ò¿¡¼ ³·Àº ÁÖ¼Ò·Î ÇÒ´çµÇ°í
ÈüÀº ³·Àº ÁÖ¼Ò¿¡¼ ³ôÀº ÁÖ¼Ò·Î ÇÒ´çµÈ´Ù.
±×¸®°í ±× »çÀÌ¿£ °øÀ¯ ¶óÀ̺귯¸® ¿µ¿ªÀÌ Á¸ÀçÇÑ´Ù.
±Ùº»ÀûÀ¸·Î ¿Ö ±×·²±î?
½ºÅú¸´Ù ³ôÀº ÁÖ¼Ò°¡ Ä¿³Î ¿µ¿ªÀÌ´Ù.
ÇÏÁö¸¸ ½ºÅÃÀÌ ³ôÀº ÁÖ¼Ò¿¡¼ ³·Àº ÁÖ¼Ò·Î ÇÒ´çµÇ¸é
Ä¿³Î ¿µ¿ª¿¡ ħ¹üÇØÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù.
¶ÇÇÑ Èü°ú ½ºÅÃÀº ¸¶ÁÖº¸°í ¼·Î¸¦ ÇâÇØ ÀÚ¶ó¸é¼µµ
±× »çÀÌ¿¡ °øÀ¯ ¶óÀ̺귯¸® ¿µ¿ªÀÌ ÀÖ¾î¼
¼·Î ħ¹üÇϱâ Èûµé°Ú±Ý ¾ÆÅ°ÅØó°¡ ¼³°èµÇ¾î ÀÖ´Ù.
¼·ÐÀº ¿©±â±îÁö ÇÏ°í...
ÀÏ´Ü ¹®Á¦ ÆÄÀÏÀº checksec¿¡ ÀÇÇØ È®ÀÎÇÑ °á°ú
½ºÅà ī³ª¸®°¡ ¹ß°ßµÇÁö ¾Ê¾Ò´Ù.
ka0r1@ka0r1-To-Be-Filled-By-O-E-M:~$ checksec --file=ctf
[*] '/home/ka0r1/ctf'
Arch: amd64-64-little
RELRO: Full RELRO
Stack: No canary found
NX: NX enabled
PIE: PIE enabled
SHSTK: Enabled
IBT: Enabled
Stripped: No
¹®Á¦¸¦ pwndbg·Î ºÐ¼®Çغ¸°Ú´Ù.
pwndbg> set disassembly intel
pwndbg> disassemble main
Dump of assembler code for function main:
0x00000000000011a9 <+0>: endbr64
0x00000000000011ad <+4>: push rbp
0x00000000000011ae <+5>: mov rbp,rsp
0x00000000000011b1 <+8>: sub rsp,0x30
0x00000000000011b5 <+12>: mov DWORD PTR [rbp-0x4],0x0
0x00000000000011bc <+19>: lea rax,[rip+0xe45] # 0x2008
0x00000000000011c3 <+26>: mov rdi,rax
0x00000000000011c6 <+29>: mov eax,0x0
0x00000000000011cb <+34>: call 0x10a0 <printf@plt>
0x00000000000011d0 <+39>: mov rdx,QWORD PTR [rip+0x2e39] # 0x4010 <stdin@GLIBC_2.2.5>
0x00000000000011d7 <+46>: lea rax,[rbp-0x30]
0x00000000000011db <+50>: mov esi,0x32
0x00000000000011e0 <+55>: mov rdi,rax
0x00000000000011e3 <+58>: call 0x10b0 <fgets@plt>
0x00000000000011e8 <+63>: lea rax,[rbp-0x30]
0x00000000000011ec <+67>: mov edx,0x16
0x00000000000011f1 <+72>: lea rcx,[rip+0xe21] # 0x2019
0x00000000000011f8 <+79>: mov rsi,rcx
0x00000000000011fb <+82>: mov rdi,rax
0x00000000000011fe <+85>: call 0x1080 <strncmp@plt>
0x0000000000001203 <+90>: test eax,eax
0x0000000000001205 <+92>: jne 0x121e <main+117>
0x0000000000001207 <+94>: lea rax,[rip+0xe22] # 0x2030
0x000000000000120e <+101>: mov rdi,rax
0x0000000000001211 <+104>: call 0x1090 <puts@plt>
0x0000000000001216 <+109>: cmp DWORD PTR [rbp-0x4],0x0
0x000000000000121a <+113>: je 0x1245 <main+156>
0x000000000000121c <+115>: jmp 0x1234 <main+139>
0x000000000000121e <+117>: lea rax,[rip+0xe1d] # 0x2042
0x0000000000001225 <+124>: mov rdi,rax
0x0000000000001228 <+127>: call 0x1090 <puts@plt>
0x000000000000122d <+132>: mov eax,0x0
0x0000000000001232 <+137>: jmp 0x1259 <main+176>
0x0000000000001234 <+139>: lea rax,[rip+0xe1d] # 0x2058
0x000000000000123b <+146>: mov rdi,rax
0x000000000000123e <+149>: call 0x1090 <puts@plt>
0x0000000000001243 <+154>: jmp 0x1254 <main+171>
0x0000000000001245 <+156>: lea rax,[rip+0xe44] # 0x2090
0x000000000000124c <+163>: mov rdi,rax
0x000000000000124f <+166>: call 0x1090 <puts@plt>
0x0000000000001254 <+171>: mov eax,0x0
0x0000000000001259 <+176>: leave
0x000000000000125a <+177>: ret
¿©±â¼ password[32]°¡ adminÀ» µ¤¾î¾º¿öÁú ¼ö ÀÖ´Ù´Â ¾î¼Àºí¸® Äڵ带 ºÐ¼®Çϸé¼
¾î¶»°Ô ¾Ë ¼ö ÀÖÀ»±î? ±×°Ç ¾Æ·¡¿Í °°´Ù.
0x00000000000011ae <+5>: mov rbp,rsp
0x00000000000011b1 <+8>: sub rsp,0x30 ; ½ºÅà °ø°£ 0x30¸¸Å ÇÒ´ç
0x00000000000011b5 <+12>: mov DWORD PTR [rbp-0x4],0x0 ; admin ÃʱâÈ
0x00000000000011d7 <+46>: lea rax,[rbp-0x30] ; password ¹öÆÛ ½ÃÀÛ À§Ä¡
$./ctf
Enter password: SuPeRsEcUrEPaSsWoRd123AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
Correct Password!
INTIGRITI{b4bypwn_9cdfb439c7876e703e307864c9167a15}
- ³¡ - |
Hit : 207 Date : 2024/12/29 01:18
|