목록분류 전체보기 (105)
또 뭐하지
풀이 문제 페이지에 접속하면 위와 같이 나온다. #!/usr/bin/python3 from flask import Flask, request, render_template, g import sqlite3 import os import binascii app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open('./flag.txt', 'r').read() except: FLAG = '[**FLAG**]' DATABASE = "database.db" if os.path.exists(DATABASE) == False: db = sqlite3.connect(DATABASE) db.execute('create table users(userid c..
풀이 문제 웹 페이지에 접속하면 위와 같이 나온다. 제공된 코드를 살펴보면 admin으로 로그인했을 때 flag가 출력되는 것을 알 수 있다. 코드 마지막 부분을 살펴보면 /change_password를 통해 패스워드를 바꿔 admin으로 로그인을 할 수 있을 것 같다. flag 페이지에 를 입력해주었다. 그리고 방금 변경한 패스워드 1234를 입력해서 로그인을 하면, 아래와 같이 flag가 나온 것을 볼 수 있다.
1. OWASP TOP 10 OWASP TOP 10 : OWASP에서 발표하는 가장 중요한 웹 애플리케이션 보안 위협 목록 OWASP TOP 10 (2024) 부적절한 자격 증명 사용(Improper Credential Usage) 불충분한 공급망 보안(Inadequate Supply Chain Security) 보안에 취약한 인증 및 권한 부여(Insecure Authentication/Authorization) 부족한 입력/출력 검증(Insufficient Input/Output Validation) 안전하지 않은 통신(Insecure Communication) 불충분한 개인 정보 보호 제어(Inadequate Privacy Controls) 부족한 바이너리 보호(Insufficient Binary ..
풀이 base64 인코딩은 바이너리를 6자리씩 끊어서 총 2**6 = 64개의 문자로 표현하는 것이다. 주어진 힌트에서는 문자가 총 2**5 =32개이므로 바이너리를 5자리씩 끊어서 문자로 인코딩했다고 추측해볼 수 있다. 즉 base32 인코딩을 한 것이다. dreamhack tool에서 From Base32를 이용할 것이다. 문제에서 힌트가 ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef 라고 주어졌기 때문에 Alphabet을 'A-Za-f='로 설정하고 돌려보면 flag 값을 얻을 수 있다.
풀이 문제 코드를 살펴보니 지난 번에 풀었던 session-basic과 비슷하다. 그 차이를 살펴보니 admin의 session_id을 생성할 때 os.urandom(4).hex()가 아닌 os.urandom(1).hex()를 사용하고 있다. 그 차이가 무엇인지 파이썬을 돌려보니 숫자가 byte 크기를 나타내고 있었다. 그렇다면 admin의 session_id는 작은 범위 내에서 랜덤하게 돌아가니 brute-force를 해야겠다고 생각했다. [버프스위트 설치] Burp Suite (버프 스위트) - 1. 설치 및 사용 방법 1. Burp Suite (버프 스위트) 대표적인 웹 애플리케이션 보안 테스트 도구로 스캐닝을 포함하여 다양한 유형의 보안 테스트 수행이 가능합니다. 주요 기능 중 하나는 웹 브라우저..
클라이언트 사이드 취약점 : 웹 페이지의 이용자를 대상으로 공격할 수 있는 취약점 Cross Site Scripting (XSS) 공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행 할 수 있는 것 -> 이를 통해 세션 정보 탈취하여 임의의 기능 수행 Stored XSS : XSS에 사용되는 악성 스크립트가 서버에 저장되고 서버의 응답에 담겨오는 XSS, 서버의 데이터베이스 또는 파일 등의 형태로 저장된 악성 스크립트를 조회할 때 발생 Reflected XSS : XSS에 사용되는 악성 스크립트가 URL에 삽입되고 서버의 응답에 담겨오는 XSS, 서버가 악성 스크립트가 담긴 요청을 출력할 때 발생, 이용자의 요청에 의해 발생, Click Jacking 또는 Open..
풀이 문제 코드를 살펴보면 쿠키의 sessionid를 통해 username을 받아온다. userid가 admin일 때 flag를 얻을 수 있다. 이때, 어떻게하면 admin의 sessionid를 얻을 수 있을지 알아야한다. 코드의 해당 부분을 살펴보면 서비스를 실행하면 admin의 sessionid가 생성되어 session_storage에 저장되는 것을 알 수 있다. session_strage는 별도의 검증없이 /admin페이지에 접속하면 열람할 수 있다는 사실 또한 알 수 있다. 문제 페이지에 접속하여 /admin페이지에 접속해보면 위와 같이 admin의 sessionid를 알 수 있다. 개발자도구를 통해 빈칸에 sessionid를 만들고 그 값으로 아까 확인한 값을 넣어준다. 그리고 새로고침을 하면 ..
풀이 문제 코드를 살펴보면 username이 'admin' 일 때 flag가 출력되는 것을 알 수 있다. username은 쿠키를 통해서 받아온 값을 그대로 사용하는 것을 확인할 수 있다. 그렇다면 쿠키를 수정하여 admin을 username으로 입력하면 flag를 얻을 수 있다. 코드에서 살펴본 users에 저장된 guest로 로그인을 했다. 그러면 개발자도구의 Application 탭에 새로 생성된 쿠키를 확인할 수 있다. 이 쿠키의 값을 guest 에서 admin으로 수정하고 새로고침을 하면 아래와 같이 플래그가 출력되는 것을 볼 수 있다.