전체 글 72

[개념공부] CSP란?

1. CSP(Content Security Policy)란?정의웹 페이지에서 허용된 리소스(스크립트, 스타일, 이미지 등)의 **출처(origin)**를 엄격히 통제하는 보안 헤더 정책목적XSS, 데이터 인젝션 공격 등을 사전 차단하고, 다른 보안 기법과 결합해 방어 레벨을 높임2. CSP 사용 시 차단 항목2-1. 인라인 코드(Inline code) 지양 클릭 링크 2-2. 문자열 → 코드 변환 메커니즘 지양금지 대상eval()new Function(...)setTimeout("alert('XSS')", 1000), setInterval("…", 1000) 등함수 참조 자체를 넘기면 CSP 차단 대상이 아님 setTimeout(alert, 1000);3. CSP 헤더 구성Content-Securit..

이론 2025.06.27

[개념공부] URL 정규화

URL 정규화(URL normalization)는 동일한 자원을 가리키지만 표현 방식이 다른 URL들을 일관된 표준 형식으로 변환하는 과정https://WWW.Example.com:443/path/./to/../page.php?lang=en→ https://www.example.com/path/page.php?lang=en URL 정규화 주요 과정1. 스킴(Scheme) 및 호스트 소문자화URL의 스킴(http, https)과 호스트 이름은 대소문자를 구분하지 않으므로 소문자로 통일합니다.예시 → 2. 기본 포트 제거HTTP의 기본 포트 80, HTTPS의 기본 포트 443은 명시되어 있더라도 생략 가능하므로 제거합니다.예시 → → 3. 경로(Path) 정리. (현재 경로), .. (상위 경로) 등을..

이론 2025.06.19

[문제풀이] XSS Filtering Bypass Advanced

