웹해킹

[웹해킹] Lab: Stored DOM XSS Writeup

이둥둥 2025. 3. 3. 18:28

DOM XSS

클라이언트, 즉 브라우저에서 자바스크립트 부분에서 잘못처리해서 악성스크립트가 실행되는 경우다.

공격자가 입력한 데이터가 직접 DOM을 조작해서 스크립트가 실행되고, 자바스크립트 코드에서 필터링을 철저하지 않게 반영해서 발생하는 문제임

 

 

 

블로그 사이트인데 각 포스트 아래에는 댓글을 작성할 수 있는 인풋 섹션이 있다

이름, 메일 등의 섹션은 중요하지 않고 comment 내용 부분을 사용해서 xss 공격을 하면 되겠다

 

 

testt라고 치고 개발자도구에서 살펴보니까 <p></p> 내부에 입력값이 저장된다

<> 이걸 어떻게 빠져나오면 될 것 같아서 DOM XSS payload 중에서 하나를 시도해 봤다

 

> 이거 하나만 넣어서 빠져나오려고 했는데 효과가 없음

자바스크립트 소스코드를 살펴보자

 

 

function escapeHTML(html) {
    return html.replace('<', '&lt;').replace('>', '&gt;');
}

 

스크립트 방지를 위해 <꺽쇠>가 인풋에 있으면 &lt, &gt로 변환한다

근데 횟수 같은 추가적인 조건 없이 한 번만 대체함수가 적용되는 듯하다

 

<>이걸 앞에 넣으면 뒤에 코드가 실행될 듯?

 

<><img src="1" onerror="alert(1)">

 

이렇게 넣어서 코멘트를 작성했다

 

 

성공!

 

DOM XSS를 시도하려면 js 소스코드를 먼저 살펴보는 게 중요할 것 같다

페이로드 목록으로 브루트 포스 해보는 것도 좋지만 가능한 효율적으로 공격하자