https://dreamhack.io/wargame/challenges/873

 

phpreg

Description php로 작성된 페이지입니다. 알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다. Step 2에서 system() 함수를 이용하여 플래그를 획득하세요. 플래그는 ../dream/flag.txt에 위치합니

dreamhack.io

 

문제

php로 작성된 페이지입니다.
알맞은 Nickname과 Password를 입력하면 Step 2로 넘어갈 수 있습니다.
Step 2에서 system() 함수를 이용하여 플래그를 획득하세요.
플래그는 ../dream/flag.txt에 위치합니다.
플래그의 형식은 DH{...} 입니다.

 

 

풀이

 

1.  서버를 생성한 후에 웹해킹 링크로 들어간다.

 

 

2. 문제 파일을 받아 index.php 와 step2.php 를 확인한다. index.php를 보면 크게 얻어갈 단서는 없는 듯 하고 step2.php에서 본격적인 단서 들이 나온다

      <?php
          // POST request
          if ($_SERVER["REQUEST_METHOD"] == "POST") {
            $input_name = $_POST["input1"] ? $_POST["input1"] : "";
            $input_pw = $_POST["input2"] ? $_POST["input2"] : "";

            // pw filtering
            if (preg_match("/[a-zA-Z]/", $input_pw)) {
              echo "alphabet in the pw :(";
            }
            else{
              $name = preg_replace("/nyang/i", "", $input_name);
              $pw = preg_replace("/\d*\@\d{2,3}(31)+[^0-8\"]\!/", "d4y0r50ng", $input_pw);
              
              if ($name === "dnyang0310" && $pw === "d4y0r50ng+1+13") {
                echo '<h4>Step 2 : Almost done...</h4><div class="door_box"><div class="door_black"></div><div class="door"><div class="door_cir"></div></div></div>';

 

유심히 봐야할 코드만 추려서 올렸다.

 

  • 단서1 : pw filtering이 걸려있다 "/[a-zA-z]/" 알파벳을 pw로 적을 시 alphabet in the pw :( 라는 문구가 떨어진다

  • 단서2 : prge_replace 로 인해 "/nyang/i" "" nyang 이라는 문자열이 인식이 되면 빈 공백으로 replace 되는 코드가 보인다 
  • 단서3 : 정규 표현식 ("/\d*\@\d{2,3}(31)+[^0-8\"]\!/"을 입력하게 되면 -> "d4y0r50ng" 이런 문자열로 replace되는 점
  • 단서4 : name은 dnyang0310 이 되어야하고 pw는d4y0r50ng+1+13 이런 형식으로 되어야 step2로 넘어갈 수 있다

 

이 단서들을 활용하여 문제를 풀면된다 단서4 에서 d4y0r50ng+1+13 이것은 큰 따옴표에 묵여있기 때문에 113 이 아니라 "+1+13" 그대로 입력을 해야한다.

 

 

 

 

3. 단서를 이용해서 해석한 후에 문제를 풀어보자

  • 우선 name에 대한 부분이다
    • /i => 대소문자를 무시하는 플래그 
    • nyang를 입력하면 공백("")으로 인식하니  출력이 정답에 맞게 적어주면 된다 
    • dnyangnyang0310 -> replace 되면 d0310 이 된다
    • dnynyangyang0310 -> replace 되면 dnyang0310 정답이다!
  • pw 정규 표현식 해석
    • \d* => 0개 이상의 숫자
    • \@ => @
    • \d{2,3}(31) => 2~3자리 숫자 후에 31이 오면 된다
    • +[^0-8\"] => ^표시는 뒤에 주어진 값을 제외하고 라는 뜻이므로 0~8 그리고 " 를 제외한 나머지 문자
    • \! => 마지막은 !로 나와야한다
    • 이렇게 정규식에 맞게 적는다면 보이진 않지만 d4y0r50ng 로 replace 될것이고 마지막으로 뒤에 +1+13을 적어주면 된다
    • 123@31319!+1+13
    • 123@54319!+1+13
    • 여러 가지로 pw를 테스트 해보았다. 

4. step2 

step2에서는 flag를 찾으면 된다 step2.php 코드를 보면 cmd filtering도 되어있다.

// cmd filtering
                else if (preg_match("/flag/i", $cmd)) {
                  echo "<pre>Error!</pre>";
                }
                else{
                  echo "<pre>--Output--\n";
                  system($cmd);
                  echo "</pre>";
                }

 

cmd filtering은 flag 라는 문자를 대소문자 구분 없이 사용한다면 Error! 라는 출력 값을 우리에게 선사한다

하지만 이미 문제에서 flag 경로를 우리에게 알려주었다

 ../dream/flag.txt 이 경로에 있다고 한다.

cat ../dream/f?ag.txt 또는 cat ../dream/*.txt  를 사용하여 직접적인 flag를 적지 않고도 다양한 방법으로 flag를 획득할 수 있다

 

 

 

 

 

 

 


DH{ad866c64dabaf30136e22d3de2980d24c4da617b9d706f81d10a1bc97d0ab6f6}

 

 

flag 획득!!

 

'Dreamhack' 카테고리의 다른 글

[Dreamhack] session-basic Write-Up  (0) 2024.03.16
[Dreamhack] cookie Write-Up  (1) 2024.03.16
[Dreamhack] ex-req-ex Write-Up  (2) 2024.03.15
[Dreamhack] blue-whale Write-Up  (3) 2024.03.15
[Dreamhack] baby-linux Write-Up  (1) 2024.03.14

https://dreamhack.io/wargame/challenges/834

 

ex-reg-ex

Description 문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다. 플래그 형식은 DH{...} 입니다.

dreamhack.io

 

문제

문제에서 요구하는 형식의 문자열을 입력하여 플래그를 획득하세요. 플래그는 flag.txt 파일과 FLAG 변수에 있습니다.

플래그 형식은 DH{...} 입니다.


 

 



풀이

1. 정규표현식 문제이다 문제를 다운 받으면 python 코드를 보여주고 웹해킹 문제 사이트에 들어가서 문제를 풀면된다

지급된 웹해킹 링크

#!/usr/bin/python3
from flask import Flask, request, render_template
import re

app = Flask(__name__)

try:
    FLAG = open("./flag.txt", "r").read()       # flag is here!
except:
    FLAG = "[**FLAG**]"

@app.route("/", methods = ["GET", "POST"])
def index():
    input_val = ""
    if request.method == "POST":
        input_val = request.form.get("input_val", "")
        m = re.match(r'dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+', input_val)
        if m:
            return render_template("index.html", pre_txt=input_val, flag=FLAG)
    return render_template("index.html", pre_txt=input_val, flag='?')

app.run(host="0.0.0.0", port=8000)

이러한 코드를 지급해준다.

 

2. 집중해서 봐야할 부분은 `dr\w{5,7}e\d+am@[a-z]{3,7}\.\w+` 이부분이다

@가 있는걸 봐서는 이메일을 만드는 정규표현식 인것같다 해석을 해보자면

 

  •  처음 시작은 dr 로 시작을 해야한다
  • \w{5,7} => 5~7개의 알파벳 또는 숫자가 온다
  • 다음은 e
  • \d+ =>하나 이상의 숫자가 온다
  • 다음은 am@
  • [a-z]{3,7} => 소문자 알파벳 3~7개
  • 다음은 \. => 무조건 .
  • \w+ => 하나 이상의 알파벳 또는 숫자가 온다

 

정규표현식 문제이기 때문에 정해져있는 틀에서 벗어나지 않는다면 다 정답이 될것이다.

 

나는 drabcdee145am@abcedf.12345 를 했는데 flag를 받았다

래도 이메일 형식을 하면 좋으니

 

drjeffkime0315@tistory.com 으로 해보았다 역시 flag는 준다

'Dreamhack' 카테고리의 다른 글

[Dreamhack] cookie Write-Up  (1) 2024.03.16
[Dreamhack] phpreq Write-Up  (2) 2024.03.15
[Dreamhack] blue-whale Write-Up  (3) 2024.03.15
[Dreamhack] baby-linux Write-Up  (1) 2024.03.14
[Dreamhack] 64se64 Wirte-Up  (0) 2024.03.14

https://dreamhack.io/wargame/challenges/853

 

blue-whale

Description 보코가 여러분에게 도움을 요청합니다. "분명 플래그 파일이 있었는데요... 없어졌어요." Docker hub의 dreamhackofficial/blue-whale 레포지토리 (TAG:1) 에서 도커 이미지를 다운받을 수 있습니다.

dreamhack.io

 

문제

보코가 여러분에게 도움을 요청합니다. "분명 플래그 파일이 있었는데요... 없어졌어요."

Docker hub의 dreamhackofficial/blue-whale 레포지토리 (TAG:1) 에서 도커 이미지를 다운받을 수 있습니다. 도커 이미지를 분석하여 플래그를 획득하세요.
주어진 Dockerfile은 이미지를 빌드할 때 사용한 파일로, 풀이자가 사용할 수 없습니다.

플래그 형식은 DH{...} 입니다.


Hint: https://github.com/wagoodman/dive

 

 


풀이

 

1. 문제 요청대로 dockerhub에 올라가 있는 dreamhackofficial/blue-whale:1를 pull해준 후에 image 확인

sudo docker pull dreamhackofficial/blue-whale:1

sudo docker images

 

sudo docker inspect 로 확인했는데 별 다른 이상한점 없음

 

2. pull 받은 image 분석을 해야하는데 dive 라는 분석 툴을 이용하여 dockerfile에 적혀있는 것을 확인할 것이다.

hint 사이트에 들어가 dive를 다운 받아 준다. 우분투를 사용하기 때문에 deb를 다운받는다

DIVE_VERSION=$(curl -sL "https://api.github.com/repos/wagoodman/dive/releases/latest" | grep '"tag_name":' | sed -E 's/.*"v([^"]+)".*/\1/')
curl -OL https://github.com/wagoodman/dive/releases/download/v${DIVE_VERSION}/dive_${DIVE_VERSION}_linux_amd64.deb
sudo apt install ./dive_${DIVE_VERSION}_linux_amd64.deb

sudo dive -version

 

다운 받고 난 이후 잘 다운이 받아졌는지 확인 

 

3. 분석해야할 image와 tag를 적어 분석 화면으로 들어간다.

dive

sudo dive dreamhackofficial/blue-whale:1

 

4. 우선 dockerfile의 layer를 선택한 후에 switch view를 한 후에 flag 를 획득 한다

flag 파일 copy 되어 잘 들어감 -> python을 통해서 flag 파일을 읽고 print한 layer가 보인다 -> 하지만 뒤에 rm * 로 flag를 지워버렸다

 

이것을 찾기 위해서 layer를 화살표로 밑으로 이동해서 확인한다

 

그리고 tab키를 눌러서 view를 스위치 한 후에 디렉터리 항목들을 봐야하는데 너무 많은 디렉터리가 있어서 일단 전부다 축소를 해야한다

전부다 축소하기 위해서 단축키 `ctrl + space` 를 해준 다음 아까 layer에서 RUN /bin/sh -c touch `python3 -c "print(open('./flag', 'r').read())"` # buildkit  이 부분을 선택했기 때문에 flag가 이렇게 나온 모습을 볼 수 있다 

하지만 옆 부분이 짤리기 때문에 단축키 `ctrl + b` 를 이용하여 attributes를 해제 해주면

이렇게 flag 획득이 가능하다

 

단축키를 잘 활용하여 dockerfile에 쌓인 layer가 변하는 모습을 확인하여 flag가 삭제되기 이전의 모습과 삭제된 후를 확인 할 수 있다

힌트도 잘 활용하자~~

'Dreamhack' 카테고리의 다른 글

[Dreamhack] cookie Write-Up  (1) 2024.03.16
[Dreamhack] phpreq Write-Up  (2) 2024.03.15
[Dreamhack] ex-req-ex Write-Up  (2) 2024.03.15
[Dreamhack] baby-linux Write-Up  (1) 2024.03.14
[Dreamhack] 64se64 Wirte-Up  (0) 2024.03.14

https://dreamhack.io/wargame/challenges/837

 

baby-linux

Description 리눅스 명령어를 실행하는 웹 서비스가 작동하고 있습니다. 해당 웹 서비스의 코드가 첨부파일로 주어집니다. flag.txt 파일을 찾아 출력하여 플래그를 획득하세요! 플래그 형식은 DH{...}

dreamhack.io

 

문제

리눅스 명령어를 실행하는 웹 서비스가 작동하고 있습니다.
해당 웹 서비스의 코드가 첨부파일로 주어집니다.

flag.txt 파일을 찾아 출력하여 플래그를 획득하세요!

플래그 형식은 DH{...} 입니다.


 

 

풀이 및 정답

 

 

 

1. 주어진 해당 웹 사이트에 접속한다. (웹 해킹 사이트에서 사용한 코드파일은 홈페이지에서 주니깐 다운 받아서 확인)

 

이 웹사이트는 리눅스 명령어를 실행 할 수 있는 웹서비스가 작동하는 것이다.

해린이다보니깐 처음에 문제를 보고 주어진 코드도 봤지만 도통 어떻게 풀어야하는 건지 삽질을 많이 했다.

 

일단 flag.txt 를 찾는 것이라서 echo 부분에 flag.txt 라고 치니 No!! 라는 Result가 떳다. 그래서 flag란 단어가 들어가면 No라는 결과를 출력 한다는 단서 하나를 얻었다.

 

 

2.  두번째 단서

리눅스 환경에서 echo를 치고 옆에 글씨를 넣으면 입력받은 대로 출력을 해준다. 여기서는 echo$() 라고 나와있는데 

일반 쉘프롬프트에다가 없는 명령어를 치면 command not found 에러가 발생하듯이 똑같이 echo$() 빈 공백에 없는 명령어를 치면 역시나 command not found가 뜬다.

사용 가능한 명령어는 변수로 설정이 되어있다는 뜻이다!! /usr/bin 디렉터리에 등록되어있는 변수 명령어 들이 동작이 되는 것이다.

 

 

3. 세번째 단서

생각에 생각을 하다가 두번째 단서를 얻고 나서 웹사이트에다가 ls를 치니 무언가 반응을 했다.

Result에 결과가 떳다!! 이제 끝났다고 보면된다.

 

호기심에 find 명령어나 cd 명령어를 쳐봤는데 Result 결과 값이 안나오는 것을 보고 ls 명령어를 쳐서 찾아야 한다는 것을 깨달았다.

 

4. 마무리 및 정답 

몇개 없는 디렉터리라 정말 금방 찾았다.

첫번째 단서에서 얻었던 flag 라는 단어를 쓰면 No!를 Result 하는 것을 알았으니 마지막 flag.txt 경로를 찾고

와일드 카드를 이용해서 파일의 내용, flag를 획득했다.

정답 사용 명령어

cat ./dream/hack/hello/*.txt




---
flag.txt

DH{671ce26c70829e716fae26c7c71a33823feb479f2562891f64605bf68f60ae54}

 

 

'Dreamhack' 카테고리의 다른 글

[Dreamhack] cookie Write-Up  (1) 2024.03.16
[Dreamhack] phpreq Write-Up  (2) 2024.03.15
[Dreamhack] ex-req-ex Write-Up  (2) 2024.03.15
[Dreamhack] blue-whale Write-Up  (3) 2024.03.15
[Dreamhack] 64se64 Wirte-Up  (0) 2024.03.14

https://dreamhack.io/wargame/challenges/872

 

64se64

Description "Welcome! 👋"을 출력하는 html 페이지입니다. 소스 코드를 확인하여 문제를 풀고 플래그를 획득하세요. 플래그 형식은 DH{...} 입니다.

dreamhack.io

문제


"Welcome! 👋"을 출력하는 html 페이지입니다.

소스 코드를 확인하여 문제를 풀고 플래그를 획득하세요.
플래그 형식은 DH{...} 입니다.


 

풀이
1. 문제에서 주어진 웹사이트 접속

문제에서 주어진 웹해킹 문제 사이트 접속 화면









2. Ctrl+U 또는 마우스 오른쪽 클릭 후 페이지 소스보기 클릭

<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Welcome</title>
</head>

<body>
  <h1>Welcome! 👋</h1>
  <form method="POST">
    <input type="hidden" name="64se64_encoding" value="IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwphc2M
    9WzY4LCA3MiwgMTIzLCA5OCwgMTAxLCA0OCwgNTIsIDU0LCA5OCwgNTUsIDUzLCA1MCwgNTAsIDk3LCA5NywgN
    TAsIDEwMSwgNTAsIDU2LCAxMDIsIDUwLCA1NSwgNTQsIDEwMSwgNDgsIDk5LCA1NywgNDksIDQ4LCA1MywgNTA
    sIDQ5LCAxMDIsIDUwLCA1MSwgOTcsIDQ4LCA1MywgNTYsIDU1LCA0OCwgNDgsIDUzLCA5NywgNTYsIDUxLCA1NS
    wgNTUsIDUxLCA1NSwgNDgsIDk3LCA0OSwgNDksIDEwMSwgNTMsIDEwMSwgNTIsIDEwMCwgOTksIDQ5LCA1MywgMT
    AyLCA5OCwgNTAsIDk3LCA5OCwgMTI1XQphcnI9WzAgZm9yIGkgaW4gcmFuZ2UoNjgpXQpmb3IgaSBpbiByYW5nZS
    gwLDY4KToKICAgIGFycltpXT1jaHIoYXNjW2ldKQpmbGFnPScnLmpvaW4oYXJyKQpwcmludChmbGFnKQ==">
  </form>
</body>
</html>

 

 

 

3. value 부분에 base64 방식으로 인코딩 되어있는 코드를 디코딩 시킨 후 결과 값 확인

echo "IyEvdXNyL2Jpbi9lbnYgcHl0aG9uMwphc2M9WzY4LCA3MiwgMTIzLCA5OCwgMTAxLCA0OCwgNTIsIDU0LCA5OCw
gNTUsIDUzLCA1MCwgNTAsIDk3LCA5NywgNTAsIDEwMSwgNTAsIDU2LCAxMDIsIDUwLCA1NSwgNTQsIDEwMSwgNDgsIDk5
LCA1NywgNDksIDQ4LCA1MywgNTAsIDQ5LCAxMDIsIDUwLCA1MSwgOTcsIDQ4LCA1MywgNTYsIDU1LCA0OCwgNDgsIDUzL
CA5NywgNTYsIDUxLCA1NSwgNTUsIDUxLCA1NSwgNDgsIDk3LCA0OSwgNDksIDEwMSwgNTMsIDEwMSwgNTIsIDEwMCwgOT
ksIDQ5LCA1MywgMTAyLCA5OCwgNTAsIDk3LCA5OCwgMTI1XQphcnI9WzAgZm9yIGkgaW4gcmFuZ2UoNjgpXQpmb3IgaSB
pbiByYW5nZSgwLDY4KToKICAgIGFycltpXT1jaHIoYXNjW2ldKQpmbGFnPScnLmpvaW4oYXJyKQpwcmludChmbGFnKQ=="
| base64 --decode > flag


---
cat flag

#!/usr/bin/env python3
asc=[68, 72, 123, 98, 101, 48, 52, 54, 98, 55, 53, 50, 50, 97, 97, 50, 
101, 50, 56, 102, 50, 55, 54, 101, 48, 99, 57, 49, 48, 53, 50, 49, 102, 
50, 51, 97, 48, 53, 56, 55, 48, 48, 53, 97, 56, 51, 55, 55, 51, 55, 48, 
97, 49, 49, 101, 53, 101, 52, 100, 99, 49, 53, 102, 98, 50, 97, 98, 125]
arr=[0 for i in range(68)]
for i in range(0,68):
    arr[i]=chr(asc[i])
flag=''.join(arr)
print(flag)

 

출력 결과물 확인 시 python 코드가 출력되는 것을 볼 수 있다.

 

 

 

 

 

 

 

 

4.  디코딩한 출력 결과물 python 으로 실행

python flag




DH{be046b7522aa2e28f276e0c910521f23a0587005a8377370a11e5e4dc15fb2ab}

 

DH{..} 형식의 플래그 출력

 

 

 

'Dreamhack' 카테고리의 다른 글

[Dreamhack] cookie Write-Up  (1) 2024.03.16
[Dreamhack] phpreq Write-Up  (2) 2024.03.15
[Dreamhack] ex-req-ex Write-Up  (2) 2024.03.15
[Dreamhack] blue-whale Write-Up  (3) 2024.03.15
[Dreamhack] baby-linux Write-Up  (1) 2024.03.14

+ Recent posts