Web Study/Training

[Dreamhack] command-injection-1 문제 풀이

2024. 1. 5. 22:53

QUOTE THE DAY

Self-Talk
반응형

※ 본 내용은 공부 목적으로 작성된 내용입니다 ※ 잘못된 부분이 있으면 언제든지 댓글로 알려주세요!

 

 

서버 생성 / 문제 파일 받기

 

01

 

페이지를 살펴보면 host를 입력하여 ping 명령어가 작동되는 걸 알 수 있습니다

 

 

host 이외의 다른 명령어를 대입해 봤는데 올바른 형식이 아니라고 나오네요

 

#!/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)

 

소스 코드를 살펴보면 POST 방식으로 host 입력란을 전달받아 cmd 변수로 ping 명령어를 실행하고 있습니다

 

 

하지만 어디에도 host 입력란을 필터링하는 부분을 찾을 수 없어 페이지로 돌아가 개발자 도구를 이용하여 host 입력란 요소를 살펴보니 pattern 부분을 찾아냈습니다 [A-Za-z0-9.]{5,20}은 정규식 표현으로 길이가 5~20 사이인 영문 대소문자와 숫자 0~9를 의미하는 필터링입니다

 

01

 

이 pattern 부분을 지우니 정상적으로 "요청한 양식과 일치시키세요"라는 문구가 표시되지 않아 [Ping!]을 눌러 ls 명령어와 같이 전달했는데 명령어 오류가 발생했습니다

 

cmd = f'ping -c 3 "{host}"'

 

아마 "{host}" 쪽에서 "을 우회하여 명령어를 전달할 필요성이 보입니다

 

01

 

쌍따옴표(")를 우회해서 ls 명령어와 같이 전달하니 정상적으로 현재 디렉터리의 파일을 확인하여 flag 파일을 알아냈습니다 이제 cat 으로 flag 파일을 읽어봅시다

 

 

이후 8.8.8.8";"cat flag.py를 입력했는데 위와 같이 오류가 또 발생했습니다 결국 cat flag.py 부분에 공백도 쌍따옴표(")로 묶었습니다

 

01

 

명령어와 공백을 쌍따옴표(")로 묶고 전달하니 정상적으로 flag 값을 확인할 수 있었습니다

 

 

[ 선수 학습 내용 ]

더보기
 

OS Injection이란?

OS Injection OS Command Injection 또는 Shell Injection은 웹 응용 프로그램이 구동 중인 웹 서버 운영체제에서 명령을 실행하는 취약점입니다 이때 웹 응용 프로그램은 HTTP 폼, HTTP 헤더, 쿠키와 GET 파라미터

mu-sa.tistory.com

 

 

'Kali Linux/Linux' 카테고리의 글 목록

死死死死死死

mu-sa.tistory.com

 

 

 

반응형
저작자표시 (새창열림)
'Web Study/Training' 카테고리의 다른 글
  • [Dreamhack] simple-ssti 문제 풀이
  • [Dreamhack] command-injection-chatgpt 문제 풀이
  • [Dreamhack] Apache htaccess 문제 풀이
  • [Dreamhack] image-storage 문제 풀이
MUSA
MUSA
Nine Point Eight

최근 댓글

최근 글

인기 글

  • MUSA
    무사
    Nine Point Eight
    • 홈

    • 방명록

    • 분류 전체보기 (124)
      • Minecraft (29)
        • Server Development (16)
        • ResourcePack (7)
        • Plugin (5)
        • Java Plugin (1)
      • Tistory (15)
        • 티스토리 수익 (3)
        • 티스토리 검색 유입 (3)
        • 티스토리 꾸미기 (9)
      • Windows (2)
      • Kali Linux (42)
        • Linux (24)
        • Bandit (18)
        • Tool (0)
      • Web Study (26)
        • Theory (14)
        • Training (12)
      • CTF (5)
        • HackTheon (1)
        • Customized CTF (2)
        • CTF Write-Up (2)
      • Forensics (1)
      • System (1)
      • Cryptography (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 반응형
  • hELLO· Designed By정상우.v4.10.3
MUSA
[Dreamhack] command-injection-1 문제 풀이
상단으로

티스토리툴바