2. Session

2022. 1. 4. 20:15·Wargame
728x90
반응형

이번에는 session쪽 워게임 문제를  풀어볼 것이다

출처는 dreamhack.io 홈페이지 wargame - session 문제이다

 

드림핵에서 열어주는 문제 서버로 들어가서 문제를 풀어볼 것이다.

문제는 간단하다 admin 계정으로 로그인에 성공하면 FLAG를 획득할 수 있고, 그 값을 제출하면 된다.

우선 문제 파일을 다운로드 받고 뜯어봤다

#!/usr/bin/python3
from flask import Flask, request, render_template, make_response, redirect, url_for

app = Flask(__name__)

try:
    FLAG = open('./flag.txt', 'r').read()
except:
    FLAG = '[**FLAG**]'

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

session_storage = {
}

@app.route('/')
def index():
    session_id = request.cookies.get('sessionid', None)
    try:
        username = session_storage[session_id]
    except KeyError:
        return render_template('index.html')

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

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'GET':
        return render_template('login.html')
    elif request.method == 'POST':
        username = request.form.get('username')
        password = request.form.get('password')
        try:
            pw = users[username]
        except:
            return '<script>alert("not found user");history.go(-1);</script>'
        if pw == password:
            resp = make_response(redirect(url_for('index')) )
            session_id = os.urandom(4).hex()
            session_storage[session_id] = username
            resp.set_cookie('sessionid', session_id)
            return resp 
        return '<script>alert("wrong password");history.go(-1);</script>'

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

우선 login 함수를 보면 4바이트의 HEX값으로 세션 아이디를 설정하는 것을 확인할 수 있다.

그런데 admin의 경우에는 1바이트의 HEX 값으로 설정하는 점에서 차이를 느낄 수 있었다.

따라서 admin의 세션아이디는 1바이트의 HEX값으로 설정되어 있는것을 브루트포싱 공격을 시도하기로 했다.

1~F,1~F 두 조합으로 공격을 진행했다. 공격은 Burp suite로 진행했다.

 

user로 로그인 하는 과정에서  sessionid 부분을 백터로 공격을 0~E 로 진행했다.

 

 

위와 같이 공격을 진행하면 길이가 다른 response 값이 나오고 그 값을 보면

 

 이렇게 flag를 탈취한 것을 알 수 있다.

띠롱 성공 !

728x90
반응형

'Wargame' 카테고리의 다른 글

5. basic_exploitation_001  (0) 2022.01.28
4. basic_exploitation_000  (0) 2022.01.28
3. XSS-2  (0) 2022.01.09
(워게임 시작) 1. Cookie  (0) 2021.12.26
*wargame*  (0) 2021.12.15
'Wargame' 카테고리의 다른 글
  • 4. basic_exploitation_000
  • 3. XSS-2
  • (워게임 시작) 1. Cookie
  • *wargame*
IgoYamewrong
IgoYamewrong
    반응형
    300x250
  • IgoYamewrong
    Yame-is-Wrong
    IgoYamewrong
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 정보보안기사
      • 보안뉴스
      • 프로그래밍
        • 백준-파이썬
        • 프로그래머스-파이썬
        • DP
        • DFS,BFS
        • GREEDY
        • 개념
      • 안드로이드
      • Wargame
      • 웹 개념
      • 시스템 개념
      • 리버싱 개념
      • CTF
      • 프로젝트
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    syscall
    DreamHack
    x86
    코테
    Python
    카나리 우회
    location.href
    백준
    document.cookie
    프로그래머스
    포너블
    드림핵
    programmers
    쿠키
    파이썬
    CTF
    pwntools
    rao.c
    알고리즘
    mobsf
    Web
    자료구조
    네트워크 스캐닝
    SECCON
    XSS
    코딩테스트
    wargame
    케이쉴드주니어
    rao
    pwn
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
IgoYamewrong
2. Session
상단으로

티스토리툴바