Write-up

XSS?

스크린샷 2022-02-07 오전 12.53.10.png

처음 소스코드와 이 화면을 보았을 시, 먼저 XSS공격을 떠올릴 수 있다.

그래서 다음과 같은 코드를 시도해보았다.

<script>alert(1)</script>

해당 코드를 적은 후, Create 버튼을 눌러 넣었고, 정상대로 alert가 작동이 되는 걸 확인할 수 있다.

그러나, 해당 코드를 자세히 보았을때, 클라이언트에서 token 및 env 변수를 탈취할 수 없다는 점에서

XSS공격은 아니라는 말이 된다.

본 풀이

이번 문제는 코드를 잘 보고, crypto의 함수에 대한 대략적 파악이 중요하다.

id는 생성당시에 바로 만들어지기에, 0이 가장 확실하며, 이에 대한 token이 있어야 해당 포스트에 접근할 수 있는 구조이다.

그렇다면, token을 만드는 코드를 다시 중점적으로 보자.

constructor() {
  this.notes = [];
  this.secret = `secret-${crypto.randomUUID}`;
}
generateToken(id) {
  return crypto
    .createHmac('sha256', this.secret)
    .update(id.toString())
    .digest('hex');
}

constructor내부에서 secret변수에 secret-${crypto.randomUUID}를 저장하고 있다.

그리고 generateToken함수에서 id를 받고 이 id를 sha256으로 암호화하고 있음을 알 수 있다.