<보안 study> 54

[RSA 이해를 위한 몸부림 - 3] RSA 암호화 간단히 이해

RSA 암호화 RSA는 공개키 암호화 방식중 하나이다. 우선, 암호화 하는데에 KEY가 필요하겠다. 키는 총 두 가지의 KEY가 관여하는데 하나는 공개키, 하나는 개인키(비밀키)이다. 먼저 이 KEY들이 어떻게 만들어지는지 보자. 1. KEY 우선 공개키. 임의의 서로소인 수 p, q를 정하자. 그리고 n = p * q Φ(n) = (p-1) * (q-1)이라 하자. (Φ는 "파이" 라고 읽으면 된다) 그리고 1 < e < Φ(n) 이면서 Φ(n)과 서로소인 e를 정한다. 여기까지 잘했다면 공개키는 두 수 n과 e의 조합인 로 정할 수 있다. 다음은 개인키. 여기서 이전에 설명했던 모듈러 연산 및 역원이 쓰이는데 공개키 e와 곱해져서서 Φ(n)으로 나눴을 때 나머지가 1이 되는 d가 개인키에 이용된다. ..

[RSA 이해를 위한 몸부림 - 2] 모듈러 연산

모듈러 연산 모듈러 연산은 간단히 말하면 나머지를 구하는 연산이라고 볼 수 있다. 위 식에서 a는 피제수, b는 제수, c는 나머지 이다. 예를 들면, 26 mod 5 = 1 이 될 수 있을 것이다. 이해 되었다면 이제 모듈러 연산의 여러 특징을 정리하려 한다. 1. 합동 모듈러 연산에서 26 mod 5 나 36 mod 5 는 모두 똑같이 1로 같다. 이를 합동 이라는 개념으로 부를 수 있으며 표현은 이와 같이 한다. 1 ≡ 6 ≡ 26 ≡ 36 mod 5 = 1 2. 성질 모듈러 연산에는 아래와 같이 좌변의 덧셈과 곱셈에 대해 분해할 수 있는 성질이 있다. [1] (a + b) ≡ ((a mod n) + (b mod n)) mod n [2] (a * b) ≡ ((a mod n) * (b mod n)) ..

[RSA 이해를 위한 몸부림 - 1] 유클리드 알고리즘과 확장된 유클리드 알고리즘

1. 유클리드 알고리즘 유클리드 알고리즘은 최대 공약수의 두 가지 성질에 기반한 두 수의 최대공약수 추출 알고리즘이다. gcd(a,0) = a 두 수 중에서 한 쪽이 0이라면 두 수의 최대공약수는 다른 한 쪽 수이다. gcd(a,b) = gcd(b,r) ( ※ r은 a를 b로 나눈 나머지이다. ) 위와 같은 성질을 통해 나온 유클리드 알고리즘은 다음과 같다. gcd(a,b) = gcd(b,r) = ... = gcd(r,0) = r 이에 대한 것은 예제로 알아보자. ex) gcd(48,15) = gcd(15,3) = gcd(3,0) = 3 이런 식으로 48과 15의 최대공약수를 구할 수 있다. 파이썬으로 유클리드 알고리즘을 짜보자. def gcd(a,b): if(b==0): return a return g..

[Hack.lu 2019] no_risc_no_future

no_risc_no_future #mips #pwn ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/Hack.lu_2019/pwn/no_risc_no_future제목 그대로 risc 형식의 mips 아키텍쳐로 된 바이너리에 대한 pwnable 문제이다. Ghidra로 열어본 바이너리는 이런 모습이다. 64바이트짜리 배열에 256바이트를 입력할 수 있게 해준다. 그리고 입력한 버퍼를 출력시켜준다. 그리고 Canary 외에는 별다른 보호기법도 걸려있지 않는 것으로 보아, buffer overflow 이후, 쉘코드를 이용하여 쉘을 얻어내면 될 것 같다. 대강 순서는 이러하다. 1. puts 함수를 이용해서 canary를 leak 2...

<보안 study>/CTFs 2019.12.21

[SECCON 2019] Follow me

follow_me #reversing ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/SECCON_2019/rev/follow_me 우리의 숙제는 계산기 프로그램에서 실행했던 기록 중에서도 branch 명령에 대한 기록을 보고, 어떤 공식을 프로그램에 전달했는지 찾는 것이다. 파일은 총 3개, 계산기 프로그램 바이너리와 branch명령에 대한 기록, 그리고 branch명령을 따라가는 추적프로그램에 대한 소스코드를 준다. 필자는 앞의 계산기 프로그램 바이너리와 branch 명령에 대한 기록만 보고 문제를 풀었다. main 함수이다. 바이너리의 사용법과 실제로 계산을 해주는 함수가 들어있다. calculate 함수의 switch문 ..

