본문 바로가기

Web Hacking

(91)
[Dreamhack] Just read flag 공개키 접속을 ssh로 dream 계정에 접속하면 된다. 문제 파일로 개인키가 주어진다. 해당 키를 내 서버에 등록하고 접속해주면 된다. id_rsa파일에 개인키 등록 후 접속 cat이 안 돼서 more 명령어로 열었다. 👆 python으로 읽기
[Dreamhack] EZ_command_injection write up let's go  #!/usr/bin/env python3import subprocessimport ipaddressfrom flask import Flask, request, render_templateapp = Flask(__name__)@app.route('/', methods=['GET'])def index(): return render_template('index.html')@app.route('/ping', methods=['GET'])def ping(): host = request.args.get('host', '') try: addr = ipaddress.ip_address(host) except ValueError: error_msg = 'I..
[Dreamhack] Dream Gallery write up 위 문제는 flag가 루트 디렉토리 밑에 존재한다. 코드 ㄱㄱ from flask import Flask, request, render_template, url_for, redirectfrom urllib.request import urlopenimport base64, osapp = Flask(__name__)app.secret_key = os.urandom(32)mini_database = []@app.route('/')def index(): return redirect(url_for('view'))@app.route('/request')def url_request(): url = request.args.get('url', '').lower() title = request.args.g..
[Dreamhack] filestorage write up 한번 봅시다아  코드 ㄱㄱ const express=require('express');const bodyParser=require('body-parser');const ejs=require('ejs');const hash=require('crypto-js/sha256');const fs = require('fs');const app=express();var file={};var read={};function isObject(obj) { return obj !== null && typeof obj === 'object';}function setValue(obj, key, value) { const keylist = key.split('.'); const e = keylist.shift(); if ..
[Dreamhack] crawling write up 서버에 접속해보자 코드를 보면 #app.pyfrom re import splitimport socketimport requestsimport ipaddressfrom urllib.parse import urlparsefrom flask import Flask, request, render_templateapp = Flask(__name__)app.flag = '__FLAG__'def lookup(url): try: return socket.gethostbyname(url) except: return Falsedef check_global(ip): try: return (ipaddress.ip_address(ip)).is_global except:..
[Dreamhack] file-csp-1 write up 문제 서버를 보면 Test CSP와 Verify CSP가 존재한다. CSP 헤더를 맞게 설정한 후 테스트하는 창과 검증하는 창인 것 같다. #!/usr/bin/env python3 import os import shutil from time import sleep from urllib.parse import quote from flask import Flask, request, render_template, redirect, make_response from selenium import webdriver from flag import FLAG APP = Flask(__name__) @APP.route('/') def index(): return render_template('index.html') @AP..
[Dreamhack] baby-sqlite write up 나도 숙련된 웹해커가 되고 싶어 문제 서버 접속 시 기본적인 로그인 화면이 나온다. 로그인 로직 처리 부분만 코드를 보게 되면 uid, upw만 폼에서는 입력이 가능하지만 level도 인자로 받고 있다. 키워드를 보면 대부분 필터링을 하고 있다. 우선 싱글쿼터도 필터링 되고 있어서 탈출은 불가능하다. level은 integer로 정의 되고 있어서 싱글쿼터로 감싸져 있지 않아 탈출할 필요가 없다. 이 부분을 공략해야 된다. 대충 페이로드를 짜보면 level=1/**/union/**/select('admin') 근데, 위 WAF에서 select를 필터링하고 있지만 드림핵 강의 중 WAF Bypass 부분을 보면 select를 대신할 만한 함수를 알려준다. ,도 필터되고 있따. 👇 페이로드 level=1/**..
[Dreamhack] chocoshop write up 바로 코드를 보자. from flask import Flask, request, jsonify, current_app, send_from_directory import jwt import redis from datetime import timedelta from time import time from werkzeug.exceptions import default_exceptions, BadRequest, Unauthorized from functools import wraps from json import dumps, loads from uuid import uuid4 r = redis.Redis() app = Flask(__name__) # SECRET CONSTANTS # JWT_SECRET = 'J..