일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- xcz.kr
- 써니나타스
- wargame
- 문자열
- 백준
- misc
- 구현
- Web Hacking
- 사칙연산
- 수학
- Python
- Database
- Forensics
- writeup
- php
- MySQL
- Web
- Text
- Network
- 정렬
- N0Named
- Incognito
- SuNiNaTas
- cryptography
- C
- CTF
- 인코그니토
- Digital Forensics
- 그리디 알고리즘
- HackCTF
- Today
- Total
목록HackCTF (25)
보안을 그리다, 훈이
HackCTF Web 분야 Guess me(100p) 문제 풀이입니다. 주어진 URL로 접속해보자. 비밀 코드를 맞추면 플래그를 얻을 수 있다고 한다. 먼저, 소스코드를 살펴보자. 파일 secret.txt의 내용을 변수 $secretcode에 넣어두고, 이 값을 extract($_GET);으로 받아온 값인 변수 $guess와 비교하여 동일한 값이라면 플래그를 출력하는 구조이다. 본 문제는 PHP extract() 함수의 취약점을 다루고 있다. extract() 함수를 통해 $_GET 또는 $_POST로 넘어온 인자는 함수 사용 전의 기존 값을 overwrite할 수 있으며, 이를 방지하기 위해서는 변수를 선언하기 이전에 extract() 함수를 사용하여야 하고 overwrite를 방지하기 위해 EXTR_..
HackCTF Web 분야 마법봉(100p) 문제 풀이입니다. 제시된 링크로 접속해봅시다. 해쉬에 마법을 부여하면 뚫린다고 아주 친절하게 명시해 주었네요. 이는 PHP에 존재하는 Hash Magic Vulnerability에 대한 문제임을 유추할 수 있습니다. PHP Magic Hash Vulnerability는 PHP에서 == 연산자로 비교 시, 문자열의 형식이 ^0+e\d*$로 되어있을 때 이를 숫자형 데이터와 비교하게 되면 0으로 인식하게 되는 현상을 이용한 것인데 0의 n제곱은 항상 0이기 때문에 취약점이 발생하게 됩니다. 이전에 풀었던 인코그니토 문제와 같은 유형이네요! 자세한 풀이는 아래 링크를 참조하면 좋을 것 같습니다 :) [2021 INCOGNITO CTF writeup] Web - Do..
HackCTF Forensics 분야 잔상(250p) 문제 풀이입니다. 먼저, 'compare.zip' 파일을 다운로드하고 압축을 해제합니다. 위와 같이 대성마이맥 수학 영역 대표강사 한석원님이 우아한 자태를 뽐내는 사진이 두 장이 나오네요. 왼쪽 사진은 'afterimage_1.jpeg', 오른쪽 사진은 'afterimage_2.jpeg'입니다. 사진상으로 보면 아무런 차이가 없어 보이고 binwalk를 돌려도 나오는게 없네요. 일단, 파일 이름이 'afterimage'인 것을 보아 jpeg 푸터 시그니처인 'FF D9' 뒤에 어떠한 단서들이 숨겨져 있을 것 같네요. Hex Viewer로 까봅시다. 각각의 무수히 많은 값들을 일일이 비교하기에는 무리가 있어보여 jpeg 푸터 시그니처 이후의 hex 값을..
HackCTF Cryptography 분야 Classic Cipher -3(200p) 문제 풀이입니다. 'Classic_Cipher-3.zip' 파일을 다운로드하고 압축을 해제하면 'Cipher.txt' 파일이 나옵니다. 중괄호가 있는 것을 보아 flag를 암호화한 값인 것을 알 수 있습니다. 아핀 암호(Affine Cipher) 방식으로 복호화하면 flag가 추출됩니다. [Affine Cipher - Online Decoder] Affine Cipher - Online Decryption, Decoder, Encoder, Calculator Tool to decrypt/encrypt with Affine cipher, an encryption function with additions and multi..
HackCTF Cryptography 분야 Classic Cipher -2(150p) 문제 풀이입니다. 'Classic_Cipher-2.zip' 파일을 다운로드하고 압축을 풀어보니 '문제.txt' 파일이 나오네요. 이 문제는 단순 전치 암호(simple transposition cipher)이며, key 값은 'python'이라고 하네요. 세 번째 줄에 암호문 'hreCp1_ev_s117nr_ys17eer132n_5'이 있습니다. 먼저, key 값인 'python'이 6글자이므로 암호문의 문자들을 6열짜리 표에 하나씩 나열합니다. 다시 key 값으로 돌아가서, 'python'을 알파벳 사전순으로 번호를 매기면 4-6-5-1-3-2가 되죠. 앞서 만들어둔 6열짜리 표에서 행은 그대로 두고 열을 번호 순서대..
HackCTF MISC 분야 DNA(200p) 문제 풀이입니다. 중괄호로 쌓여있는 것을 보니 플래그 값이 암호화되어 있는 것 같군요. 'DNA 암호화'에 대해 구글링해봅시다. DNA 암호기법은 정보 저장, 디지털 서명, 인증, 신분증 등에 활용되며, 염기 4가지 adenine(A), thymine(T), cytosine(C), guanine(G) 알파벳으로 구성된다고 합니다. 위의 DNA 코드 표를 참고하여 복호화하면, TmowOFR{e0_saap_PZ4}가 도출됩니다. 여기서 Caesar Cipher로 복호화해보니 정상적으로 Flag가 출력되었습니다. Solve!
HackCTF MISC 분야 QRCODE(150p) 문제 풀이입니다. 'qrcode.zip' 파일 압축을 풀어주면 'qrcode.png' 이미지 파일이 추출됩니다. QR 코드를 보니 위치 검출 패턴이 이상합니다. 위치 검출 패턴의 내부 사각형이 텅 비어있네요! 검정색으로 손수 채워준 후 수정한 QR 코드를 인식해봅니다. 인식 결과. Solve!
HackCTF MISC 분야 Who am I?(100p) 문제 풀이입니다. 문제를 보니 x86 구조에서 EIP를 터뜨리는 것을 찾으라고 하네요. EIP는 명령 포인터 레지스터이며 다음에 실행해야 할 명령어가 존재하는 메모리 주소가 저장됩니다. ret = pop eip 즉, 플래그 값은 ret가 됩니다. Solve!
HackCTF MISC 분야 BF(50p) 문제 풀이입니다. 특수기호들이 괴상하게 나열되어 있습니다. 구글에 문제 이름인 BF를 검색하였더니 브레인퍽(Brainf***) 프로그래밍 언어라고 하네요. 브레인퍽 - 위키백과, 우리 모두의 백과사전 브레인퍽(Brainfuck)은 우어반 뮐러(Urban Müller)가 1993년 경에 만든 최소주의 컴퓨터 프로그래밍 언어이다. 이름에 포함된 fuck이 욕설이기 때문에, 정중한 표현을 위해서 때때로 Brainf*ck, Brainf***, 혹 ko.wikipedia.org 위키백과를 찾아보니 가장 작은 컴파일러로 구현할 수 있는 간단하면서도 튜링 완전한 프로그래밍 언어를 제작하는 것에 목적을 두고, 8개의 명령어로만 구성했다고 합니다. Brainf*** Online..