목록Write-ups (27)
rsp-∞

csrf-1과 대부분의 인터페이스는 동일하지만 사이트에 들어가 보면 로그인을 해 달라는 문장이 크게 나온다. 코드를 살펴보자. #!/usr/bin/python3from flask import Flask, request, render_template, make_response, redirect, url_forfrom selenium import webdriverfrom selenium.webdriver.chrome.service import Serviceimport urllibimport osapp = Flask(__name__)app.secret_key = os.urandom(32)try: FLAG = open("./flag.txt", "r").read()except: FLAG = "[**FL..

사이트에 들어가서 이번에도 vuln(csrf) page 항목에 들어가 본다. 아래와 같이 출력을 볼 수 있다. url을 보면 ' return ''memo_text = ""@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", None) if text: memo_text += text return render_template("memo.html", memo=memo_text)@app.route("/admin/notice_flag")def admin_notice_flag(): global memo_text if request.remote_addr != "127.0...

서버를 생성하고 사이트에 접속하면 전체적인 인터페이스는 똑같지만 여기서 차이가 있다. vuln(xss)page에서 url에 똑같이 ' return ''memo_text = ""@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + "\n" return render_template("memo.html", memo=memo_text)app.run(host="0.0.0.0", port=8000) 이 코드의 /vuln 부분에서 사용자가 입력한 param 값을 직접 출력하지 않고, 정적 html인 param.html로 렌더링한다. 그러므로 xss-1에..

서버를 생성하여 홈페이지를 먼저 본다. 첫 번째 vuln(xss)page 항목에 들어가 보았더니 아래 사진과 같은 알림창이 내려왔다. 1이 나왔는데, 이게 xss 취약점을 가지고 있다는 것을 알려 준다. 위 url을 보면 지금 명령어가 url에 포함되어 해당 스크립트가 실행되고 있다는 것을 알 수 있기 때문이다. 그렇다면 이 페이지는 ' return ''memo_text = ""@app.route("/memo")def memo(): global memo_text text = request.args.get("memo", "") memo_text += text + "\n" return render_template("memo.html", memo=memo_text)app.r..

문제 파일을 다운받고 코드를 살펴본다. #!/usr/bin/python3from flask import Flask, request, render_template, make_response, redirect, url_forapp = Flask(__name__)try: FLAG = open('./flag.txt', 'r').read()except: FLAG = '[**FLAG**]'users = { 'guest': 'guest', 'user': 'user1234', 'admin': FLAG}# this is our session storagesession_storage = {}@app.route('/')def index(): session_id = request.cookies..

문제 설명을 보고 파일을 다운받는다. 코드에서는 드림핵에서 제공하는 웹 서버 상의 취약점을 알 수 있다. #!/usr/bin/python3from flask import Flask, request, render_template, make_response, redirect, url_forapp = Flask(__name__)try: FLAG = open('./flag.txt', 'r').read()except: FLAG = '[**FLAG**]'users = { 'guest': 'guest', 'admin': FLAG}@app.route('/')def index(): username = request.cookies.get('username', None) if username..

가장 먼저 문제 파일을 다운받고 압축을 푼다. about html 파일을 클릭하면 한 웹 페이지로 이동한다. F12 버튼을 누르고 개발자 도구를 열어 보자. 처음에는 스크롤만 내리면서 플래그를 찾아보려고 했는데 나오지 않았다. 그러다가 Ctrl + Shift + F 단축어를 사용하여 검색창을 열 수 있다는 걸 알았다. 검색창을 열고 우리가 찾아야 할 플래그의 형식이 DH라는 걸 알고 있으니 DH를 검색해 본다. 다음과 같이 플래그를 획득할 수 있었다.

버퍼 오버플로우 취약점이 존재하는 문제임을 알 수 있다. 문제 파일을 다운받으면 도커 파일과 cat, flag라는 이름의 텍스트 파일, bof라는 바이너리 파일이 존재한다. 도커 파일을 열어 보자.FROM ubuntu:22.04@sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05fENV user bofENV chall_port 31337RUN apt-get updateRUN apt-get -y install socatRUN adduser $userADD ./deploy/flag /home/$user/flagADD ./deploy/$user /home/$user/$userADD ./deploy/cat /home/$user/catRU..

해당 문제의 C 파일을 열어 어떻게 동작하는지 살펴보자.#include #include #include #include #include #define FLAG_SIZE 0x45void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL, _IONBF, 0);}int main(int argc, char *argv[]) { int len; char * fake_flag_addr; char buf[0x20]; int fd; char * real_flag_addr; initialize(); fd = open("./flag", O_RDONLY); len = FLAG_SIZE; fake..

문제 이름이 awesome-basics인 만큼 문제 설명 또한 간단하고, 문제가 기초적인 BOF 취약점을 가지고 있음을 알 수 있다. 문제 파일을 다운로드 받고 C 파일을 열어 보았다. // Name: chall.c// Compile: gcc -zexecstack -fno-stack-protector chall.c -o chall#include #include #include #include #include #include #define FLAG_SIZE 0x45void alarm_handler() { puts("TIME OUT"); exit(-1);}void initialize() { setvbuf(stdin, NULL, _IONBF, 0); setvbuf(stdout, NULL,..