[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..
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 공격해당 공..
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가 가능하다는 것임을 확인할 수 있습니..
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의 스키마 정보도 불러올 수 있습니다.공격을 위..
NoSQL Injection
·
Web/Web Hacking
NoSQL Injection이란?Not Only SQL의 약자인 NoSQL은 비관계형 DBMS를 뜻하며 이러한 비관계형 DBMS에서 사용되는 쿼리를 조작하여 인증을 우회하거나 데이터베이스의 내용을 유출시키는 공격이 NoSQL Injection입니다. 이전에 SQL Injection 포스팅에서 언급하였듯 DBMS에는 테이블 형식으로 데이터가 저장되는 관계형 DBMS와 키-값 형태로 데이터가 저장되는 비관계형 DBMS가 있습니다. 아래는 관계형 DBMS인 MySQL과 비관계형 DBMS인 MongoDB의 쿼리문을 비교한 것입니다.두 쿼리 모두 userid가 admin이고, password가 keshu인 데이터를 불러오는 쿼리이지만, 구조가 다른 것을 알 수 있습니다. mysql에서는 sql문법으로 명령형 쿼리..
SQL Injection (1)
·
Web/Web Hacking
SQL Injection이란?SQL injection이란 관계형 DBMS에서 사용하는 질의 구문인 SQL을 삽입하는 공격입니다. 여기서 DBMS란 DataBase Management System의 약자로 데이터베이스를 관리하는 애플리케이션을 말합니다. 이 DBMS는 테이블 형식으로 데이터가 저장되는 관계형 DBMS와 키-값 형태로 데이터가 저장되는 비관계형 DBMS가 있습니다. 이번 포스팅에서 다루게 될 SQL Injection은 관계형 DBMS인 RDBMS에서 사용되는 공격으로 공격 발생 시 조작된 쿼리로 인증을 우회하거나, 데이터베이스의 정보를 유출할 수 있는 해킹 기법입니다.SQL Injection은 공격 방법에 따라 여러 종류가 존재합니다.이번 포스팅에서는 아래의 4가지 종류의 SQL Inject..