4번 문제를 살펴보면 해당 점수가 150point로 확인된다.
특정한 문자열을 보여주며
해당 비밀번호를 입력하게 되어있다.
YzQwMzNiZmY5NGI1NjdhMTkwZTMzZmFhNTUxZjQxMWNhZWY0NDRmMg==
특정한 문자열을 일반적으로 볼수없는 형태의 문자열이며 무언가 숨겨져있다는 생각이 든다.
그러한 이유에서 조금더 고려해보면 해당 문자열이 암호화 되어있지 않을까라는 전제에 도달한다.
해당 문자열은 마지막에 추가로 '=' padding 문자가 붙게되는 데
이를 통해 base64로 인코딩 되어있다는 것을 알 수 있다.
과연 해당 널패딩이 붙게되면 왜 base64로 인코딩 되어있다고 생각할 수 있을까 base64 인코딩 방식을 확인해보자.
base64란 무엇일까?
컴퓨터는 기본적으로 1과 0으로 이루어진 데이터를 처리하는 기계이다.
모든 데이터는 1과 0으로 이루어져 있는데,
이때 문자로 표현할 수 있는 데이터(특수문자)가 있고, 문자로 표현할 수 없는 데이터가 있다
.
예를들어
10진수가 0~32 까지 그리고 127번 같은 경우는
모니터상에 사람이 읽을 수 있는 문자로 표현하는 할 수 있는 것들이 아니라 해당 데이터 자체의 의미를 갖게 되는 것인데,
128 - (33+1) = 94
총 94개의 문자만이 모니터에 표현될 수 있는 문자이다.
그렇다면
1과0으로 총 94개의 문자를 표현하려면 몇개의 비트가 필요한가
1 0 1 1 0 0 -> 2^6 = 64개
1 0 1 1 0 0 1 -> 2^7 = 128개
필요한 것은 94보다 큰 128개로 총 7비트가 필요하게 되지만
그렇게 될경우 표현할 수 없는 문자가 남게된다.
그렇다면 94개의 문자중 약 30개의 문자를 버리고 총 6비트로만 표현한다면 어떨까?
모든 데이터들이 눈으로 읽을 수 있는 문자로 표현되는 것이다.
그렇다면 실제적으로 총 30개의 문자를 버린 base64 인코딩 테이블을 확인해보자.
짜잘한 특수 문자를 버리고 총 알파벳 대문자, 소문자, 그리고 '+'와 '/'로 이루어져 총 64개의 문자로 이루어진 것을 알 수 있다.
이제 실질적으로 인코딩 하는 원리를 살펴보자.
8비트(1BYTE) 단위로 이루어진 데이터를 전개한 후 총 6bit단위로 나누면 된다.
예를들어
생각보다 간단한 원리이다.
하지만 해당 비트수가 총 3바이트(24bit)이기 때문에 6bit로 잘라도 4개의 문자로 딱 맞아 떨어진다는 것을 확인할 수 있다.
그렇다면 6배로 나누어지지 않는 비트수를 확인해보자.
Many
77 97 110 121
01001101 01100001 01101110 01111001 (총 32bit)
010011 010110 000101 101110 011110 010000 (총 32bit)
변환된 인코딩을 확인해보면 32bit에 총 4bit가 붙은 걸 확인할 수 있다.
그후 2bit 단위로 =로 생각하면 된다.
그렇다면 base64encoding의 최종 결과물 문자열은 TWFueQ==가 된다.
해당 문자열을 디코딩해보자.
디코딩 사이트 http://www.convertstring.com/ko/EncodeDecode/Base64Decode
해당 문자열을 복호화 하니
c4033bff94b567a190e33faa551f411caef444f2
특정한 문자열이 나온다.
해당 문자는 총40개로 160bit로 이루어진 것을 확인할 수 있다.
해당 문자열이 sha-0나 sha-1로 인코딩 된것을 확인할 수 있다.
과연 어떤 것일까?
고민하기에 앞서 웹해킹에서 제공하는 인코더가 있는것이 확인되었다.
먼저 해당리스트에 존재하는 SHA1을 이용하여 디코딩 해보자.
총 두번의 디코딩 과정을 거쳐 정답을 확인할 수 있었다.
'IT > 웹 해킹(Web Hacking)' 카테고리의 다른 글
webhacking.kr [문제 6번] (0) | 2018.02.24 |
---|---|
webhacking.kr [문제 5번] (0) | 2018.02.23 |
webhacking.kr [문제 2번] (5) | 2018.01.28 |
webhacking.kr [문제1번] (0) | 2018.01.27 |
webhacking.kr [회원가입] (0) | 2018.01.27 |