본문 바로가기

Webhacking/Xss game

[Xss game 3번] 문제 풀이

728x90
반응형

Xss game 3번 문제를 풀어보도록 하겠습니다.

Mission Objective를 보면 역시나 alert를 실행시키면 성공입니다.

이번 문제의 특이한 점은 바로 사용자가 입력할 수 있는 공간이 없다는 것입니다.
하지만 image버튼들을 잘 누르다보면 중요한 점을 알아낼 수 있는데요
바로 URI 맨 끝 번호와 이미지의 번호가 일치한다는 점 입니다.

URI 맨 끝에있는 번호를 test로 바꾸고 Go 버튼을 누르자
Image가 NaN으로 바뀌면서 아무런 이미지를 불러오지 못함을 확인할 수 있습니다.
이를통해, URI의 맨 끝에 있는 데이터가 이미지 태그에 연관되어 있음을 추측할 수 있습니다.

3번문제만에 드디어 사용하게 되는 개발자 도구!
우선 나타나지 않는 이미지 위에서 오른쪽 마우스를 클릭한 뒤 검사 버튼을 눌러줍니다. (크롬 기준!)

그러면 위 처럼 개발자 도구가 나타나며 저 이미지에 해당하는 HTML 코드를 보여주게 되고
코드를 잘 보면 img 태그에서 실제 이미지 위치를 의미하는 src속성의 맨 마지막에 제가 입력한 "test"가 포함되어 있음을 확인 할 수 있습니다.
/static/level3/cloud + URI 맨 끝 데이터 + .jpg 
이런식으로 문자를 조합해서 이미지를 불러온다는 사실을 깨달을 수 있습니다.

그렇다면 저희는 img 태그에 onerror 속성을 사용하는 방법을 배운만큼
지금 저희 입력이 통하는 공간인 src 속성의 범위에서 벗어나서 onerror 속성을 통해 alert를 실행시켜보도록 하겠습니다.

우선 src도 문자열이기 때문에 문자열의 범위에서 벗어나야겠죠!
코드에서는 큰 따옴표를 썼으니 test하고 큰 따옴표 입력해준 뒤 이어서 onerror 속성을 넣고 다시 큰 따옴표를 열어 alert 구문을 작성해주고 마무리 합니다. (뒤에 남은 큰따옴표가 있으니까 따옴표를 닫아주지 않아도 됩니다!)
빨간 박스 처럼 공격 구문이 만들어 지겠죠?

그리고 나서 Go를 하면 풀려야하는데... 무언가 이상합니다. 
공격 이후 다시 한번 개발자 도구로 코드를 보자, 문자열의 범위 밖으로 벗어나지 못했습니다.

왜 문자열의 범위 밖으로 벗어나지 못했는지 확인을 위해서, 완벽한 HTML 코드의 형태로 보기위해 해당 태그 위에서
오른쪽 마우스 클릭 -> Edit as HTML 을 눌러줍니다.

아... 확인해보니 저희가 입력한 큰 따옴표가 HTML Entity 인코딩 되어 보이기에만 큰 따옴표로 보이고 실제 코드에는 "로 들어가 있었네요...
그러면 문제를 못푸는 것이 아니냐... 했는데, "이건 아무래도 모의 해킹 사이트이다보니 풀 수 있게 만들어 뒀을 것이다" 라는 생각을 가지고 큰 따옴표 대신 작은 따옴표를 이용해서 공격을 재시도 해보았습니다.

위 빨간 박스처럼 작은 따옴표로 재 시도를 해보았습니다.

그 결과 코드에서 저희가 넣은 작은 따옴표가 큰 따옴표로 변해 들어가면서, 문자열의 범위를 벗어나 임의의 속성을 추가할 수 있었습니다.
(문제 풀이를 위해 서버에서 작은 따옴표가 입력되면 큰따옴표로 변경해서 응답해주는 것으로 추측됨)

그렇게 3번 문제 해결!

이번 3번문제의 경우 실제로 따옴표가 이렇게 변해서 들어가는 등의 문제가 발생하지는 않기 때문에, 현실성은 좀 떨어지나
개발자 도구 사용 및 독특한 문제 구성이었다고 생각합니다.

728x90
반응형

'Webhacking > Xss game' 카테고리의 다른 글

[Xss game 2번] 문제 풀이  (0) 2020.10.11
[Xss game 1번] 문제 풀이  (0) 2020.10.11