[Webhacking.kr] NotSQL
·
Wargame/Wargame site
https://webhacking.kr/chall.php Webhacking.kr webhacking.krhttp://webhacking.kr:10012/ http://webhacking.kr:10012/ webhacking.kr:10012처음에 문제 이름만 대충 보고 NoSQL Injection 문제인 줄 알았다.. 하지만 GraphQL Injection 문제이기에 해당 공격 기법에 대해 모른다면 아래의 글을 통해 개념을 익히고 풀어보면 좋을 것 같다. GraphQL InjectionGraphQL Injection이란?GraphQL Injection이란 GraphQL 쿼리가 담긴 요청을 조작하여 악의적인 요청을 보내는 기법입니다.API와 GraphQL에 관한 설명은 다른 포스팅을 참고해 주세요 (API..
클라우드란?
·
Project/Cloud
동아리에서 겨울 방학동안 진행할 프로젝트 주제를 정하면서 컨퍼런스를 다니며 얘기가 많이 나온 DevSecOps를 도전해보고 싶었다. 근데.. 겨울방학은 2달,, 내 클라우드 지식은 0%.... 그래서 DevSecOps 관련 프로젝트를 진행한 동아리 선배님의 조언을 받아 DevOps 아키텍쳐 구현을 먼저 해보기로 하였다! (물론 해당 주제로 정말 프로젝트가 진행될지는 글을 쓰는 지금은 모르겠지만.. 일단 어차피 관심 있어서 언젠가 할 것 같으니까 기초적인 클라우드 지식을 여기저기 찾아보며 공부를 시작하였다!!)클라우드란?데이터를 보관, 정리, 분석하고 새로운 서비스를 빠르게 추진할 수 있도록 각종 인프라와 IT 기술을 빌려주는 서비스기존 IT 구축 방식은 On-premises(온프레미스) 형식이기에 초기 ..
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의 스키마 정보도 불러올 수 있습니다.공격을 위..