분류 전체보기 80

level 3 CSP Bypass Advanced

이 문제도 이전에 풀었던 xss, csp bypass 문제와 유사하지만 add_header 함수가 조금 다르다. add_header() 함수 분석@app.after_requestdef add_header(response): global nonce response.headers['Content-Security-Policy'] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-{nonce}'; object-src 'none'" nonce = os.urandom(16).hex() return response response.headers[..

CTF & Wargame(WEB) 2025.04.18

level 2 CSP Bypass

이번 문제도 저번에 풀었던 xss 문제들과 구조는 거의 유사하다. 하지만 다른점이 있다면 xss 필터링 대신 CSP 기법이 적용되었다는 것이다.add_header() 함수 분석@app.after_requestdef add_header(response): global nonce response.headers[ "Content-Security-Policy" ] = f"default-src 'self'; img-src https://dreamhack.io; style-src 'self' 'unsafe-inline'; script-src 'self' 'nonce-{nonce}'" nonce = os.urandom(16).hex() return response 해당 함수에 ..

CTF & Wargame(WEB) 2025.04.18

XSS Filtering Bypass Advanced level 3

문제는 이전에 풀었던 xss 문제들과 구조는 거의 유사하다. 하지만 달라진 점이 있다면 필터링을 하는 키워드가 더 많아졌다는 것이다. xss_filter() 함수 분석def xss_filter(text): _filter = ["script", "on", "javascript"] for f in _filter: if f in text.lower(): return "filtered!!!" advanced_filter = ["window", "self", "this", "document", "location", "(", ")", "&#"] for f in advanced_filter: if f in text.lower(): ..

CTF & Wargame(WEB) 2025.04.18

level 1 XSS Filtering Bypass

저번 강의에서 풀었던 xss-1 문제와 거의 유사하지만 새로운 xss 필터링 기법이 적용되어 있다. xss_filter 함수 분석def xss_filter(text): _filter = ["script", "on", "javascript:"] for f in _filter: if f in text.lower(): text = text.replace(f, "") return textscript, on, javascript: 이 세개의 코드들을 하나씩 필터링하고 있는 것을 확인할 수 있다. 따라서 해당 키워드들을 우회해주면 쉽게 flag를 획득할 수 있을 것이다. 익스플로잇xss_filter 함수를 확인해보면 script, on ,javascript: 이 세가..

CTF & Wargame(WEB) 2025.04.17

Command Injection Advanced level 1

cache file: {$cache_file}"; echo ''. htmlentities($result) .''; return; } }else{ ?>사용자가 입력한 url에 http라는 문자가 없다면 http only있다면 result = curl [사용자 입력값] 사용자가 입력한 값을 md5로 인코딩하고 ./cache/ 경로에 저장그리고 curl [사용자 입력값]의 결과를 ./cache/md5(url)에 저장 취약점 분석url로 사용자 입력을 받을 때 입력을 검증하지 않음. --> curl로 웹셸 업로드 가능 익스플로잇https://github.com/WhiteWinterWolf/wwwolf-php-web..

CTF & Wargame(WEB) 2025.04.16

My Best Friend level 1

웹 서비스 분석문제에서 제공하는 url에 접속하게 되면 위와 같은 화면을 볼 수 있다. 사용자가 인삿말을 작성하면 그에 대한 응답을 출력해준다.예를 들어서 사용자가 hello라는 요청을 보내면 응답: hello ❤️ 라고 해당 페이지에 출력되는 것을 확인할 수 있다. 엔드포인트 분석/apiapp.get('/api', (req, res) => { if (req.ip !== '::1') return res.send('No'); const isAdmin = Number(req.query.admin); console.log('isAdmin', isAdmin); if (isAdmin !== 0) { // admin이면 flag 출력 return res.send(FLAG); } return res...

CTF & Wargame(WEB) 2025.04.16

session beginner

웹 서비스 분석문제를 열업면 위와 같은 로그인 페이지가 뜬다. 그래서 만약 id : guest, pw : guest로 로그인 해보면Hello guest, you are not adminindex page에 위와 같은 문구를 띄워준다. 따라서 admin 계정으로 로그인하여 flag를 찾는 문제인 것 같다. 엔드포인트 분석/login@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'GET': return render_template('login.html') elif request.method == 'POST': username = request.form.get('username')..

CTF & Wargame(WEB) 2025.04.14

web-misconf-1 beginner

위와 같은 로그인 창이 뜬다. 문제 파일을 확인해보면[security]# disable creation of admin user on first start of grafanadisable_initial_admin_creation = false# default admin user, created on startupadmin_user = admin# default admin password, can be changed before first start of grafana, or in profile settingsadmin_password = admin# used for signingsecret_key = SW2YcwTIb9zpOOhoPsMm라는 정보가 적혀있다. 따라서 id : admin, pw : adm..

CTF & Wargame(WEB) 2025.04.14

pathtraversal beginner

웹 서비스 분석사용자에게 userid를 입력 받고, 입력받은 유저의 정보를 표시해주는 기능이 있는 웹 사이트이다. 엔드포인트 분석/get_info/api/api/flag/api/user//get_info@app.route('/get_info', methods=['GET', 'POST'])def get_info(): if request.method == 'GET': return render_template('get_info.html') elif request.method == 'POST': userid = request.form.get('userid', '') info = requests.get(f'{API_HOST}/api/user/{userid}').te..

CTF & Wargame(WEB) 2025.04.14

blind-command level 2

웹 서비스 분석#!/usr/bin/env python3from flask import Flask, requestimport osapp = Flask(__name__)@app.route('/' , methods=['GET'])def index(): cmd = request.args.get('cmd', '') if not cmd: return "?cmd=[cmd]" if request.method == 'GET': '' else: os.system(cmd) return cmdapp.run(host='0.0.0.0', port=8000)사용자에게 받은 입려을 cmd 변수에 저장한다.만약 사용자가 입력을 하지 않았으면 ?cmd=[cmd] 출력그리고..

CTF & Wargame(WEB) 2025.04.14