๐๏ธ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 |