DOM XSS : LAB [4]
DATE : 2024/1/9
Last updated
DATE : 2024/1/9
Last updated
이번 LAB은 hash와 관련된 문제로 여기서 말하는 hash는 문자 #를 가리킨다.
URL 바에서 사용되는 #는 한 페이지 내에서 전체 타이틀이나 문단 제목과 같이
클릭했을 경우, 해당 콘텐츠가 제공되는 위치로 이동하는 기능을 구현할 때 사용된다.
LAB에서도 #2를 입력하면 제목에 2가 들어간 게시물 중 제일 첫 번째 게시물을 찾아
해당 위치로 화면을 이동 시켜준다.
만약 대문자 O를 입력했다면 위의 사진과 같이 #로 작성한 값이
제목에 포함된 게시물 중 제일 첫 번째에 해당하는 게시물 위치로 이동한 걸 볼 수 있다.
이처럼 hash를 이용해 페이지의 특정 위치로 이동할 수 있는 기능을 LAB에서는 어떻게 구현해뒀는지
코드를 확인해보면
section.blog-list h2 element 중 contains에 해당하는 element를 찾아
이동하는 방식으로 코드를 작성해둔 걸 볼 수 있다.
이때 section.blog-list h2는 CSS에서 HTML에 작성된 element를 꾸미기 위해
스타일을 입힐 element를 가리킬 때 등장하는 선택자로
코드에 작성돼 있는 선택자는
blog-list class인 section tag 안에 있는 h2 tag를 가리킨다.
Packet을 살펴보면 알겠지만 "blog-list class인 section tag 안에 있는 h2 tag"는
각 게시물의 제목을 나타내는 태그이다.
따라서 앞서 #에 임의대로 값을 입력했을 때, 게시물 제목을 기준으로 페이지가 이동했던 것!
이제 코드를 전반적으로 파악했으니 이를 활용해 print() 함수를 실행시켜보자.
#을 이용해 임의의 내용을 전달하게 되면 그 값은 __INPUT__ 자리에 들어가게 된다.
이를 고려해 아래와 같이 스크립트를 작성하게 되면
어떤 일이 벌어질지 고민해보자. 🤔
공격자 서버에서 Body에 스크립트를 넣고 저장해준다.
이를 요청하게 되면 iframe을 만들기 위해 src에 적힌 LAB 주소로 요청을 보내게 되는데
이때 에러를 발생 시킬 img 태그가 따라 붙으면서 print()를 실행하게 된다.
(<img> tag가 src=1이면 잘못된 경로이기 때문에에러가 발생하게 됨)
스크립트를 저장한 후, Deliver exploit to victim을 클릭하면
사용자의 브라우저에서는 위와 같이 print 창이 출력 되면서
사용자의 의도와는 상관 없이 공격자가 삽입한 스크립트가 실행됨을 알 수 있다.
이로써 이번 문제도 해결! 🤗
LAB 사이트에 직접적으로 공격하는 느낌보다는 간접적으로 취약점이 존재하는 사이트를
활용한다는 방법이 있다는 걸 얻어가면 좋을 거 같다!