XSS 취약점이 발생하고 있는 vuln(xss) page flag 페이지는 이곳에서 memo를 이용해 해당 호스트의 쿠키값을 memo에 입력하면 flag를 띄우는 페이지이다.URL에 param=라고 작성하니 filtered!!!라는 문구가 나타난다.필터링을 하고 있다는 의미겠는데, 일단 소스코드를 확인해보자. def check_xss(param, cookie={"name": "name", "value": "value"}): url = f"http://127.0.0.1:8000/vuln?param={urllib.parse.quote(param)}" return read_url(url, cookie)def xss_filter(text): _filter = ["script", "on", "ja..

보안 실습 2025.05.28

[보안실습] XSS game: Level 5

Level 5 일단 Sign up을 클릭해서 들어가면 email을 입력할 수 있는 칸이 나오고Next >> 를 클릭해 다음으로 넘어가면 이와 같은 화면이 나오고 다시 처음화면으로 리다이렉트된다. burp suite intercept를 켜고 처음 화면에서 sign up을 클릭하여 request와 response를 잡아 확인을 해보니 request 내 파라미터중 next라는 파라미터의 값 confirm이response의 이부분을 변조해서 alert()를 실행시켜보자 이기 때문에 javascript: 를 이용해서 alert()를 실행시키면 될 것 같다.가 되도록 만들어주기 위해서 javascript:alert() 작성이후 Next를 클릭해주면 성공

보안 실습 2025.05.27

[보안실습] XSS game: Level 4

Level 4timer= 파라미터에 값을 넣으면 해당 초가 지나고 Time is up! 이라는 팝업창이 뜨게된다.일단 코드를 확인해보자. 코드를 확인해보니 이 줄의 {{timer}} 부분에 timer 파라미터에 적은 값이 들어간다는 사실을 알 수 있다. 스크립트를 실행시키기 위해서 이렇게 코드가 되도록 작성해주기로 하였다. 그러기 위해서 timer에 ');alert();(' 작성을 하고 요청을 보내면엥 스크립트가 실행되지 않는 것을 확인 그리고 timer의 값이 뜨는 부분을 살펴보면 ')만 써져있는 것을 확인할 수 있는데 세미콜론(;) 이후부터는 무시됐다는 걸 알았다.여기서 세미콜론에 대해서 이야기해보자면URL에서 세미콜론(;)은 경로 매개변수(Path Parameter)를 구분하는 용도로 사용될 수..

보안 실습 2025.05.26

[보안실습] XSS game: Level 1~Level 3

Level 1 설명에 이스케이프 처리가 안되어있다고 작성되어있는 것을 보고 스크립트가 실행되면서 다음단계로 넘어갈 수 있게 되었다. Level 2 해당 문제에서는 태그를 작성해서 넣어보니 태그 자체는 실행이되는지 내가 작성한 글에 아무것도 뜨지 않는 것을 확인하였다. 그러나 실행 명령어인 alert()가 작동하지 않는 것을 보니 태그 안에 있는 내용을 제거하거나 실행되지 못하도록 막고 있나보다. 그래서 다시 로 진행하니다음단계로 넘어갈 수 있었다. Level 3\URL을 조작해야한다는데, 일단 소스코드를 먼저 확인해보자.소스코드를 확인해보니"; 라고 되어있는 것을 확인내가 검색하는 값을 넣는 것을 확인할 수 있는데이 상황에서 alert()를 실행시키기 위해서는 .jpg가 되도록 만든다면 alert()가..

보안 실습 2025.05.25

[실습기록] bwapp HTML Injection - Reflected (POST)

low> 처음 해당 웹 페이지에 들어가면 First name과 Last name을 넣으라는 내용이 적혀있으니 임의로 값을 넣어보았다. 값을 넣으면 출력이 되는 구조인 것 같다.를 넣으니 가 이스케이프 처리되고 있다는 사실을 확인하였다.이를 우회하기 위해서 해당 스크립트문을 URL 인코딩하여 작성하였다. %3c%73%63%72%69%70%74%3e%61%6c%65%72%74%28%31%29%3c%2f%73%63%72%69%70%74%3e 태그 전에 이스케이프처리된 <script라고 작성된 부분은 오타 스크립트문이 잘 실행되는 것을 확인하였다.

보안 실습 2025.05.23

[실습기록] bwapp HTML Injection - Reflected (GET)

low > 처음 해당 웹 페이지에 들어가면 First name과 Last name을 넣으라는 내용이 적혀있으니 임의로 값을 넣어보았다. 이름 입력 후 Go 버튼을 클릭하면 밑에 Welcome name name 이라는 문장이 뜨게 되는 것을 알 수 있다.low 단계이기 때문에 필터링이 걸려있는지 확인해보기 위해서 를 넣고 확인해보자.이번에는 스크립트가 실행되는 것이 아니라 결과값에 작성했던 값이 그대로 출력되고 있는 것을 확인스크립트가 실행되지 않은 이유를 살펴보기 위해 이름을 보냈던 요청에 대한 response 값을 확인해보기로 했다.값을 확인해보니 서버가 문자를 이스케이프 처리하고 있는 것을 확인브라우저가 이스케이프 해석해서 와 같이 보였나보다.이를 우회하기 위해서 URL Encoding 시도 인코..

보안 실습 2025.05.22

[문제풀이] Dreamhack ex-reg-ex

일단 사이트를 확인해보자.input으로 어떤 값을 넣었을 때 조건이 맞는다면 flag 값이 나오는 구조 일 것 같다.하지만, 어떤 값을 넣어야할지 감이 안잡히니 코드를 한번 봐보자. //app.py#!/usr/bin/python3from flask import Flask, request, render_templateimport reapp = Flask(__name__)try: FLAG = open("./flag.txt", "r").read() # flag is here!except: FLAG = "[**FLAG**]"@app.route("/", methods = ["GET", "POST"])def index(): input_val = "" if request.method ..

보안 실습 2025.05.21

[문제풀이] Dreamhack phpreg

먼저 해당 페이지를 확인해보면 Step1 페이지에서는 Nickname과 Password를 입력해야 하며, 올바른 값을 넣으면 Step2로 넘어간다.어떤 값을 넣어야할지 감이 안잡히니 코드를 확인해보자. //Step2.php // POST request if ($_SERVER["REQUEST_METHOD"] == "POST") { $input_name = $_POST["input1"] ? $_POST["input1"] : ""; $input_pw = $_POST["input2"] ? $_POST["input2"] : ""; // pw filtering if (preg_match("/[a..

카테고리 없음 2025.05.20