개발/segfault 모의해킹 6기

9주차 xss 파헤치기

prpn97 2024. 6. 18. 23:14

  어느새 9주차에 접어들었고, 그간 포스팅은 못했지만... ㅠㅠ 그래도 열심히 수업은 듣고 있다. sql 인젝션에 대해 여러 방면으로 배웠지만 아무래도 원인과 방법에 대해 습득한 이후에는 본업이 우선이라는 생각이 들었다. 애초에 공격이 들어오는 부분을 막기 위한게 내가 배우는 이유이기 때문에..! 기존에 알고 있던 Prepared statement로 대응하는 것 외에 order by 등 대응이 어려운 부분들을 배울 수 있었고, 사실 이 부분은 현대의 orm은 이미 내장되어있다. 결론적으로는 입력값에 화이트리스트 필터링을 주어야겠다. 공격 차단도 그렇지만, 입력값에 불순한 의도가 들어오는 것 자체를 막아내야겠다는 생각을 하고 있다. 

 

 

  아무튼 다음 배우는 공격 방법은 XSS다. XSS는 cross site scripting 의 약자다. 뭣도 모르고 CORS에 대해 현실에서 부딛히면서 xss를 참 많이 봐왔고, 대충 알고 있는 내용은 클라이언트측에 스크립트를 심는 공격이라는 것이다. 노말틱쌤은 모의해킹을 할 때 sql인젝션이나 여러 보안 체크를 하면서 취약점이 발견되지 않을 때 결국 취약점을 어떻게든 찾아내겠다고 하면 xss에서 찾을 수 있다고 하실 정도로 신경쓸 것들이 많아보인다. 한번 자세히 살펴보자. 

 

클라이언트에게 악성 html 스크립트를 삽입하는 것이 xss의 내용인데, 이번에 2가지를 배웠다. 

1. Stored XSS

  스크립트가 서버에 저장되고, 다른 사용자가 해당 페이지에 접근했을 때 삽입된 스크립트가 실행되는 방식이다. Stored XSS에서 중요한 것은 이름에서도 알 수 있듯, 서버에 저장된 데이터가 그대로 출력된다면 서버에 저장할 때 삽입할 스크립트 내용을 같이 입력해서 저장하는 것이다. 

 

  예를 들면, 게시판에 제목과 본문을 써서 올리면 그대로 게시판에는 제목과 본문이 보여질텐데, 제목이나 본문에 Html 스크립트를 넣음으로 해당 사용자가 게시글을 클릭하게 되면 스크립트가 실행되는 것이다. 

 

Stored XSS의 특징은 데이터를 저장한다는 것, 그리고 데이터를 저장하는 페이지와 출력되는 페이지가 다를 수 있다는 것이다. 그리고 페이지에 접근하는 모든 사용자에게 공격이 노출된다는 것이 특징이다. 

 

2. Reflected XSS

 

  URL이나 Input에 스크립트를 포함하여 전달하여 바로 페이지에서 실행되는 방식이다. 예를 들면 회원가입시 아이디 중복체크라던지, 요청을 보냈을 때 들어오는 응답값을 공격하는 것이다. 바로 반응이 온다는 것은 같은 페이지 내에서 요청과 응답이 와야 하는데, url을 통해 공격을 수행하기 때문에 파라미터로 전달하는 get 메서드로만 공격이 가능하다. 

 

Reflected XSS의 특징은 url을 접근한 사용자에게 공격한다는 것, 데이터를 저장하는 페이지와 출력하는 페이지가 같다. 그리고 DB나 서버에 영향을 주지 않고 url에서 조작하는 것이기 때문에 흔적이 남지 않는다. 

 

 

 

  이 두 XSS를 확인하기 위해서는 <"'> 이 4가지의 특수문자를 넣어보는 방법으로 체크해볼 수 있다. 결론적으로 데이터를 저장할 때 스크립트를 입력하거나, url에 스크립트를 입력했을 때 스크립트가 의도대로 활성화되는지 여부를 파악하는 것이다. 그리고 그 의도가 악의적인 의도로 스크립트를 데이터에 넣어서 누군가 링크를 클릭하게 하거나 url에 붙여서 스팸문자를 돌린다거나 하는게 이러한 방식으로 보인다. 

 

  취약함을 증명하기 위해 POC(proof of concept) 를 띄우는 방법으로 흔히 쓰인다고 한다. 대표적으로 alert, prompt, confirm, console.log 를 말씀해주셨다. 간혹 alert이 막혀 있어서 다른 메서드를 쓴다고 하는데, 이 부분은 너무 익숙한 부분이기 때문에 안되면 돌려볼 수 있는 방법은 다 써볼 수 있을 것 같다. 

728x90