분류 전체보기 (73) 썸네일형 리스트형 WinRAR 취약점 실습 WinRAR 취약점 실습 img 폴더를 생성하고 이미지를 넣습니다. 이미지와 같은 이름으로 폴더를 생성합니다. 그 폴더 안에 실행하고자 파일명에 띄어쓰기를 포함하여 추가합니다. “pororo.jpg .exe” pororo.jpg 폴더 압축을 합니다. Archive name을 변경하고 (files) → (append) → img/pororo.jpg 를 추가해줍니다. pororo.jpg 폴더 뒤에 띄어쓰기를 추가하고 jpg 파일만 열어도 이름이 같은 프로그램들이 다 실행되는 것을 확인할 수 있다. 결과 분석 pororo.jpg 파일을 압축 해제를 하면 WinRAR에서 같은 이름의 폴더에 있는 파일들을 전부 압축해제를 진행한다. Windows API 는 파일 이름 앞뒤에 공백을 허용하지 않기에 압축 해제 시 .. [Dream Hack - Crypto] Private Storage RC4 암호화 과정 RC4는 256 byte 비밀키 대칭키 알고리즘으로, 동일한 키를 사용하여 메시지를 암호화하고 복호화한다. 암호화 과정은 KSA(Key Scheduling Algorithm)와 PRGA(Pseudo-Random Generation Algorithm) 두 가지 주요 알고리즘으로 이루어진다. 키 스트림 생성 https://www.youtube.com/watch?v=kfdvlaOD1ig&t=172s S배열: 0부터 255까지 값을 가짐. K배열: key 값을 가짐. KSA 알고리즘을 통해 키 스케줄링 수행. PRGA 알고즘을 통해 키스트림 도출. 암호화 암호문 = 평문 xor 키스트림 복호화 평문 = 암호문 xor 키스트림 문제 풀이 RC4에서는 동일한 key를 사용할 때, 동일한 키스트림.. [Dream Hack - Crypto] Padding Oracle PKCS#7 패딩 패딩 길이 계산: 패딩은 마지막 블록의 길이가 블록 크기와 다를 때 추가됩니다. 패딩의 값은 추가되어야 하는 바이트 수로 표현됩니다. 패딩 값의 일관성: 패딩 값은 추가되어야 하는 바이트 수로 일관성을 유지하며, 예를 들어 1바이트가 추가되어야 한다면 0x01, 2바이트가 추가되어야 한다면 0x02로 채워집니다. 이는 패딩을 나중에 제거할 때 어디까지가 패딩인지 쉽게 판단할 수 있도록 합니다. 모든 바이트가 패딩인 경우: 만약 데이터의 길이가 블록 크기의 정확한 배수일 때, 블록 크기만큼의 패딩이 추가됩니다. 이때 추가되는 모든 바이트 값은 패딩 값으로 사용됩니다. 패딩 제거 시 유효성 확인: 패딩 제거 시에는 추가된 패딩 값이 올바른지 확인해야 합니다. 이를 통해 데이터의 무결성을 유.. [Dream Hack - Crypto] Pyploit pdb.set_trace() 함수 pdb.set_trace()는 Python의 디버깅 모듈인 pdb를 사용하여 프로그램의 실행을 중단하고 대화형 디버깅 세션을 시작하는 코드이다. 이 코드를 사용하면 프로그램이 해당 부분에 도달했을 때, 프로그램의 실행이 일시적으로 중단되고 개발자가 코드를 단계별로 실행하거나 변수의 값을 확인하는 등의 디버깅 작업을 수행할 수 있다. UTF-8 UTF-8(Unicode Transformation Format - 8-bit)은 유니코드 문자 집합을 표현하는 데 사용되는 가변 길이 문자 인코딩 방법이다. 알파벳과 숫자의 경우, UTF-8 인코딩 시 1 byte를 차지하므로 1씩 증가하고, 한글의 경우 3 byte를 차지하므로 3씩 증가한다. 문제 해석 1. Encrypt 입력.. [Dream Hack - Crypto] [LINE CTF 2021] babycrypto1 CBC 모드 AES의 CBC (Cipher Block Chaining) 모드는 블록 암호화 모드 중 하나로, 각 블록을 암호화할 때 이전 블록의 암호문과 XOR 연산을 수행하는 방식으로 동작한다. IV(Initialization Vector) 선택: 무작위로 선택된 IV는 첫 번째 블록을 암호화하는 데 사용된다. 블록 단위 암호화: 평문을 블록 크기로 나눈 후, 각 블록은 이전 블록의 암호문과 XOR 연산을 수행한 뒤 AES 알고리즘을 사용하여 암호화된다. 주어진 코드 해석 1. token + b'test' 를 aes_key 를 사용하여 암호화하고 이를 출력한다. aes_key = get_random_bytes(AES.block_size) token = b64encode(get_random_bytes(A.. [Dream Hack - Crypto] X-Time Pad One-Time Pad One-Time Pad 는 일회성 패드를 이용하여 보안기능을 제공하는 암호 시스템이다. 평문과 키의 길이가 서로 동일해야 하며, 키는 단 한번만 사용되어야 한다. 암호화 과정에서 평문과 키 간의 XOR 연산을 사용한다. 문제 해석 flag_enc = FLAG ^ key FLAG 값을 읽어와서 key 와 xor 한 후 flag_enc 를 출력한다. new_key = key ^ rand_bit key에 무작위한 bit열을 더해서 새로운 키를 생성한다. 이때, rand_bit의 길이가 64byte이므로 new_key의 길이도 64byte에 근접할 것이라 추측할 수 있다. input_enc = {input} ^ new_key 우리가 입력한 값에 새로운 키를 xor 하여 암호화된 값을 출력.. [Dream Hack - Crypto] likeb64 Base64 정리 Base64는 6비트씩 묶어서 인코딩 표에 따라 특정 문자로 매핑됩니다. 따라서 3바이트(24비트)의 데이터를 4개의 Base64 문자로 인코딩합니다. 윗줄이 비트에 대응되는 Ascii 코드 문자열, 아랫줄이 Base64 표에 해당하는 인코딩된 문자열입니다. Base64는 3바이트씩 데이터를 처리하므로, 원본 데이터의 바이트 길이가 3의 배수가 아닌 경우 패딩을 추가하고 ‘=’ 으로 나타냅니다. 풀이 방법 flag_enc: IREHWYJZMEcGCODGMMbTENDDGcbGEMJZGEbGEZTFGYaGKNRTMIcGIMBSGRQTSNDDGAaWGYZRHEbGCNRQMUaDOMbEMRTGEYJYGUaWGOJQMYZHa=== hint : ABCDEFGHIJKLMNOPQRSTUVWXYZabc.. [DreamHack - Crypto] uncommon_e Common modulus attack Common Modulus Attack RSA 암호에서 같은 N과 GCD(e1, e2)=1 를 사용하여 같은 평문 m을 암호화해서 두 암호문 c1, c2을 만들었을 때, 이를 공격하는 기법이다. 공격자는 e1, e2가 서로소라는 점을 활용해 r*e1 + s*e2=1이고, (r, s) 쌍을 확장 유클리드 알고리즘을 통해 구할 수 있다. 유클리드 알고리즘 유클리드 알고리즘을 사용하여 GCD 를 구하는 방법을 알아보자. 106과 16의 GCD를 찾기 위해서 목과 나머지를 활용하면 다음과 같이 나타낼 수 있다. 우변이 0이 될 때 그전 식의 우변 2가 106, 16의 GCD가 된다. 풀이 방법 FLAG_enc1 = FLAG^e1 mod N FLAG_enc2 = FLAG^e.. 이전 1 2 3 4 5 6 7 ··· 10 다음