๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
[Dreamhack]WebHacking/๋กœ๋“œ๋งต_Basic

[Dreamhack] Level1: command-injection-1

by Yun2๐Ÿ‘ 2023. 8. 24.
๋ฐ˜์‘ํ˜•

๐Ÿ›Ž๏ธAccess

ํŠน์ • Host์— ping ํŒจํ‚ท์„ ๋ณด๋‚ด๋Š” ์„œ๋น„์Šค์ด๋‹ค.

Command Injection์„ ํ†ตํ•ด ํ”Œ๋ž˜๊ทธ๋ฅผ ํš๋“. ํ”Œ๋ž˜๊ทธ๋Š” flag.py์— ์žˆ๋‹ค.

 

๐Ÿ‘พExploit Algorithm & Payload

๋”๋ณด๊ธฐ
#!/usr/bin/env python3
import subprocess

from flask import Flask, request, render_template, redirect

from flag import FLAG

APP = Flask(__name__)


@APP.route('/')
def index():
    return render_template('index.html')


@APP.route('/ping', methods=['GET', 'POST'])
def ping():
    if request.method == 'POST':
        host = request.form.get('host')
        cmd = f'ping -c 3 "{host}"'
        try:
            output = subprocess.check_output(['/bin/sh', '-c', cmd], timeout=5)
            return render_template('ping_result.html', data=output.decode('utf-8'))
        except subprocess.TimeoutExpired:
            return render_template('ping_result.html', data='Timeout !')
        except subprocess.CalledProcessError:
            return render_template('ping_result.html', data=f'an error occurred while executing the command. -> {cmd}')

    return render_template('ping.html')


if __name__ == '__main__':
    APP.run(host='0.0.0.0', port=8000)

 

 

#1


: '/ping' ํŽ˜์ด์ง€์—์„œ ping์„ ํ†ตํ•œ ์‘๋‹ต ๊ฐ’์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋œ๋‹ค.

 

: 8.8.8.8(Google LLC์˜ ๋ฌด๋ฃŒ ๋ฐ ๊ณต๊ฐœ DNS ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ)๋กœ ์ž…๋ ฅํ•˜์˜€๋”๋‹ˆ ๋‹ค์Œ๊ณผ ๊ฐ™์€ Ping ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

cmd = f'ping -c 3 "{host}"' ์œผ๋กœ ์ง€์ •๋œ ํ˜ธ์ŠคํŠธ์— 3๋ฒˆ์˜ ๋„คํŠธ์›Œํฌ ping ์š”์ฒญ์„ ๋ณด๋ƒ„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

 

#2


: ping ๋ช…๋ น์— ๋ฉ”ํƒ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ls ๋ช…๋ น์„ ์‹œ๋„ํ•˜์˜€์ง€๋งŒ ์š”์ฒญ ํ˜•์‹์„ ์ผ์น˜์‹œํ‚ค์ง€ ๋ชปํ•ด ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค.

: ๋”ฐ๋ผ์„œ ํ•ด๋‹น input ํƒœ๊ทธ ๋ฐ•์Šค์˜ ์š”์ฒญ ํ˜•์‹์„ ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ–ˆ๋‹ค.(F12)

 

: patten="[A-Za-z0-9.]{5,20}" ํ•ด๋‹น ํŒจํ„ด์— ๋งŒ์กฑํ•˜๋Š” ๊ฐ’์œผ๋กœ๋งŒ ์ž…๋ ฅํ•ด์•ผํ•จ์„ ํ™•์ธํ–ˆ๋‹ค.
(์˜๋ฌธ ์†Œ•๋Œ€, ์ˆซ์ž 0~9, ๊ธฐํ˜ธ ., 5-20์ž)

: ์ฆ‰, ํด๋ผ์ด์–ธํŠธ์ธก ์ชฝ์—์„œ ํ•„ํ„ฐ๋ง์ด ์ ์šฉ๋˜์–ด ์žˆ์–ด ๋ฉ”ํƒ€๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์›น ํ”„๋ก์‹œ ๋„๊ตฌ burp suite๋ฅผ ์ด์šฉํ•˜์—ฌ ์ค‘๊ฐ„์—์„œ ํŒจํ‚ท์„ ๊ฐ€๋กœ์ฑ„ ๋ณ€๊ฒฝํ•ด์•ผ๊ฒ ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค.

 

๐Ÿ’ก๋ฉ”ํƒ€๋ฌธ์ž๋ž€?

๋”๋ณด๊ธฐ

