wargame ๐Ÿด‍โ˜ ๏ธ write-up/Lord of BOF 11

5. orc → wolfman

์ผ๋‹จ ์–ด๋””์–ด๋””๊ฐ€ ๋‹ฌ๋ผ์กŒ์„์ง€ ์ฝ”๋“œ๋ฅผ ๋ณผ๊นŒ์š” [orc@localhost orc]$ cat -n wolfman.c 1/* 2 The Lord of the BOF : The Fellowship of the BOF 3 - wolfman 4 - egghunter + buffer hunter 5*/ 6 7#include 8#include 9 10extern char **environ; 11 12main(int argc, char *argv[]) 13{ 14char buffer[40]; 15int i; 16 17if(argc < 2){ 18printf("argv error\n"); 19exit(0); 20} 21 22// egghunter 23for(i=0; environ[i]; i++) 24memset(environ..

4. goblin → orc

์•ˆ๋…•ํ•˜์„ธ์š” ์–ด๋Š๋ง 3๋ฒˆ๋ฌธ์ œ๊นŒ์ง€ ํด๋ฆฌ์–ดํ–ˆ๋„ค์š”ใ…Ž ์ €ํฌ๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ bof๊ณต๊ฒฉ์„ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. 3๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„๋Š” ๊ธฐ์ค€์€ 'ret๋ฅผ ์–ด๋Š ์ฃผ์†Œ๋กœ ๋ฎ๋Š๋ƒ'์˜€๋Š”๋ฐ์š”, 1. buffer ๋ณ€์ˆ˜2. argv[1]3. ํ™˜๊ฒฝ๋ณ€์ˆ˜์˜€์ฃ  ์—ฌ๊ธฐ๊นŒ์ง€ ์ž˜ ํ‘ธ์…จ๋‹ค๋ฉด ์•„๋งˆ ret๋ฅผ ๋ฎ์„ ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ ์ฏค์€ ์‹์€์ฃฝ ๋จน๊ธฐ ์ผ ๊ฒ๋‹ˆ๋‹ค.(๊ทธ๋ž˜๋„ ๋‹ค์‹œ ์ •๋ฆฌ๋ฅผ ์œ„ํ•ดใ…Ž) ์ œ๊ฐ€ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€์ธ๋ฐ์š”, ๋จผ์ € gdb๋ฅผ ํ†ตํ•ด ๋œฏ์–ด๋ณด๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.gdb๋ฅผ ์ด์šฉํ•œ๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ, ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๋“ฑ์˜ ๊ฐœ๋…๋“ค์„ ๊ณต๋ถ€ํ•˜๋Š”๋ฐ์— ๋งŽ์€ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.๋˜ํ•œ, ๋ฌธ์ œ๋ฅผ ์ดํ•ดํ•˜๋Š”๋ฐ ํฐ ํž˜์ด ๋˜์ฃผ์ฃ !! ๋‘๋ฒˆ์งธ๋Š” ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ์งœ์„œ ํ•ด๋ณด๋Š” ๊ฒƒ ์ž…๋‹ˆ๋‹ค.์ œ๊ฐ€ ์•ž์œผ๋กœ ๋ฌธ์ œํ’€์ด์—์„œ ๋งŽ์ด ์‚ฌ์šฉํ•  ๋ฐฉ๋ฒ•์ด๊ธฐ๋„ ํ•˜๊ตฌ์š”ใ…Žgate๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ˆ์‹œ..

3. cobolt → goblin

id : coboltpw : hacking exposed ์ด๋ฒˆ ๋ฌธ์ œ๋Š” argv๋Œ€์‹  stdin์œผ๋กœ ์ž…๋ ฅ๊ฐ’์„ ๋ฐ›์Šต๋‹ˆ๋‹ค. argv๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์—†์œผ๋‹ˆ, 'ํ™˜๊ฒฝ๋ณ€์ˆ˜'๋ฅผ ์ด์šฉํ•ด ๋ณด๋„๋ก ํ• ๊ฒŒ์š”. [cobolt@localhost cobolt]$ cat goblin.c /* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ž€?ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” OS๊ฐ€ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ์‹œ์ผœ ๋†“๊ณ  ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ์˜์—ญ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๊ฐ€ ๊ณ ์ •์ ์ด๋ผ, ์›ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋„ฃ์–ด๋†“๊ณ  ์ฃผ์†Œ๋ฅผ ์ฐพ์•„ re..

2. gremlin → cobolt

id : gremlinpw : hello bof world ๋จผ์ € ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.[gremlin@localhost gremlin]$ cat cobolt.c /* The Lord of the BOF : The Fellowship of the BOF - cobolt - small buffer */ int main(int argc, char *argv[]) { char buffer[16]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } gate์™€ ๋‹ฌ๋ผ์ง„ ์ ์€ buffer์˜ ํฌ๊ธฐ๊ฐ€ 256์—์„œ 16์œผ๋กœ ์—„์ฒญ ์ž‘์•„์กŒ๋‹ค๋Š” ์  ์ž…๋‹ˆ๋‹ค. bufffer๋กœ ์ง์ ‘ ์ด๋™ํ•˜์—ฌ ์‹คํ–‰์‹œํ‚ค๊ธฐ๋Š” ํž˜๋“ค..

1. gate → gremlin

id : gate pw : gate ๋กœ๊ทธ์ธ ํ•ด์ค๋‹ˆ๋‹ค. gremlin.c ์†Œ์Šค์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.[gate@localhost gate]$ cat gremlin.c /* The Lord of the BOF : The Fellowship of the BOF - gremlin - simple BOF */ int main(int argc, char *argv[]) { char buffer[256]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } buffer์˜ ํฌ๊ธฐ๊ฐ€ 256byte์ด๋‹ˆ, ์‰˜์ฝ”๋“œ๋ฅผ ๋„ฃ๊ธฐ์— ์ถฉ๋ถ„ํ• ๊ฒƒ ๊ฐ™๋„ค์š”..ใ…Ž ์‹คํ–‰๋ ๋•Œ ๋”๋ฏธ(dummy; ์“ฐ๋ ˆ๊ธฐ)๊ฐ’์ด ์ถ”๊ฐ€๋˜๋Š”์ง€ gdb๋ฅผ..