반응형

📝 파라미터 변조

BackEnd에 값을 보낼때 이상한 값을 보내서 프로그램이 오동작하게끔 하는 방식이다
예를 들어 GET 방식인 경우 http://www.naver.com?doc=100 http://www.naver.com?doc=101 ...
이런식으로 계속 호출해서 권한이 없어도 값을 읽던가 아니면 POST방식이여도 주문을 넣을 때 문자같은 걸 넣어서 처리하면 BackEnd에서 이상하게 동작해 서버를 공격하거나 이상하게 동작하게 만들 수도 있다

📝XSS (Cross Site Scripting)

자바스크립트를 Injection하는 해킹 공격으로 크게 3가지 유형이 있다.

반사형 공격

http://naver.com?search=<script>alert("hello")</script>와 같은 형식으로 URL을 만들어 다른 사용자가 누를시 해당 사용자에게 해당 script를 실행하게끔 한다

저장형 공격

게시글 따위를 저장할 때 본문 내용에 스크립트를 넣어서 DB에 저장하게하고 다른 사용자가 읽었을 때 본문내용의 script가 js엔진에서 해석해 공격하는 방식이다.

DOM based XSS

http://127.0.0.1:5501/test.html가 본래 URL이고 http://127.0.0.1:5501/test.html#javascript:function%20a(){alert(%22hello%22);}%20a(); 같은 걸 호출 할 시 url 파싱이 script문에 있다면 이런식으로 자바스크립트 Injection이 가능합니다

<!DOCTYPE html>
<head>
    <style>
    </style>
    <script type="text/javascript">
        const hash = window.location.hash.slice(1)
        console.log(hash)
        
        if (hash) {
            window.location.href = decodeURIComponent(hash)
        }
<!--https://blogpack.tistory.com/105-->
    </script>
    <meta charset="UTF-8">
    <title>DOM Based XSS 공격</title>
</head>

<body>
<h1>DOM Based XSS 공격</h1>

<div class="container">
</div>
</body>
</html>

이것도 여러가지 방법 중 하나입니다

방지하는 방법은 백단으로 해당 데이터를 넘기기 전에 <script>등과 같은 위험 요소를 없애는 과정 또는 check하는 과정을 통해 XSS가 일어나지 못하게 막을 수 있다 또는 잘 만들어진 lucy-xss 라이브러리로 간단하게 처리할 수 있다
내가 직접 만들어서 처리할 수 있지만 경우의 수가 워낙 많아서 잘 만들어진 화이트리스트 라이브러리인 lucy-xss를 이용해 처리하는게 좋다

📝 SQL 인젝션

SQL을 오동작하게끔 하는 공격방식이다

 

예를 들어 SELECT * FROM users where auth = 'root' AND id = ? 이러한 식으로 권한 요청 체크가 있을 때
id적는 란에 ' OR '1' = '1라고 적을 경우 SELECT * FROM users where auth = 'root' AND id = '' 에서
SELECT * FROM users where auth = 'root' AND id = '' OR '1' = '1'이 되어 전부 뚫리게된다.

또한 '; DROP DATABASE mysql; -- 이런식으로 적을 경우 
SELECT * FROM users where auth = 'root' AND id = ''; DROP DATABASE mysql; --' 
이런식으로 되어 마지막 ' 부분은 주석처리가 되고 데이터베이스를 날려버리는 괴랄한 짓도 가능하다.

📝 CSRF

로그인 된 상태로 스크립트가 주입된 게시물 따위를 읽을 때 가짜 사이트로 Ajax 실행 또는 url 클릭이 일어날 경우
로그인 된 사용자의 권한에 따라 해당 사용자의 정보만 가져가거나 관리자 권한일 경우 사용자의 정보를 다 훔쳐갑니다

 

XSS와 다른 점은 인증된 상태 즉, 인가로 인해 내 계좌에 이체할 수 있는 권한을 행사하는 등에서 차이점이 있다.

스크립트를 주입해서 공격하는 방식은 동일합니다

방지 방법

  • Front-End, Back-End 두 곳에서 이러한 값들을 방지해야한다.
  • 에러가 났을 때 에러에 대한 디버깅 페이지가 아닌 500 , 404 등에 대한 페이지를 따로 보여줘야한다
  • SQL의 경우 CRUD 및 테이블 권한별로 계정을 따로따로 만들어서 제공해줘야한다
  • Referrer 검증request Referrer을 확인 해 동일 서버에서 호출한지 확인하기
  • Security Token (CSRF Token)로그인시 사용자 세션에 난수 따위 복잡한 값을 Token에 넣습니다
    • 사용자가 해당 서버에 요청할 때 세션을 넣어서 요청합니다 즉, URL 클릭이나 Ajax로 해커 서버를 요청한경우 해당 서버에서 현재 로그인된 사용자의 권한으로 요청을 할텐데 URL 클릭이나 Ajax로 해커 서버에 요청을 할 때 CSRF값이 넘어가지지 않기 때문에 사용자 권한으로 처리할 수 없습니다
  • 위에 행위를 멈추기 위해 자기가 직접 막을수도 있지만 어떤 업체에서 쓰라고 만든 것을 쓰는게 훨씬 안전하다
  • 예) spring boot prevent sql injection 등

 

📝 세션 하이재킹 (Session Hijacking)

공격자가 사용자의 세션 ID를 탈취하여 사용자가 인증된 상태로 시스템에 접근하는 공격 기법을 의미합니다

 

 

 

🔗 참고 및 출처
https://blogpack.tistory.com/105

반응형