작성
·
16
·
수정됨
0
example5.php에서 test를 입력하고 소스코드를 확인해봤더니
서버가 웹 페이지를 구성해 줘서 reflected가 가능하다는 사실을 얻었습니다. 그리고 사용자의 입력값이 script 태그 안에 있다는 것을 알고 ");alert(1);//나 ");{alert(1);}// 시도했는데 처리가 되지 않았습니다. 다른 이벤트 핸들러를 사용해 보니 if문이 실행되는 걸 보니 문자로 취급하는 것 같은데 힌트 좀 주실 수 있나요?
그리고 미션1) board에서 게시글을 검색하는 부분에 test를 입력하니깐
<input type="text" class="form-control" placeholder="Keyword Input" name="keyword" value="test">
이렇게 사용자의 값이 들어가더라고요. 계속해서 시도하다가 실패해서 ai한테 하소연을 했는데 event를 삽입해서 시도하라는 말을 듣고 시도했는데 성공했어요.
그러면 event는 꺽쇠 문자 안에 전부 들어갈 수 있는건가요? 특정 태그에만 들어갈 수 있었던게 아니었나요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
김찬혁님, example5.php에서 보여주신 코드와 웹 페이지의 동작을 택하셨을 때 JavaScript 코드 주입을 시도하셨군요. 하지만 원하는 결과를 얻지 못하신 것 같습니다.
Reflected XSS는 사용자 입력이 서버를 통해 반사되어 웹 페이지에 표시될 때 발생합니다. 이 경우 입력값이 JavaScript 맥락에 직접 삽입되어 경계가 명확하지 않으면 문법적으로 올바른 JavaScript 코드를 삽입할 수도 있습니다. 그러나 입력 값이 문자열 맥락에만 제한되어 있고, escape 처리가 없는 경우에는 일반적인 ‘“);{alert(1);}//’ 등의 테크닉이 발동되지 않을 수도 있습니다.
조금 더 복잡한 상황에 접근하기 위해 다음과 같은 단계를 고려해보세요:
이벤트 핸들러 변경: 예를 들어, onload
, onclick
과 같은 이벤트 핸들러를 이용해 우회 가능성을 모색할 수 있습니다.
문자열 조작: 코드에서는 입력을 그대로 문자열로 처리하고 있는 것으로 보입니다. 문자열 조작을 이용해 본래의 if 구문을 깨뜨리지 않고 JavaScript 구문을 탈출할 수 있는지 시험해볼 수 있습니다.
다양한 패턴 시도: 모든 상황에서 ‘alert’가 최선의 방법은 아닐 수 있다. 콘솔 로그나 다른 DOM 조작 방법을 사용하여 데이터 유출을 시도할 수도 있습니다.
관련 질문이나 더 많은 테스트를 원하시면, 다음의 게시물을 참고해 더 깊이 들어가시면 좋겠습니다:
- Reflected XSS 를 이용한 세션 탈취 공격 - 게시물
- DOM-Based XSS 의 기본과 실습 - 게시물
여러 시도와 실험이 필요할 수 있는 영역이므로, 다양한 방법들을 시도해보시길 권장드립니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.