2026. 3. 25. 14:30ㆍ보안/Web security Academy
Lab: Stored DOM XSS
This lab demonstrates a stored DOM vulnerability in the blog comment functionality. To solve this lab, exploit this vulnerability to call the alert() function.
(이 실험실은 블로그 댓글 기능에 저장된 DOM 취약점을 보여줍니다. 이 실험실을 해결하려면 이 취약점을 이용해 경고() 함수를 호출하세요.)
Stored DOM XSS
- 저장 (Store): 해커가 게시판 댓글, 프로필 자기소개, 방문록 등에 악성 스크립트를 작성해서 서버로 보냅니다. 서버는 이 코드를 데이터베이스(DB)에 얌전히 저장합니다.
- 전달 (Transfer): 일반 사용자가 해당 게시글이나 프로필 페이지에 접속합니다. 서버는 DB에 저장되어 있던 악성 코드를 사용자 브라우저로 내려보냅니다.
- 실행 (Execution): 브라우저에 있는 **자바스크립트(DOM)**가 이 데이터를 가져와서 HTML에 뿌리거나 eval() 같은 함수에 넣는 순간, 공격이 터집니다.
이기 때문에 코드를 서버에 저장을 하는 식으로 xss를 발생시킵니다
1. 웹 페이지에서 F12를 사용하여 코드를 살펴보니 loadComments..하는 js파일을 찾을수 있었습니다
js파일에서 이전에 했던 eval 부분을 보니 이번에는 JSON.parse로 변경되어 있었습니다
그렇게 코드를 확인을 하는 중 innerHTML을 발견하여 댓글 입력창에 alert를 집어넣었습니다 물론 다 실패했습니다
다시 코드를 확인하는중 escapeHTML을 발견했습니다
이게 뭔지 몰라서 검색을 해보니
escapeHTML은 공격자가 주입한 '살아있는 코드'를 '죽은 텍스트'로 변환하여 브라우저라는 엔진이 멋대로 작동하지 못하게 가두는 안전장치입니다. 라고합니다 그런데 코드에서는
function escapeHTML(html) {
return html.replace('<', '<').replace('>', '>');
}
간단하게 <>만 변화를 시켜주고 있더라고요
그리고 코드를 보니 escapeHTML을 한번만 실행을 시켜주고 있었습니다
이를 기반으로 comment부분에 <><img src = x onerror = alert(1)>를 진행하면
<> <img src = x onerror = alert(1)>로 실행이 될것입니다

이상입니다
감사합니다
'보안 > Web security Academy' 카테고리의 다른 글
| web security academy 29 (0) | 2026.03.27 |
|---|---|
| web security academy 28 (0) | 2026.03.26 |
| web security academy 26 (0) | 2026.03.24 |
| web security academy 25 (0) | 2026.03.23 |
| web security academy 24 (0) | 2026.03.22 |