JWT(JSON Web Token) Attacks
·
Web/Web Hacking
JWT Attack이란?JWT Attack이란, JWT의 설계 문제와 잘못된 처리 방식으로 인해 생기는 취약점입니다. (JWT란?)JWT Attack의 종류JWT Attack은 아래와 같은 방법들을 통해 이루어집니다.서명 검증의 결함으로 인한 JWT 공격서명이 없는 토큰이 수락된 경우의 JWT 공격Secret Key 무차별 대입 공격hashcat을 이용한 brute forceJWT Header Parameter Injectionjwk Injectionjku Injectionkid InjectionJWT 알고리즘 혼동 공격이번 포스팅에서는 서명 검증의 결함으로 인한 JWT 공격과 JWT Header Parameter Injection에 대해 다루도록 하겠습니다.서명 검증의 결함으로 인한 JWT 공격해당 공..
JWT(JSON Web Token) PHP 로그인 구현
·
Web/개발
JWT(JSON Web Token)란?JWT_class.phpsecretKey = "SSSCCCPPPAAANNNDDDYYYOOO"; } private function base64UrlEncode($data) { return str_replace(['+', '/', '='], ['-', '_', ''], base64_encode($data)); } public function hashing($payload) { $header = [ 'alg' => 'HS256', 'typ' => 'JWT' ]; $header = $this->base64UrlEncode(json_encode($header)); ..
JWT(JSON Web Token)란?
·
Web/개발
JWT(JSON Web Token)란?JWT란 JSON 형식의 데이터를 Base64 인코딩을 통해 문자열로 전달하는 Web Token 입니다. (Web Token이란?)하지만 JWT는 인터페이스 표준으로 실제 구현은 JWS(JSON Web Signature)와 JWE(JSON Web Encryption)으로 이루어집니다. JWS와 JWE는 Claim을 어떤 방식으로 전달하는지에 대한 차이가 존재합니다. JWS는 데이터의 무결성을 위해 디지털 서명을 사용하는 방식이고, JWE는 데이터의 기밀성을 위해 암호화를 사용하는 방식입니다. Claim이란?토큰의 종류에는 일반 토큰과 Claim 토큰이 존재합니다. 일반 토큰은 의미 없는 문자열을 JSON으로 보내는 방식으로 인증에서 사용이 될 수 있지만 정보를 담을 ..
Web Token이란?
·
Web/개발
Web Token이란?Token의 네이버 사전 정의는 다음과 같습니다.그렇다면 웹상에서의 토큰은 무엇일까요?위의 사진에서 '징표로 하는'이라는 내용을 통해 유추할 수 있으실 텐데요.웹 상에서의 토큰은 본인 확인의 수단으로 사용되는 징표입니다.근데 이거 어디서 많이 본 방식이죠? 세션 방식의 인증을 사용하는 경우를 많이 생각하셨을 것 같습니다.그렇다면 세션과 토큰의 차이는 무엇일까요?세션 VS 토큰위의 사진은 세션 인증 방식의 동작을 나타내는 것으로, 회원 정보가 담긴 데이터베이스를 거친 후 세션 ID가 저장되는 데이터베이스를 한 번 더 거치게 되는데요. 즉, Stateful(상태 유지)이라는 것이죠. 따라서 회원이 늘어날 때마다 메모리를 사용하며, 서버의 부하가 거칠 수 있습니다. 또한 서버 확장 시 세..
SSTI (Server Side Template Injection)
·
Web/Web Hacking
SSTI란?공격자가 템플릿 구문을 이용해 악성 페이로드를 템플릿에 주입하고, 서버 측에서 실행되도록 하는 공격-> 사용자의 입력이 데이터로서 템플릿에 전달되지 않고 템플릿 내에 직접 연결될 때 발생이러한 SSTI는 서버 측에서 전달되고 평가되기 때문에, CSTI보다 훨씬 위험도가 높으며 서버의 민감한 파일을 읽거나 RCE와 같은 공격이 가능합니다.템플릿 구문SSTI 가능 여부는 아래와 같은 페이로드를 통해 확인해 볼 수 있습니다. {{9*9}}${9*9}${{9*9}}#{9*9} 웹 페이지에서 만약 파라미터 값을 그대로 출력하고 있다면 아래와 같은 방법으로 SSTI 가능 여부를 확인할 수 있지만만약 그대로 출력하는 것이 아닌 변수를 통해 해당 변수의 값이 출력되는 환경에서는 아래와 같은 방법으로 SSTI..
CSTI (Client Side Template Injection)
·
Web/Web Hacking
CSTI란?클라이언트 사이드 템플릿 엔진을 사용해 동적으로 콘텐츠를 생성할 때, 공격자가 악성 스크립트를 삽입해 이를 실행시키는 공격 -> XSS와 같은 공격에 취약 (Web Template Engine이란?)Client Side Template을 사용한 웹 페이지에서 사용자의 동작에 따라 동적으로 DOM을 생성할 때 XSS에서 사용되는 페이로드가 주입되면 DOM XSS로 이어지게 됩니다.  위와 같이 파라미터 값을 Client Side Template로 출력시키는 환경에서템플릿 구문에 수학식을 입력하였을 때, 해당 식이 그대로 출력되는 것이 아닌, 계산 결과가 출력되는 경우 CSTI가 가능하다는 것임을 확인할 수 있습니..
Web Template Engine이란?
·
Web/개발
Web Template Engine이란?웹 문서가 출력되는 템플릿 엔진을 말하는 것으로 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 말합니다. 쉽게 말해, 고정적으로 사용되는 웹 문서를 템플릿으로 미리 작성해 두고 동적으로 변경되는 데이터 영역만 필요시에 결합해서 웹 문서를 구성하고 화면에 출력하는 것입니다.또한 View Code(HTML)과 Data Logic Code(DB)를 분리시키는데 이는 MVC 패턴과 비슷하게 각각의 역할을 나누어 View에서는 Controller에서 넘어온 데이터를 틀에 끼워 넣어 클라이언트에게 알맞은 웹 페이지를 제공합니다.MVC 패턴이란?Model, View, Controller의 약자로 애플리케이션, 프로젝트를 구성할 때 구성요소를 세 가지..
GraphQL Injection
·
Web/Web Hacking
GraphQL Injection이란?GraphQL Injection이란 GraphQL 쿼리가 담긴 요청을 조작하여 악의적인 요청을 보내는 기법입니다.API와 GraphQL에 관한 설명은 다른 포스팅을 참고해 주세요 (API란? / GraphQL이란?) 아래의 사진과 같이 상품의 정보들을 불러오는 요청에 대한 응답으로 id값이 1, 2, 4인 상품만 반환될 경우 id값이 3인 상품이 숨겨져 있을 수 있다는 추측을 할 수 있습니다.이러한 경우 인자 값으로 id값에 3을 포함시켜 요청해 주면 아래와 같이 비공개 정보를 불러올 수 있습니다.또한 GraphQL에서 스키마에 대한 정보를 서버에서 쿼리할 수 있는 내장 GraphQL 함수를 통해 아래와 같이 GraphQL의 스키마 정보도 불러올 수 있습니다.공격을 위..
GraphQL이란?
·
Web/언어
GraphQL이란?GraphQL은 Graph Query Language의 약자로 이름에서 확인 가능하듯 SQL과 같은 쿼리 언어입니다. 이러한 쿼리 언어로 작성된 메시지를 통해 서버 또는 클라이언트의 작업을 수행해 주는 라이브러리가 존재하는데 이는 GrpahQL 공식 사이트에서 언어 및 환경마다 사용할 수 있는 라이브러리를 확인할 수 있습니다.클라이언트가 필요한 데이터에 대한 쿼리를 선언하여 GraphQL에 넘기면 GraphQL은 쿼리를 해석하여 서버에서 필요한 데이터를 가져온 후 클라이언트에 해당 데이터를 반환하는 방식입니다. GraphQL은 API 쿼리 언어일 뿐, SQL도 NoSQL도 아닙니다!Schema스키마는 데이터 구조를 정의한 것으로 어떤 데이터들이 사용될 수 있고, 어떤 요청 및 구독이 전..
API란?
·
Web/개발
API란?API란 Application Programming Interface의 약자로 두 애플리케이션 간의 서비스 계약을 의미하는데, 이 계약은 요청과 응답을 사용하여 두 애플리케이션이 서로 통신하는 방법을 정의하고 있습니다. 쉽게 말하자면 소프트웨어들이 서로 대화할 때 사용되는 수단이라고 할 수 있으며, 웹사이트, IOS 앱, 안드로이드 앱 등에서 서버로부터 어떠한 내용을 가져오고 보낼 때, 클라이언트가 어떤 방법으로 요청을 보내야 하고, 서버는 어떤 방법으로 응답을 해야 하는지 정의된 마치 식당에서 정해둔 메뉴판과 같은 존재라고 할 수 있습니다.API의 종류API는 내부 API로 기업이나 연구 단체 등에서 자체 제품과 운영 개선을 위해 단체 내부에서만 사용하는 Private API와 개방형 API로..