CTF & Wargame(WEB) 40

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

[dreamhack] Beginner file-download-1

웹 서비스 분석사용자가 글을 입력하여 업로드 하면 인덱스 페이지에 리스트 되고, 업로드된 글들을 열람할 수 있다. 엔드포인트 분석/upload@APP.route('/upload', methods=['GET', 'POST'])def upload_memo(): if request.method == 'POST': filename = request.form.get('filename') content = request.form.get('content').encode('utf-8') if filename.find('..') != -1: return render_template('upload_result.html', data='bad characters,..

CTF & Wargame(WEB) 2025.04.14