๋ฉ”ํƒ€๋ฌธ์ž๋ž€ ์ •๊ทœํ‘œํ˜„์‹ ๋˜๋Š” ์ •๊ทœ์‹์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ž

  • ^ : ๋ฌธ์ž์—ด์˜ ์ฒ˜์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • $ : ๋ฌธ์ž์—ด์˜ ๋์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • . : ์ž„์˜์˜ ํ•œ ๋ฌธ์ž๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • * : ๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ•˜๋‚˜ ์ด์ƒ์ด๋‹ค.
  • + : ๋ฐ”๋กœ ์•ž์˜ ๋ฌธ์ž๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์ด๋‹ค.
  • ? : ์•ž์˜ ๋ฌธ์ž๊ฐ€ ์—†๊ฑฐ๋‚˜ ํ•˜๋‚˜์ด๋‹ค.
  • [ ] : ํ•œ ๋ฌธ์ž๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ๋ฌถ์Œ ์•ˆ์˜ ๋‚ด์šฉ์€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฌธ์ž์˜ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • { } : ์•ž์— ์žˆ๋Š” ๋ฌธ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ  ๋ฌถ์Œ ์•ˆ์—์„œ ','๋Š” ๋ฌธ์ž ๊ฐœ์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์“ด๋‹ค.
  • ( ) : ๊ด„ํ˜ธ ์•ˆ์˜ ๋ฌธ์ž์—ด์€ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์ทจ๊ธ‰ํ•œ๋‹ค.
  • | : ๋˜๋Š”(or)์˜ ๋œป์œผ๋กœ ์„ ํƒ๋ฌธ์— ์“ฐ์ธ๋‹ค.
  • \ : ๋ฉ”ํƒ€ ๋ฌธ์ž์˜ ์„ฑ์งˆ์„ ์—†์•จ ๋•Œ ๋ถ™์ธ๋‹ค.

๋ฆฌ๋ˆ…์Šค ์ฃผ์š” ํŠน์ˆ˜ ๊ธฐํ˜ธ

  • ~ : ํ™ˆ ๋””๋ ‰ํ† ๋ฆฌ
  • . : ํ˜„์žฌ ๋””๋ ‰ํ† ๋ฆฌ
  • .. : ์ƒ์œ„ ๋””๋ ‰ํ† ๋ฆฌ
  • # : ์ฃผ์„
  • $ : ์‰˜ ๋ณ€์ˆ˜
  • & : ๋ฐฑ ๊ทธ๋ผ์šด๋“œ ์ž‘์—…
  • * : ๋ฌธ์ž์—ด ์™€์ผ๋“œ์นด๋“œ
  • ? : ํ•œ ๋ฌธ์ž ์™€์ผ๋“œ ์นด๋“œ
  • [ ] : ๋ฌธ์ž์˜ ๋ฒ”์œ„ ์ง€์ •
  • ; : ์‰˜ ๋ช…๋ น ๊ตฌ๋ถ„์ž
  • | : ํŒŒ์ดํ”„
  • ...

 

 

#3


: ํ•ด๋‹น ๋ช…๋ น์„ ping -c 3 "{host}" -> ping -c 3 "8.8.8.8"|"ls" ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ์‹œ์Šคํ…œ ๋ช…๋ น์˜ ๊ฒฐ๊ณผ๊ฐ€ ์›น ํ™”๋ฉด์— ๋…ธ์ถœ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

#4


8.8.8.8"|"cat" "flag.py
8.8.8.8"; "cat" "flag.py
...

: ๋‹ค์–‘ํ•œ ๋ฉ”ํƒ€ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ flag๋ฅผ ํš๋“ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

: ๋˜ํ•œ ์ฃผ์š” ํŒŒ์ผ๋“ค์„ ์—ด๋žŒํ•  ์ˆ˜๋„ ์žˆ์—ˆ๋‹ค.

 

: ๋˜ํ•œ ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ํŒจํ„ด ๋ถ€๋ถ„์„ ์ œ์™ธ ์‹œํ‚ค๊ณ  ์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ์š”์ฒญํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ ์‘๋‹ต ๋ฐ›์„ ์ˆ˜๋„ ์žˆ์—ˆ๋‹ค.

 

 

๐Ÿ”‘Analysis and results for obtaining the Flag DH{…}


 

 

๐Ÿ“ŒSummary


- command injection ๋Œ€์‘๋ฐฉ์•ˆ -

 

| ์ž…๋ ฅ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ |

์‹œ์Šคํ…œ ๋ช…๋ น์–ด๋ฅผ ํด๋ผ์ด์–ธํŠธ ๋‹จ์—์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋งŒ ํ•˜๋Š” ๊ฒƒ์€ ์•ˆ์ „ํ•˜์ง€ ์•Š์Œ

์„œ๋ฒ„์ธก์—์„œ๋„ ์ •๊ทœ์‹ ๋˜๋Š” ๋ฌธ์ž์—ด ๊ฒ€์‚ฌ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์ž…๋ ฅ์ด ์•ˆ์ „ํ•œ์ง€ ๊ฒ€์ฆํ•ด์•ผ ํ•จ

(์ ์ • ์ž…๋ ฅ ๊ธธ์ด ์ œํ•œ) 

(ํ™”์ดํŠธ๋ฆฌ์ŠคํŠธ, ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ ์ƒํ™ฉ์— ๋”ฐ๋ผ ์„ ํƒ์  ์ ์šฉ์ด ํ•„์š”)

...

๋ฐ˜์‘ํ˜•

'[Dreamhack]WebHacking > ๋กœ๋“œ๋งต_Basic' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Dreamhack] Level1: file-download-1  (0) 2023.09.03
[Dreamhack] Level1: image-storage  (0) 2023.08.26
[Dreamhack] Level2: Mango  (0) 2023.08.23
[Dreamhack] Level1: simple_sqli  (0) 2023.08.22
[Dreamhack] Level1: csrf-2  (0) 2023.08.21