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 사이트에 직접적으로 공격하는 느낌보다는 간접적으로 취약점이 존재하는 사이트를
활용한다는 방법이 있다는 걸 얻어가면 좋을 거 같다!
어떤 일이 벌어질지 고민해보자.
이로써 이번 문제도 해결!