드림핵

CSRF (Cross-Site Request Forgery) 사이트 간 요청 위조의 줄임말로 인증된 사용자가 웹 애플리케이션에 특정 요청을 보내도록 유도하는 공격 행위이다 이 문제에서는 비밀번호를 바꾸는데 필요한 세션 아이디를 공격자가 만들어서 권한을 얻어 비밀번호를 변경하여 플래그를 취득하는 방식으로 진행된다 @app.route("/") def index(): session_id = request.cookies.get('sessionid', None) try: username = session_storage[session_id] except KeyError: return render_template('index.html', text='please login') return render_template(..
Description 파일 업로드 기능을 악용하여 서버의 권한을 획득하세요 ! 아파치 웹서버를 이용하는 파일 업로드 사이트에 특정한 조건의 파일을 업로드 하거나 웹 서버 디렉터리를 탐색해서 해결하는 문제같다. 이렇게 생긴 사이트가 나오고 ‘Choose a file’을 누르면 컴퓨터에 있는 파일을 고를 수 있는 창이 뜨고 그 파일을 ‘submit’버튼으로 업로드 하는 것 같다.
이름과 문제 설명을 보니 대충 웹서버 홈 디렉토리에 있는 파일들을 찾아보며 플래그를 출력하는 문제 같다. #!/usr/bin/python3 from flask import Flask, request, render_template, abort from functools import wraps import requests import os, json users = { '0': { 'userid': 'guest', 'level': 1, 'password': 'guest' }, '1': { 'userid': 'admin', 'level': 9999, 'password': 'admin' } } def internal_api(func): @wraps(func) def decorated_view(*args, **kw..
#!/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 char(100), userpassword char..
#!/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 } # this is our session storage session_storage = { } @app.route('/') def index(): session_id = request.cookies.get('sessionid', None) try: ..
이 문제의 파일을 열어보면 각각 ‘index.php’, ‘flag.php’, check.php’ 이렇게 세 개의 php파일이 있는데, 해결하기 위해서는 ‘check.php’ 파일만 보면 된다. Type c-j Index page 위 코드는 ‘check.php’의 코드이다. 위 사진은 사이트의 모습이다 id와 password에 문자열을 넣고 제출을 누르면 require_once('flag.php'); error_reporting(0); $id = getRandStr(); $pw = sha1("1"); // POST request if ($_SERVER["REQUEST_METHOD"] == "POST") { $input_id = $_POST["input1"] ? $_POST["input1"] : ""; $i..
password : view-source 위 코드를 보면 $password = sha1(md5(rand().rand().rand()).rand()); ’password’는 rand함수를 사용하여 난수를 세 번 생성하고, md5함수를 사용하여 세 개의 난수를 합쳐서 문자열로 만들고 md5해시로 변환합니다. 다시 한 번 rand함수로 난수를 만들어서 앞서 만들어진 md5 해시 문자열에 추가합니다. 마지막으로 위의 문자열을 sha함수를 사용하여 sha-1 해시로 변환해서 저장하는 코드입니다. strcmp($_POST['password'], $password) == 0 그리고 이 코드를 통해 strcmp함수를 써서 $password와 입력받은 password와 비교해서 같으면 0을 출력하므로 0이 나온다면 Fl..
#!/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[ses..
쿼딩~
'드림핵' 태그의 글 목록