목록Write-up/Web (10)
또 뭐하지
풀이 문제 페이지에 들어가면 위와 같은 화면이 나온다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): co..
풀이 문제 페이지에 접속하면 위와 같다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}): cookie.upd..
풀이 문제 페이지에 접속하면 위와 같은 화면을 확인할 수 있다. #!/usr/bin/python3 from flask import Flask, request, render_template from selenium import webdriver from selenium.webdriver.chrome.service import Service import urllib import os app = Flask(__name__) app.secret_key = os.urandom(32) try: FLAG = open("./flag.txt", "r").read() except: FLAG = "[**FLAG**]" def read_url(url, cookie={"name": "name", "value": "value"}..
풀이 문제 페이지에 접속하면 위와 같이 나온다. #!/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가 나온 것을 볼 수 있다.
풀이 문제 코드를 살펴보니 지난 번에 풀었던 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 (버프 스위트) 대표적인 웹 애플리케이션 보안 테스트 도구로 스캐닝을 포함하여 다양한 유형의 보안 테스트 수행이 가능합니다. 주요 기능 중 하나는 웹 브라우저..
풀이 문제 코드를 살펴보면 쿠키의 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으로 수정하고 새로고침을 하면 아래와 같이 플래그가 출력되는 것을 볼 수 있다.