🕵️ Basic Script Prac 문제 풀이: DOM-based XSS와 브라우저 렌더링의 이해
이번 문제는 'Basic Script Prac'이라는 이름답게, 특정 페이지 내에서 자바스크립트가 실행되는 구조를 파악하고 이를 이용해 데이터를 탈취하는 전형적인 DOM-based XSS 실습이었다. 문제에서 포인트가 어디인지 미리 알려주었기에, 원리를 파악하는 데 집중해 보았다.

1. 취약점 지점 확인: 마이페이지의 Input 태그
알려준 대로 마이페이지(MYPAGE)의 XSS URL을 확인해 보니, input 태그 내에서 내가 입력한 파라미터가 반환되는 것을 볼 수 있었다.

이곳은 input 태그의 속성값으로 데이터가 들어가기 때문에, 굳이 <나 > 같은 꺽쇠가 없어도 싱글 쿼터(')나 더블 쿼터(")만으로 충분히 속성을 탈출하고 이벤트 핸들러를 주입할 수 있는 구조였다.
2. 페이로드 분석: DOM 객체 조작하기
이번 실습에서 사용된 핵심 코드는 document.getElementsByName('info')[0].placeholder를 활용하는 방식이었다. 소스 보기를 통해 얻어낸 정보를 바탕으로 코드를 해석해 보면 다음과 같다.

document.getElementsByName('info'): HTML 내에서name속성이 'info'인 모든 요소들을 리스트 형태로 가져온다.[0]: 그 리스트 중 가장 첫 번째 요소를 선택한다..placeholder: 해당 요소의placeholder속성값에 접근한다.
이 정보를 바탕으로, 관리자 봇이 내 링크를 클릭했을 때 자신의 세션 쿠키를 내 서버로 쏘게 만드는 GET 방식의 공격 URL을 완성했다.

🔍 궁금증: 왜 리피터(Repeater)에서는 안 될까?
"왜 리피터에서 Send를 누르면 쿠키가 안 오는데, 브라우저에 직접 입력하면 올까?"
✅ 리피터와 브라우저의 결정적 차이
1. 자바스크립트 실행 엔진: Burp Suite의 Repeater는 단순한 HTTP 클라이언트. 서버에 요청을 보내고 돌아오는 '응답 전문(텍스트)'을 그대로 보여줄 뿐이지, 그 안에 들어있는 자바스크립트 코드를 실행(Execute)하지 않음.
2. DOM-based XSS의 특성: 우리가 넣은 공격 코드는 서버가 실행해 주는 게 아니라, 브라우저가 HTML을 읽고 렌더링하면서 JS 엔진이 돌아갈 때 비로소 실행.
3. 결론: 리피터로 보냈을 때는 서버가 "자 여기 네가 요청한 HTML 텍스트야"라고만 답하고 끝난 것이고, 브라우저에 입력했을 때는 브라우저가 그 텍스트를 받아서 "오, 여기 자바스크립트가 있네? 실행해야지!"라고 작동했기 때문에 쿠키가 전송됨. --> 아마도 Stored XSS와 reflected, DOM-based XSS의 차이에서 기인한게 아닐까 생각됨. 즉, XSS 공격 포인트까지는 Burp로 찾더라도 실제 공격 시에는 반드시 브라우저에서 테스트 해봐야하는 것 같음
3. 최종 공격 성공
직접 만든 공격 URL을 관리자 봇에게 전달했고, 예상대로 브라우저 환경에서 스크립트가 실행되면서 관리자의 세션 쿠키를 무사히 획득할 수 있었다.
💡 보안 분석 및 소감
이번 문제는 DOM 객체에 접근하는 다양한 방식을 익힐 수 있는 좋은 기회였다. 특히 도구(Burp Suite)의 한계와 실제 브라우저 환경의 차이를 명확히 이해하는 것이 얼마나 중요한지 다시 한번 깨닫게 되었다.
이제 기본적인 스크립트 활용법은 마스터한 것 같다! 다음 단계로 넘어가 보자. 😎
'해킹스터디' 카테고리의 다른 글
| [Normaltic 웹해킹 입문] 10주차 문제풀이 Steal info 2. (0) | 2026.01.02 |
|---|---|
| [Normaltic 웹해킹 입문] 10주차 문제풀이 Steal info 1. (0) | 2026.01.02 |
| [Normaltic 웹해킹 입문] 9주차 문제풀이 XSS-Challenge (0) | 2026.01.02 |
| [Normaltic 웹해킹 입문] 9주차 문제풀이 XSS-6 (0) | 2025.12.31 |
| [Normaltic 웹해킹 입문] 9주차 문제풀이 XSS-5 (0) | 2025.12.31 |