본문 바로가기

드림핵

[드림핵 워게임] session

위의 문제를 다음과 같은 과정으로 풀어보았다.

 

 

1. 페이지의 기능을 확인한다.

페이지에 접속했을 때 처음 뜨는 화면이다.

 

 

상단 메뉴바에서 Login을 클릭하면 로그인 폼이 뜬다.

 

 

users = {
    'guest': 'guest',
    'user': 'user1234',
    'admin': FLAG
}

코드를 살펴보면 이미 등록되어 있는 계정이 3개 있는 것을 볼 수 있다.

 

 

guest 계정으로 로그인해본다.

 

 

Hello guest, you are not admin이라는 문구가 뜬다.

 

 

user 계정으로도 로그인해본다.

 

 

Hello user, you are not admin이라는 문구가 뜬다.

 

admin 계정으로는 로그인을 할 수가 없다. 패스워드가 코드에 드러나있지 않기 때문이다.

 

 

 

2. 코드를 분석한다.

if __name__ == '__main__':
    import os
    session_storage[os.urandom(1).hex()] = 'admin'
    print(session_storage)
    app.run(host='0.0.0.0', port=8000)

admin의 세션이 생성되는 부분의 코드이다. 코드를 살펴보면 admin 세션 값이 os.urandom(1).hex() 로 구성되어 있다. os.urandom(1).hex()는 16진수(알파벳 abdef와 숫자 0123456789)로 이루어진 2개의 랜덤값을 의미한다.

 

이렇게 랜덤으로 만들어진 admin의 session id를 찾아 request를 보내면 로그인된 페이지를 response 받을 수 있다.

admin의 session id를 찾기 위해 브루트 포스 공격을 시도할 것이다.

 

•브루트 포스 공격이란?

브루트 포스(brute force)는 조합 가능한 모든 문자열을 하나씩 대입해보는 무차별 대입 공격이다. 키 전수조사(exhaustive key search)라고도 한다.

 

 

 

3. 버프스위트를 준비시킨다.

버프스위트를 켜고 처음 뜨는 창에서 Next를 클릭한다.

 

 

그 다음에 뜨는 창에서 Start Burp를 클릭한다.

 

 

상단 메뉴바에서 Proxy 클릭 > 그 아래 메뉴바에서 Options 클릭

Proxy Listeners에서 Interface가 127.0.0.1:8080 으로 되어있는 것을 확인한다.

 

 

스크롤을 내리면 Intercept Client Requests Intercept Server Responses을 볼 수 있다.

초기 상태에는 Enabled 체크박스가 하나씩만 체크되어있는데, 나머지 체크박스도 모두 클릭하여 활성화해준다.

 

 

이제 메뉴바에서 Intercept로 이동한다.

Intercept is off 를 클릭해서 Intercept is on으로 바꿔주고,

Open Browser를 클릭해서 버프스위트 내에서 브라우저를 열어준다.

 

 

드림핵 페이지의 주소를 오픈한 버프스위트 내부 브라우저에 복사, 붙여넣기 하고 로그인 페이지에 접속하여 guest 혹은 user 계정으로 로그인한다.

 

 

로그인이 되었다.

 

 

메뉴바의 HTTP history 를 클릭하고, 히스토리 중에서 GET 메소드로 요쳥된 기록을 클릭한다.

 

 

 

4. request 정보를 Intruder로 보내어 브루트 포스 공격을 한다.

Request 에서 우클릭하여 Send to Intruder를 클릭한다.

 

 

상단 메뉴바에 있는 Intruder 로 들어가서 Cookie의 sessionid가 표시되어 있는 것을 확인한다.

 

 

메뉴의 Payloads를 클릭하고 Payload Sets 에서 Payload type을 Brute forcer로 설정하고, Payload Options [Brute forcer] 에서 Character set을 16진수 숫자에 해당하는 a~f, 0~9로 설정하고, 우리가 찾고자 하는 session id가 알파벳이나 숫자 2개로 이루어진 값이므로 페이로드의 길이는 2로 설정한다.

그리고 Start attack을 클릭한다.

 

 

 

5. response 데이터의 Length가 다른 것을 찾아 flag를 확인한다.

문자열이 차례대로 생성되며 무차별 대입 공격이 이루어진다.

일반 session id에 대해서는 응답되는 데이터의 길이가 1417로 뜬다. 그러다가 응답되는 데이터의 길이가 다른 것이 뜬다. 이것이 flag 값을 포함하는 응답 데이터이다.

 

응답 데이터의 길이가 다른 페이로드를 클릭하고 아래에서 Response 탭을 눌러 데이터를 살펴보면 flag를 확인할 수 있다.

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

[드림핵 워게임] funjs  (0) 2022.11.18
[드림핵 워게임] login-1  (0) 2022.11.18
[드림핵 워게임] simple-ssti  (0) 2022.11.11
[드림핵 워게임] php-1  (0) 2022.11.11
[드림핵 워게임] proxy-1  (0) 2022.11.11