최근엔 웹 모의해킹을 하다보면 인젝션이나 XSS 같은 취약점들은 발견하기 힘들다.
그럴 때는 불충분한 인증, 불충분한 인가와 같은 파라미터 변조를 통한 취약점을 찾게되는데
이 파라미터 변조 취약점은 상황에따라 간단하면서도 치명적일 수도 있다.
대부분의 모의해커들은
서버단 에서 조치하라. 세션값을 검증하라. 라고 대응방안을 제시 해주고 있고,
그 로직에 대해 살펴보고 좀 더 이해하는 시간을 가지려한다.
어떤것이 파라미터 변조 취약점인가 예시를 보자면,
아래 게시판에는 4개의 글이 있다
각각 test계정이 2개의 글 test2가 2개의 글을 작성하였다.
4번 글은 test2가 작성
3번 글은 test가 작성하여
test2번 계정으로 이 게시글들에 접근을 하면 본인의 글에는 글 수정 및 글 삭제 버튼이 활성화 되어있지만
test 계정이 작성한 글은 아무런 수정이나 삭제도 할 수 없다.
이는 현존하는 모든 게시판이 다 동일한 로직을 따르고 있을 것이다.
근데 여기서 만약 test2번 계정으로 본인의 글 4번 글을 수정할 때
패킷을 잡아 값을 test 계정이 쓴 3번으로 변조하여 보내게 되면
수정 페이지에는 test 계정으로 쓴 3번 글이 불러와진다.
이 상태로 글 몇자를 더 추가해서 최종 수정하기를 서버에 보내게 되면
실제로 test2번 계정으로 3번 글이 수정된 것을 볼 수있다.
같은 방법으로 삭제또한 가능하다.
bbsID 파라미터를 4 에서 3으로 변조하여 deleteAction을 보내게되면
본인 글이 아님에도 불구하고 글이 삭제된다.
이러한 인가 취약점은 게시판에만 국한되는것이 아니라,
개인정보 수정 페이지나 뷰 페이지
등등 다양한 중요 페이지에서 발견될 수 있다.
권한이 없어야하는 사용자가 타 사용자의 권한을 이용하거나, 열람하거나 등이 가능한 것이다.
그래서 타 사용자의 개인정보를 훔쳐본다거나, 수정할 수 있으며
1:1 문의 게시판 등과 같은 곳에서도 자주 발견된다.
이 문제에 대해 좀 더 제대로 된 대응 방안을 제시 해주기 위해서는
서버와 클라이언트에 대한 이해가 필요하다.
예시로 보고있는 jsp는 java를 이용한 서버 사이드 스크립트언어 중 하나이다.
jsp는 아래 코드와 같이
<% %> 로 싸여져있는 서버 사이드 스크립트영역과 <body> <nav> 등과 같이 HTML로 만들어진다.
클라이언트에서는 jsp내에 사용된 서버 사이드 스크립트는 정확히 그 코드를 확인할 수 없고
만약 서버 사이드 스크립트로 어떤 값을 검증하는 절차가 있다면 그것을 변조할 수도 없다.
이렇게 서버 사이드 스크립트로 검증을 하는 것이 흔히
모의해커들이 대응방안으로 제시하는 서버단 검증이라고 한다.
처음 위에서 봤듯이 본인의 글이 아닌 글에는 수정, 삭제 버튼이 아예 보이지 않는다.
이 부분의 코드를 살펴보면 다음과 같다.
userID 가 비어있지 않거나(Not Null) userID가 게시판 작성자의 ID와 같을 때만 수정과 삭제가 보이도록 되어있다.
이 때 <% 로 싸여진 스크립트 영역 사이에 html 코드가 있지만
전체적으로 if문으로 스크립트 영역에 포장이 되기 때문에 실제로 개발자 모드로 HTML 코드를 보더라도
확인을 할 수 없게된다.
그럼 여기서 ID로 검증하게되면 ID 값만 변조하면 되는것인가?
그것도 아니다
아래 코드는 userID를 받아와서 그 ID에 서버에서 세션을 부여하는 코드이다.
이것이 모의해커들이 말하는 세션값 검증의 기반이 되는 부분이다.
그래서 위의 게시판의 글을 클릭 했을 때 날아가는 요청 패킷을 확인하면
ID를 검증하는 것이 아닌 ID에 부여된 JSESSION을 검증해서 글 수정 및 삭제를 보여주는가 안보여주는가를 결정한다.
이러한 세션검증, 서버단 검증을 통해서 파라미터 변조를 막을 수 있다.
삭제 기능을 하는 jsp 페이지에
아래와 같은 서버 사이드 스크립트 영역을 추가했다.
1번글이 test 계정 나머지 2,4번글이 로그인 되어있는 test2번 계정의 글이다.
아까와 같이 파라미터 변조로 1번글을 삭제시도한다.
그럼 아까와는 달리 세션 검증으로 인해 삭제가 안되고 권한이 없습니다 알림창이 출력되며
다시 게시판 페이지로 리다이렉트 되는 응답 패킷을 받을 수 있다.
파라미터 변조 취약점에 대해 공격할 때나 대응방안을 제시 해줄 때
좀 더 그 원리와 동작 방식에 대해서 알고있는 것과 모르는 것과 차이는 매우 크다고 생각된다.
'웹' 카테고리의 다른 글
[웹] JWT(JSON Web Token)에 대한 다양한 공격 기법 - 2 (Feat. Hashcat) (0) | 2022.07.14 |
---|---|
[웹] JWT(JSON Web Token)에 대한 다양한 공격 기법 - 1 (0) | 2022.07.14 |
[웹] 파일 업로드 공격 - 확장자 우회 (0) | 2022.07.06 |
[웹] XML external entity Injection(XXE) 공격 (0) | 2022.07.06 |