Dreamhack/Dreamhack Wargame (Challenge)

[1] IT 비전공자 [dreamhack] cookie 문제 풀기

imaginefuture-1 2024. 9. 23. 08:54

 

 

 

 

IT학원에서 만난 조교수님께서 내가 정보보안 쪽을 공부한다니까 공부하면서도 참고하기 좋은 사이트들을 알려주셨다

코딩의 C자도 모르는 IT 비전공자 코린이지만 그래도 고수들의 풀이법을 따라가다 보면 길이 나오지않을까?

라는 생각이 들어 1일 1워게임 챌린지를 해보기로했다 

정확한 풀이법을 원한다면 내 글을 참고하진말고(주의)

 

아~ 코린이가 열심히 머리싸매고 어떻게든 풀려고 해보는구나..라는 도전글로 봐주시길바라며 첫 문제를 시작해본다

 

 

좋아좋아 열심히 해보자고~~

 

 

                                   (실질적인 시작은 9월10일부터 시작해서 네이버 블로그에 업로드 된 글을 들고왔다)

 

 

 

 

 

 

[dreamhack] cookie 문제풀이

[WEB] cookie 문제풀이 쿠키(영어: cookie)란 하이퍼 텍스트의 기록서(HTTP)의 일종으로서 인터넷 사용자가 어떠한 웹사이트를 방문할 경우 그 사이트가 사용하고 있는 서버를 통해 인터넷 사용자의 컴

mokpo.tistory.com

 

일단 이 블로그 글을 보면서 따라했다!

 

문제 제목은 COOKIE다 베이킹 전공인 나로서 쿠키..아주 맛있는 초코칩 쿠키가 먼저 생각났다

그리고 가끔 인터넷하다가 오류뜨면 캐시 및 쿠키를 삭제하세요..해서 삭제했었던 기억이 있다

또 뉴스 사이트였나 그런데 들어가면 쿠키 허용하세요..겁나 창 많이 떠서 취소하면 계속 허용해달라고 떠서 ㅡㅡ

눌러줬던 기억이 있다

뉴진스 내가 만든 쿠키도 있넹

 

그래 그 쿠키는 IT세계에서 뭘까

 

일단 백과사전 정의에서는

HTTP 쿠키(HTTP cookie)란 웹 서버에 의해 사용자의 컴퓨터에 저장되는, '이름을 가진 작은 크기의 데이터'이다.

위키백과

 

https://www.kaspersky.co.kr/resource-center/definitions/cookies

 

여기 글이 쿠키 종류 및 예시 설명이 잘 되어있다

 

 

사용자 이름과 비밀번호 등과 같은 작은 데이터 조각이 있는 텍스트 파일로, 사용자가 네트워크를 이용할 때 사용자의 컴퓨터를 식별하기 위해 사용됩니다. 특정 쿠키는 특정 사용자를 식별하고 해당 사용자의 웹 브라우징 경험을 개선하기 위해 사용됩니다. 쿠키에 저장되는 데이터는 사용자가 연결할 때 서버에서 생성됩니다. 이 데이터에는 사용자와 사용자의 컴퓨터에 고유한 ID가 포함된 레이블이 지정됩니다. 사용자의 컴퓨터와 네트워크 서버 간에 쿠키가 교환되면 서버가 ID를 읽고 사용자에게 어떤 특정 정보를 제공해야 할지 인식합니다.

 

 

사용자 고유 데이터를 줏어와서 음 너는 A이구나 아 A는 이런거 좋아하는구나 이거 정보 줄게 요런 느낌이다

 

 

문제다

 

시스템해킹문제는 모르겠다..웹해킹 링크 일단 클릭

일단 페이지에 접속했다

 

반갑게 맞아준다

로그인 페이지로 들어갔다

ADMIN/ADMIN 아이디, 비밀번호를 입력, 역시 따라해봤지만 안된다

 

 

블로그 글따라 소스코드를 본다

참고로 파이썬 한번도 안해봄

일단 위 문구를 보니 파이썬3으로 뜬다 #!/usr/bin/python3

 

일단 블로그 글을 따라 11번째 줄 GUEST를 확인했다

 

[guest/guest], [admin/{flag}]

출처 입력

 

그니까 요게 어 로그인 할 수 있는 ID가 2개 라는 소리지?

flag는 뭐여..

 

 

프로그래밍 언어 용어로서, 특정 동작을 수행할지 말지 결정하는 (보통 1비트인) 변수를 플래그라고 부른다. 깃발을 신호용으로 (ex 경주, 함선간 신호, 전투시의 신호) 쓰곤 하던 전통에서 따온 용어. 깃발은 '올린다'와 '내린다' 두가지 상태로만 신호를 줄 수 있는 것을 고려하면, 깃발 색깔은? 변수 이름으로 하자 1비트 정보를 저장하거나 전달하기에 최적인 비유이다.[1] 기계어 혹은 어셈블리어에서 처음 사용하기 시작하였으나 C나 자바 등의 고급 프로그래밍 언어에서도 사용하는 용어.

flag 뜻이다

 

 

블로그 글따라 로그인 함수도 확인했다

 

login() 함수를 보게 되면 POST로 로그인 요청을 시도할 시 username과 password를 저장한다.

출처 입력

(if) 만약 주머니에 천원이 있으면 복권을 사고

(elif) 그렇지 않고 만약에 오백원이 있으면 껌을 사고

(else) 그렇지 않으면 그냥 집으로 간다

 

그렇다고한다..

 

일단.. 넘어가자

 

계정이 존재하지 않으면 "not found user" 메세지를 출력하며 이전 페이지로 되돌아간다.

계정이 존재하면 resp 변수에 요청을 응답할 response 페이지를 index 페이지로 만들고,

username으로 쿠키를 생성한다.

except:

return '<script>alert("not found user");history.go(-1);</script>'

if pw == password:

resp = make_response(redirect(url_for('index')) )

resp.set_cookie('username', username)

 

아마 요거 해석인 것 같다

 

 

Index() 함수를 보게 되면 username이라는 쿠키의 값을 받아와서 username 변수에 저장한다.

 

username 변수에 저장된 값이 존재한다면, 서버는 사용자에게 hello 라고 인사할 것이고

username의 값이 admin이 아니라면 "your not admin"이라는 문구를 출력한다.

username의 값이 admin이라면 /flag.txt에 있는 flag 값을 출력해줄 것이다.

def index():

username = request.cookies.get('username', None)

if username:

return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not admin"}')

return render_template('index.html')

요거 해석인듯

일단..완벽한 이해는 넘어가고 게스트로 로그인 시도 따라해봤다

 

GUEST/GUEST

게스트로 맞이해준다 하지만 아직 어드민이아니다

 

블로그 따라 EditThisCookie를 사용했다

 

f12개발자 도구를 사용해도 된다

 

1. f12 2. 어플리케이션 선택 후 3. 쿠키 화면에서 value(값)을 admin으로 변경

 

야호 풀었다

DH는 DREAMHACK 약자였다..

 

https://dreamhack.io/forum/qna/1764/

 

소요시간: 약 1시간 걸린 것같다..

 

머리 아푸다..

막 쿠키 뜻, FLAG뜻 많은 정보들이 머릿속에 들어왔다

쉽지않아..

 

그래도 푼거에 만족한다..첫 문제잖어!

과정에 따라했고 결국 풀었다는것이 중요하다 하하!

 

반복된게 나오다보면 익숙해지겠지

화이팅..!