'분류 전체보기'에 해당하는 글 199건

반응형

문제를 받고 서버도 생성해줍니다.

host3.dreamhack.games:23858 로 접근하니 아래와 같습니다。

받은 app。py를 살펴보니 flag라는 명령이 들어오면 no라는 result 값을 출력하도록 되어있네요。

cat flag.txt를 찍어보니 안된답니다... ls 로 파일을 확인해보니 아래와 같습니다.

이 중, requirement.txt를 찍어보니 flask로 나오고, hint.txt를 cat으로 확인해보니 아래와 같이 flag 경로가 나옵니다.

cat ./dream/hack/hello/flag.txt를 확인해보니 또다시 no로 나오는 걸로 보아, app.py의 필터링 규칙이 적용된 것 같습니다.

해당 경로에 파일을 ls ./dream/hack/hello 로 확인해보니 flag.txt만 있는 것으로 확인됩니다.

필터링 규칙 우회를 위해, cat ./dream/hack/hello/*.txt 로 확인해줍니다.

아래와 같이 DH 값이 나옵니다.

반응형

'Security > 드림핵' 카테고리의 다른 글

64se64 문제 풀이  (0) 2025.02.08
rev-basic-1 문제풀이  (0) 2025.02.02
Carve Party 문제풀이  (0) 2025.02.02
rev-basic-0 문제풀이  (0) 2025.02.02
command-injection-1 문제풀이  (2) 2025.02.01

WRITTEN BY
SiriusJ

,
반응형

소스코드를 다운받아줍니다.

소스코드를 받으면 index.html이 있고, 소스코드를 확인해보면 value 값이 보입니다. base64 encoding 되어있는것으로 보이니, 해당 값을 디코딩해줍니다.

디코딩 사이트에서 확인해보니 코드가 보이고, 해당 코드를 파이썬으로 출력하면 다음과 같이 보입니다.

 

반응형

'Security > 드림핵' 카테고리의 다른 글

baby-linux 문제풀이  (1) 2025.02.08
rev-basic-1 문제풀이  (0) 2025.02.02
Carve Party 문제풀이  (0) 2025.02.02
rev-basic-0 문제풀이  (0) 2025.02.02
command-injection-1 문제풀이  (2) 2025.02.01

WRITTEN BY
SiriusJ

,
반응형

rev-basic-0과 동일하게 correct를 출력하는 입력값을 찾아내는 문제이다.

똑같이 문제를 다운로드 받는다.

 

그리고 이전 포스팅과 동일하게 x64dbg를 이용하여 해당 실행파일을 분석해본다.

똑같이 correct를 더블클릭해주고, 

상단의 빨간 밑줄부분을 확인해보니, 아래와 같이 값들이 이번에는 문자로 분리되어 보인다.

보니까 cmp(문자 비교)를 하는것 같고, 쭈욱 내려가니 값은 Compar3_the_ch4ract3r 로 보여져서, 실행해보니 Correct가 나오는것을 확인하였다.

이전에 푼 방법과 동일한 방법이라 어렵지않았다.

 

반응형

'Security > 드림핵' 카테고리의 다른 글

baby-linux 문제풀이  (1) 2025.02.08
64se64 문제 풀이  (0) 2025.02.08
Carve Party 문제풀이  (0) 2025.02.02
rev-basic-0 문제풀이  (0) 2025.02.02
command-injection-1 문제풀이  (2) 2025.02.01

WRITTEN BY
SiriusJ

,
반응형

호박을 10000번 클릭해야하나보다. 매크로를 쓸까 고민했다.

우선 문제파일을 받으니 아래와 같이 html 파일이 하나 보인다.

 

몇번 눌러보니 호박이 웃는다... 일단 소스코드를 확인해보니 아래처럼 counter를 10000번 해야하는 것으로 보인다.

 

클릭했을 때 바로 make() 를 해보거나, 주석처리로 if 문 전체를 날려보아도 그대로 클릭하는게 유지되는 걸로 보인다.

그래서 반복문(while)을 사용해서 counter가 10000이 될때까지 증가시켜서 해당 값을 0으로 만들어버렸다.

 

클릭해보니 DH 값을 뱉어낸다.

이 값을 넣어보니 완성되는것을 확인하였다.

 

반응형

'Security > 드림핵' 카테고리의 다른 글

64se64 문제 풀이  (0) 2025.02.08
rev-basic-1 문제풀이  (0) 2025.02.02
rev-basic-0 문제풀이  (0) 2025.02.02
command-injection-1 문제풀이  (2) 2025.02.01
file-download-1 문제풀이  (0) 2025.02.01

WRITTEN BY
SiriusJ

,
반응형

이번에는 reversing 문제이다.

문제를 다운받아 준다.

다운받아 압축을 해제하면 해당 exe파일이 보인다.

해당 exe 파일을 바이너리 분석을 위해 x64dbg를 사용하였다.

프로그램을 열면 위와 같고, 여기서 다운로드 받은 exe파일을 열어준다.

키워드가 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 이기 때문에, correct를 해당 모듈에서 검색해준다.

아래 이미지처럼 검색되고, 가장 상단에 flag 값처럼 보이는게 있지만 우선 correct를 더블클릭하여 따라간다.

그리고 그 위에 chall0.7FF7C23F11F0 등 입력값을 받았을 때 correct 또는 wrong을 출력하는 것으로 보인다. 둘다 이동해보니 빨간색 밑줄표시한 부분에 아래 이미지와 같이 flag 값으로 추정되는 값이 보인다.

이 값을 입력해보니, 성공으로 보여진다.

IDA를 사용해보려고했는데 다운로드가 너무 오래걸려서 x64dbg 를 이용해서 빠르게 확인해보았다.

반응형

'Security > 드림핵' 카테고리의 다른 글

rev-basic-1 문제풀이  (0) 2025.02.02
Carve Party 문제풀이  (0) 2025.02.02
command-injection-1 문제풀이  (2) 2025.02.01
file-download-1 문제풀이  (0) 2025.02.01
devtools-sources 문제풀이  (1) 2025.02.01

WRITTEN BY
SiriusJ

,
반응형

특정host에 ping패킷을 보내는 서비스라고 하고, 운영체제 명령어 삽입을 통해 플래그를 획득할 수 있다고 합니다.

플래그는 flag.py 에 있고, 뭔가 명령어 삽입을 해야 flag.py를 찾을 수 있을 것 같습니다.

문제파일을 받고, 서버를 생성해줍니다.

접속하니 이런 화면이 뜨네요. Ping 메뉴를 클릭하니 아래와 같습니다. ip를 입력하면 ping을 보내는 서비스 같습니다.

여기에 핑을 날려보니 제대로 받는건 확인됩니다.

이제 다시 home으로 와서, 위조된 명령어를 삽입해보려고하니 형식일치 내용이 나오길래, ctrl+U로 소스코드를 확인해주니 패턴이 나옵니다.

영어 대소문자 및 숫자와, 총 5-20 문자까지로 매칭되어야 함을 확인할 수 있습니다.

flag.py를 확인해보니 FLAG 값을 출력하는 cat이나 put 등으로 뽑아내면 될 것 같습니다.

운영체제 명령어 삽입의 종류는 아래와 같다.

1) ; : 해당 라인의 명령어를 성공, 실패와 관련 없이 모두 실행

 - 예시) ping 8.8.8.8; cat flag.py

2) | : 앞의 명령어 처리결과(ping 8.8.8.8)를 뒤 명령어로 전달하여 뒤 명령어를 실행

 - 예시) ping 8.8.8.8 | cat flag.py

3) || : ping 8.8.8.8를 먼저 실행하고 명령 실행에 성공할 경우 뒤 명령은 실행하지 않고, 실패 시 cat.flag.py를 실행

 - 예시) ping 8.8.8.8 || cat flag.py

4) && : ping 8.8.8.8을 먼저 실행하고, 명령 실행에 실패할 경우 뒤 명령은 실행하지 않음

 - 예시) ping 8.8.8.8 && cat flag.py

 -> ping 명령어 결과로 cat flag.py 명령어를 수행하는데 이렇게 되면 실제로 모두 수행되지만 화면에는 cat 결과만 출력된다.

 

이제 BURPSUITE를 통해 프록시 우회하여 조작 해보도록 한다.

1. intercept off 의 상태에서, 아래 open browser를 클릭하여 새 브라우저를 연다.

2. intercept on 상태로 클릭하고, 

3. 새로 열린 창에서 8.8.8.8을 입력하고 ping을 날린다.

4. 그러면 아래 같이 입력된 값이 보인다.

여기서, host=8.8.8.8에 명령어 삽입을 할 수 있도록 입력하고, forward를 한다.(host=8.8.8.8"; cat flag.py")

5. 그럼 아래처럼 브라우저에서 DH 값을 뱉어내는걸 확인할 수 있다.

이렇게 프록시를 우회해서 찾을수도 있고, 개발자도구에서 그냥 패턴부분을 삭제해버리고 찾을 수도 있다고한다. 참고.

 

반응형

'Security > 드림핵' 카테고리의 다른 글

Carve Party 문제풀이  (0) 2025.02.02
rev-basic-0 문제풀이  (0) 2025.02.02
file-download-1 문제풀이  (0) 2025.02.01
devtools-sources 문제풀이  (1) 2025.02.01
Exercise: SSH  (0) 2025.01.04

WRITTEN BY
SiriusJ

,
반응형

이 문제를 풀어야합니다.

file download 취약점이 존재한다고 하니, 서버사이드에서 취약한 부분이 존재하나 봅니다.

우선 서버를 생성해줍니다.

host1.dreamhack.games:10912 로 접속해보면 뭔가 나올 것 같습니다.

일단 문제파일을 받습니다.

파일이 존재하는걸 볼 수 있고, app.py를 확인해보니 아래와 같습니다.

#!/usr/bin/env python3
import os
import shutil

from flask import Flask, request, render_template, redirect

from flag import FLAG

APP = Flask(__name__)

UPLOAD_DIR = 'uploads'


@APP.route('/')
def index():
    files = os.listdir(UPLOAD_DIR)
    return render_template('index.html', files=files)


@APP.route('/upload', methods=['GET', 'POST'])
def upload_memo():
    if request.method == 'POST':
        filename = request.form.get('filename')
        content = request.form.get('content').encode('utf-8')

        if filename.find('..') != -1:
            return render_template('upload_result.html', data='bad characters,,')

        with open(f'{UPLOAD_DIR}/{filename}', 'wb') as f:
            f.write(content)

        return redirect('/')

    return render_template('upload.html')


@APP.route('/read')
def read_memo():
    error = False
    data = b''

    filename = request.args.get('name', '')

    try:
        with open(f'{UPLOAD_DIR}/{filename}', 'rb') as f:
            data = f.read()
    except (IsADirectoryError, FileNotFoundError):
        error = True


    return render_template('read.html',
                           filename=filename,
                           content=data.decode('utf-8'),
                           error=error)


if __name__ == '__main__':
    if os.path.exists(UPLOAD_DIR):
        shutil.rmtree(UPLOAD_DIR)

    os.mkdir(UPLOAD_DIR)

    APP.run(host='0.0.0.0', port=8000)

upload 디렉토리는 uploads 로 확인할 수 있고, 

URL에 http://host1.dreamhack.games:10912/ 로 들어가보니 아래와 같습니다.

(asd, asdasd는 Upload My Memo를 통해 입력값을 넣어서 나온 결과로 처음화면은 다릅니다.)

여기에 filename과 content를 test로 임의로 넣으니 아래와 같이 생성됩니다.

이렇게 나오는 것을 볼 수 있습니다.

여기서 url을 확인해보니 http://host1.dreamhack.games:10912/read?name=파일명 으로 나오는 것을 볼 수 있습니다.

따라서 여기에 flag.py를 넣어봅니다.

flag.py파일이 없다고 나옵니다.

다시 한번 app.py의 소스코드를 확인해보니 

def upload_memo():
    if request.method == 'POST':
        filename = request.form.get('filename')
        content = request.form.get('content').encode('utf-8')

        if filename.find('..') != -1:
            return render_template('upload_result.html', data='bad characters,,')

        with open(f'{UPLOAD_DIR}/{filename}', 'wb') as f:
            f.write(content)

        return redirect('/')

    return render_template('upload.html')

upload_memo에 파일오픈하는 부분을 참고합니다. 파일앞에 ../ 루트 디렉토리를 통해 접근 가능할 것으로 보입니다.

입력해보니 FLAG 값이 나오는 것을 확인할 수 있었습니다.

flag를 입력해봅니다.

문제 해결된 것을 확인하였습니다.

이번 문제는 소스코드를 분석하고 파일다운로드 취약점에 대한 이해가 있어야 풀수있을것으로 보입니다.

반응형

'Security > 드림핵' 카테고리의 다른 글

rev-basic-0 문제풀이  (0) 2025.02.02
command-injection-1 문제풀이  (2) 2025.02.01
devtools-sources 문제풀이  (1) 2025.02.01
Exercise: SSH  (0) 2025.01.04
Exercise: Welcome-Beginners  (0) 2025.01.04

WRITTEN BY
SiriusJ

,
반응형

이번에는 개발자도구(F12)를 활용한 플래그를 찾는 문제입니다.

과연 어떤문제일까

 

여기서 문제파일을 받아줍니다.

 

이런 파일들이 포함되어 있습니다.

 

먼저, 문제풀이 사이트에서 ctrl+U 로 소스코드를 확인해줍니다.

뭐 대략 이런식이고... ctrl+f 로 혹시몰라 DH{ 로 검색해보니 플래그가 뜨지는 않습니다 역시나...

그래서, 문제파일들을 하나하나 뒤져봅니다.

main.4c6e144e.map 파일안 소스코드에 아래와 같은 내용이 있습니다.(VS 2022나 메모장으로 소스코드 확인하셔도 편합니다.)

바로 정답에 입력하니, 정답.....

생각보다 아무것도 없었던 문제라 뭔가 아쉬웠던..

반응형

'Security > 드림핵' 카테고리의 다른 글

rev-basic-0 문제풀이  (0) 2025.02.02
command-injection-1 문제풀이  (2) 2025.02.01
file-download-1 문제풀이  (0) 2025.02.01
Exercise: SSH  (0) 2025.01.04
Exercise: Welcome-Beginners  (0) 2025.01.04

WRITTEN BY
SiriusJ

,