base64 는 64 진법 기반의 인코딩 기법입니다. a-z, A-Z, 0-9, +/ 로 구성된 0~63 까지의 문자표를 가지고 있습니다. 모든 문자를 6bit(2^6 = 64) 로 쪼개서 base64문자표로 치환하며 마지막 문자가 정확히 6bit 로 떨어지지 않음면 = 로 구성된 padding bit 를 넣어주는 것이 특징입니다. 다만 컴퓨터의 기본데이터나 ASCII 코드는 8bit 체계로 구성되어 있기 때문에 호환성 향상을 위해 6bit 와 8bit 의 최소공배수인 24bit 를 기본 단위로 인코딩합니다. 따라서 암호문 처럼 생긴 문자열의 맨 마지막에 = 가 한개 또는 두개가 있다면 base64 인코딩 문자라고 유추가 가능합니다. 경우에 따라선 인코딩 문자에 = 가 없을수도 있지만 기본 64문자로만 ..
인코딩이란 특별한 규칙을 사용하여 데이터를 다른 방식으로 표현하는 것을 의미합니다. 예를 들어 ASCII 코드 규칙을 이용하면 이진값 0100 0001(10진수 65) 는 문자 'A' 로 치환하여 표현할 수 있습니다. 디코딩은 반대로 해당 규칙을 사용하여 데이터를 원래의 방식으로 표현하는 것을 말합니다. ASCII 코드의 경우 문자 'A'를 이진값 0100 0001 로 바꾸거나, 10진수 65로 바꾸는 것입니다. 컴퓨터로 통신을 하다보면 세계에는 다양한 언어가 있기때문에 공통의 규칙으로 각국의 언어나 문자를 표시해야만 합니다. 이때 ASCII 규칙으로만 모든 문자를 표현하지는 않습니다. ASCII 코드 외에도 ISO-8859, UTF-8, UTF-16, EUC-KR, Base64 등 다양한 인코딩 방법이..
리눅스에서도 문자열 인코딩을 위한 base64 명령어 자체를 지원합니다. --help 를 붙여 사용법을 살펴보니 간단하게 [해당명령어] [파일명] 정도면 될 것 같네요 base64 방식으로 인코딩된 data.txt 파일을 살펴보겠습니다. 특정 패턴의 암호문 처럼 보이는데 길이가 70 글자 내외, 문자열의 마지막이 == 으로 끝나는 것을 봐선 base64 인코딩이 맞네요 base64 data.txt 로 인코딩된 텍스트가 들어있는 data.txt 를 한번 더 인코딩 해봅시다. 알 수 없는 문자열이 더 길어졌습니다. 이건 문제를 해결한게 아니라, base64 문자를 한번 더 base64 방식으로 인코딩 한 겁니다. 문제를 풀기위해서는 디코딩을 해야겠죠? 위의 사용법을 참고해서 -d 옵션을 붙여봅시다. 11 단..
id : bandit11 password : 6zPeziLdR2RKNdNYFNb6nVCKzphlXHBM (2023.03 기준) 모든 영소문자(a-z), 영대문자(A-Z) 가 13자리 기준으로 순환되어 있다고 합니다. 무슨 말인지 살펴봅시다. 13자리 순환 기법에 대한 설명은 이 그림 한장이면 충분이해가 될 것 같습니다. 컴퓨터 보안 공부를 하다보면 한번쯤 들어보았을 고대 로마 시대의 카이사르 암호와 같은 맥락입니다. rotate13 에 대한 더 자세한 설명은 여기를 참고하세요 이 문제를 손쉽게 해결하기 위해선 tr명령어를 사용할 줄 알아야 합니다. 더보기 tr 로 13자리 순환문자열을 표현하기 위해 a-m 을 n-z 로 변경합니다. 그럼 알파벳 뒷부분 n-z 는 그래도 n-z 로 표기되겠죠? a-m 은 ..
strings 는 바이너리 파일 내에서 원하는 문자열을 찾아주는 명령입니다. 보통 바이너리 파일들은 그 내용을 확인하기 힘들지만 원본 데이터가 아스키 코드값을 가지면 실제 바이너리 안에서도 일반 텍스트문서처럼 표기가 됩니다. 아래 사용 예제를 참고하세요 현재 디렉토리의 파일 리스트를 살펴보니 용량이 제법 되는 data.txt 가 있습니다. less 로 살펴봅시다. 실제로 바이너리 파일이라 읽을 수 없는 문자들이 뒤엉켜 있습니다. 이러한 상황은 strings 를 이용하면 손쉽게 해결할 수 있습니다. strings data.txt 를 실행해봅시다. data.txt 는 바이너리 파일이지만 그 중 문자열로 표시 가능한 부분만 출력이 되었습니다. 문제 가이드 대로 "=" 표시가 붙은 부분이 있습니다. 특정 문자열..
id : bandit10 password : G7w8LIi6J3kTb8A7j9LgrywtEUlyyp6s (2023.03 기준) base64 방식으로 인코딩된 패스워드가 data.txt 파일에 들어있다고 합니다. 살펴봅시다. 특정 패턴의 암호문 처럼 보이는데 문자열의 마지막이 == 으로 끝나는 것을 봐선 base64 인코딩이 맞네요 리눅스 환경에서 인코딩 문제를 해결해봅시다. 더보기 리눅스에서도 문자열 인코딩을 위한 base64 명령어 자체를 지원합니다. --help 를 붙여 사용법을 살펴보니 간단하게 [해당명령어] [파일명] 정도면 될 것 같네요 base64 data.txt 로 인코딩된 텍스트가 들어있는 data.txt 를 한번 더 인코딩 해봅시다. 알 수 없는 문자열이 더 길어졌습니다. 이건 문제를 해..
id : bandit9 password : EN632PlfYiZbn3PhVK3XOGSlNInNE00t (2023.03 기준) 패스워드가 data.txt 파일에 들어있는데 몇개 없는 가독가능한 문자열 중의 하나이고, 몇몇 "=" 분자들이 앞에 놓여있다고 합니다. 현재 디렉토리의 파일 리스트를 살펴보니 용량이 제법 되는 data.txt 가 있습니다. less 로 살펴봅시다. 실제로 바이너리 파일이라 읽을 수 없는 문자들이 뒤엉켜 있습니다. 이러한 상황은 strings 를 이용하면 손쉽게 해결할 수 있습니다. 더보기 strings 는 바이너리 파일 내에서 원하는 문자열을 찾아주는 명령입니다. 보통 바이너리 파일들은 그 내용을 확인하기 힘들지만 원본 데이터가 아스키 코드값을 가지면 실제 바이너리 안에서도 일반 ..
less 는 cat 과 같이 파일의 내용을 읽는 명령어 입니다. cat 은 파일의 내용이 많으면 이전 내용을 찾기 위해 스크롤을 위로 올려야 하지만 less 는 한번에 모든 내용이 출력되는게 아니라 페이지 단위로 내용을 확인하고, 키보드 방향키나, vi 식 페이지 이동 명령을 통해 이전 내용을 확인할 수 있습니다. 페이지 단위로 내용을 확인할 수 있는 건 more 와 유사하지만 less 는 각종 옵션 또는 찾기, 이동 등의 커맨드를 지원하고 more 는 그렇지 않습니다. less 에서 간단하고 편하게 쓸만한 옵션은 다음과 같습니다. 아래쪽 화살표 또는 j 위쪽 화살표 또는 k 왼쪽 화살표 또는 h 오른쪽 화사표 또는 l /[문자열] 은 찾기, 찾은 다음 다음토큰은 n, 이전 토큰은 N ctrl f 또는 ..
이전글에서 String 객체내부에서 처리되는 value 값과 객체 자체의 주소값, 문자열 리터럴의 주소값 개념에 대해 살펴보았습니다. 살펴본김에 아래 코드를 추가하고 약간만 더 살펴봅시다. 최초 문자열 "Hello" 에 문자열을 추가해서 "Hello world" 를 만들면 기존의 리터럴 "Hello world" 와는 어떤 차이가 있을까요? String str01 에 할당된 "Hello" 와 추가로 " world" 문자열을 덧붙여 생성된 "Hello world" 를 비교해보면 "Hello" 와 "Hello world" 는 별도의 리터럴을 참조하는 객체임을 알 수 있습니다. 재밌는건 str0 에서 참조하는 "Hello world" 와 일반 리터럴 "Hello world" 는 서로 다른 주소값서 생성되는걸 확..
java 언어에서는 for each 구문을 지원합니다. 배열을 처음부터 끝까지 순회해주는 구문인데 사용법에 대해 간단히 알아봅시다. 배열 내부 값을 그냥 한번 확인하려는데 i는 0부터, length 까지, i++ 을 늘 써주려니 솔직히 귀찮습니다. 위 6-8 라인을 간결하게 처리하는게 아래 for each 구문입니다. 늘 하던대로(처음부터 끝까지 차례대로) 배열을 순회할거다 내 배열이 int 배열이니까 임시 변수 int 를 하나 선언하겠다. 배열요소 하나하나씩 임시 변수 int 에 담고, 다음단계로 넘어갈때는 한단계씩 자동으로 넘어가는 구문입니다. 사용법은 for 문 선언 후 조건부에 임시변수(배열의 타입과 같아야겠죠?) 를 선언, : 으로 구분후 배열을 넣어주면 됩니다. 그럼 i=0; i
- Total
- Today
- Yesterday
- OverTheWire
- ssh
- tr
- tar
- java
- BASE64
- bz2
- Encode
- 리눅스
- nc
- over the wire
- SSL
- 풀이
- gz
- Strings
- 32bit
- 웹보안
- 리터럴
- find
- X32
- Linux
- Bandit
- natas7
- grep
- OpenSSL
- Natas
- 압축파일
- 웹보안공부
- solution
- HTTPS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |