📝 파라미터 변조
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
'[CS 지식]' 카테고리의 다른 글
[CS 지식] 세션 변조를 이용한 불법 로그인(JSESSIONID) (0) | 2023.04.22 |
---|---|
[CS 지식] HDD, SSD, Jinja, SQLAlchemy, WebSocket(웹소켓), socket.io (0) | 2023.01.09 |
[CS 지식] 파이프라인(Pipeline), 파이프라이닝, 클럭(Clock), 하이퍼스레드(Hyper-Thread) (0) | 2022.12.10 |
[CS 지식] 컴퓨터 동작 구조 (0) | 2022.12.08 |
[CS 지식] 웹 브라우저 동작 원리 (2) | 2022.11.27 |