JSON(JavaScript Object Notation)

json은 "속성 - 값" 또는 "키 - 값" 쌍으로 이루어진 데이터 오브젝트를 인간이 읽을 수 있는 텍스트를 사용하는 개방형 표준 포맷이다.  AJAX, XML 등을 대체하며 .json 확장자를 가진다.

 

JSON 기본 자료형

자료형으로는 number, string, boolean, array, object, null 이 있다. 다음은 이 자료형 들의 특징이다.

number : 8진수, 16진수, 표현 방법은 지원하지 않는다.

string : 항상 큰따옴표(")로 묶어야 하고, 역슬래시(\)는 제어 문자를 표현한다.

  • \b 백스페이스
    \f 폼 피드
    \n 개행
    \r 캐리지 리턴
    \t 탭
    \" 따옴표
    \/ 슬래시
    \\ 역슬래시
    \uHHHH 16진수 네자리로되어 있는 유니코드 문자

array : 대괄호[]로 나타내며, 각 요소들은 (,)로 구분한다. 요소간의 순서에 의미가 있다.

  • ex) [10, {"k":10}, [1,"one"]]

object : 순서가 없는 "이름-값" 쌍의 집합으로 이름은 항상 string 자료형이다. 중괄호{}를 사용한다.

 

JSON 객체 예시 ( 키-값 패턴으로 표기)
 {
    "이름": "phulasso",
    "나이": 18,
    "성별": "남",
    "주소": "경기도 수원시",
 }

 

JSON 장점

  • 텍스트로 이루어져 있어 사람과 기계 모두 읽고 쓰기 쉽다.
  • 프로그래밍 언어와 플랫폼에 독립적이므로 서로 다른 시스템 간 객체를 교환하기에 좋다.
  • js문법을 채용하여 eval 명령으로 곧바로 실행이 가능하다. 그러나 외부에서 악성코드 유입 가능성이 있다. 최신 웹 브라우저 들은 json 전용 파서 기능을 내장하고 있고, 더 안전하고 빠르다.

 

 

 

'Web > Technical' 카테고리의 다른 글

Session  (0) 2020.11.16
Cookie  (0) 2020.11.14

문제 설명을 보면 간단한 비교 문제이고, 힌트는 이 문제의 제목이라고 한다.

 

문제 페이지를 보면 입력창만 하나가 있다.

소스코드를 보면 post 방식으로 입력받고 있는데,

json_decode() 함수로 입력 받은 값을 json 값으로 바꿔준다.

key 값이 true면 flag를 출력하는 것 같다.

post 방식으로 입력받기 때문에 프록시 툴을 이용해서 입력 값을 가로채주면 다음과 같은 값이 나온다.

이 값은 url 인코딩 된 값이기 때문에 decode 해주면 다음과 같이 {"key":"123"} 의 값이 나온다.

저 값에서 123을 true로 바꾼후 값을 전달해 주면 flag를 얻을 수 있다.

true는 문자열이 아닌 boolean형 자료형이기때문에 "값인 %22도 함께 삭제해야 한다.

 

 

알게된 점 : json 관련 취약점, php json_decode() 함수

'Security & Hacking > Wargame' 카테고리의 다른 글

[LoS] cobolt  (0) 2019.11.26
[LoS] gremlin  (0) 2019.11.26
[Wargame.kr] tmitter  (0) 2019.09.07
[Wargame.kr] md5_compare  (0) 2019.09.03
[Wargame.kr] strcmp  (0) 2019.09.02

+ Recent posts