<보안 study>/CTFs 2019.12.21

[SECCON 2019] Coffee_break

COFFEE_BREAK #crypto #reversing※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/SECCON_2019/crypto/coffee_break 간단히 풀 수 있었던 크립토(?) 라기엔 리버싱에 가까운 문제였다. The program "encrypt.py" gets one string argument and outputs ciphertext. Example: $ python encrypt.py "test_text" gYYpbhlXwuM59PtV1qctnQ== The following text is ciphertext with "encrypt.py". FyRyZNBO2MG6ncd3hEkC/yeYKUseI/CxYoZ..

<보안 study>/CTFs 2019.12.21

[TokyoWesterns 2019] EASY_CRACK_ME

EASY_CRACK_ME #z3 #reversing ※ 원본 Write Up : https://github.com/goseungduk/CTF_WriteUp/tree/master/TokyoWesterns_2019/reverse/easy_crack_me 단순한 Crack Me 유형의 문제입니다. 인자로 플래그를 받는데, 맞지않는 값을 넣으면 incorrect를 출력시켜줍니다. 바이너리를 뜯어보면 알겠지만 플래그 인증과정이 총 8개정도 있고, 모든 조건에 다 맞아야 정확한 플래그로 인지합니다. 첫 번째 조건 플래그길이는 총 39바이트여야하며, TWCTF{ 로 시작하여 } 로 끝나야합니다. 두 번째 조건 우선 0123456789abcdef 의 표본이 될 문자열이 주어집니다. 그리고 반복문으로 순회하면서 인자로 ..

<보안 study>/CTFs 2019.12.21

Ghidra-Server 기관에 직접 계정의뢰하기

GhidraServer Ghidra-Server 지난 게시글에서는 직접 내 컴퓨터에 Ghidra 서버 구성 하는 법을 작성해보았다. https://goseungduk.tistory.com/33 하지만, Ghidra-Server 기관에서는 현재 더 나은 Ghidra-Server를 위해 피드백도 받고 업데이트도 지속적으로 할 목적으로 자체 공식 서버를 파놓았다. 또한 서버 구축이 어렵거나 안정적인 서버를 원하는 단체에게는 이만한 안성맞춤이 없다. 아무래도 이번 게시글은 기술적인 글보다는 Ghidra-Server에 컨택할 수 있는 방법론에 대해 적으려고 한다. https://twitter.com/Ghidra_Server Ghidra-Server Twitter 우선 Ghidra-Server는 이메일 또는 트위터..

Ghidra-Server 환경 구성하기

GhidraServer Ghidra-Server 이번 포스팅은 팀원끼리 함께 리버싱을 할 수 있는 Ghidra-Server를 어떻게 세팅할 수 있는지 방법을 정리해보려 한다. Ghidra-Server가 제공하는 Shared Project는 리버스 엔지니어링을 하면서 처음 보는 개념이라 신기했다. 우리가 보통 여럿이서 대규모 프로젝트(악성코드 분석에서 라던지...)를 한다던지 CTF 문제를 함께 푼다던지.. 할 때 좋을 것 같다. 우선 이 글을 읽을 때 쯤이면 Ghidra는 설치 되어있을 것이라 생각하고 Ghidra 설치에 관한 내용은 생략하겠다. [server.conf] 우선 서버의 바이너리 및 프로젝트들을 담을 repository 경로를 정해주자. 필자는 Ghidra폴더 최상위에 repo라는 폴더를 만..

QEMU로 MIPS 구동 환경 구성하기

MIPS를 사용할 일이 생겨서 현재 사용하는 Ubuntu 16.04 LTS 에 QEMU로 가상환경을 조성하기로 하였다. 우선 MIPS를 구동할 QEMU부터 설치하자. sudo apt-get install qemu 이렇게 하면 MIPS 외에도 다른 하드웨어, 플랫폼을 위한 QEMU 구성요소가 설치된다. (상당히 QEMU에서 지원하는 부분이 많다) 이제 QEMU를 설치했으니 구동시킬 커널과 이미지를 받아보자 커널 wget https://people.debian.org/~aurel32/qemu/mipsel/vmlinux-3.2.0-4-4kc-malta 이미지 wget https://people.debian.org/~aurel32/qemu/mipsel/debian_wheezy_mipsel_standard.qco..

반응형