전체 글
LA CTF 2023 - crypto / one-more-time-pad
1. intro 2. code 및 분석 2.1. code from itertools import cycle pt = b"Long ago, the four nations lived together in harmony ..." key = cycle(b"lactf{??????????????}") ct = "" for i in range(len(pt)): b = (pt[i] ^ next(key)) ct += f'{b:02x}' print("ct =", ct) #ct = 200e0d13461a055b4e592b0054543902462d1000042b045f1c407f18581b56194c150c13030f0a5110593606111c3e1f5e305e174571431e 2.2. 분석 xor으로 구성된 단순한 문제..
LA CTF 2023 - pwn/rut-roh-relro
1. intro 2. code 및 분석 2.1. code #include int main(void) { setbuf(stdout, NULL); puts("What would you like to post?"); char buf[512]; fgets(buf, 512, stdin); printf("Here's your latest post:\n"); printf(buf); printf("\nWhat would you like to post?\n"); fgets(buf, 512, stdin); printf(buf); printf("\nYour free trial has expired. Bye!\n"); return 0; } 2.2. 분석 앞선 문제와 유사하지만, 이번에는 두번 입력받고 두번 출력해준다. 3. ..
LA CTF 2023 - pwn / rickroll
1. intro 2. code 및 분석 2.1. code #include int main_called = 0; int main(void) { if (main_called) { puts("nice try"); return 1; } main_called = 1; setbuf(stdout, NULL); printf("Lyrics: "); char buf[256]; fgets(buf, 256, stdin); printf("Never gonna give you up, never gonna let you down\nNever gonna run around and "); printf(buf); printf("Never gonna make you cry, never gonna say goodbye\nNever gonn..
LA CTF 2023 - pwn/bot
1. intro 2. code 및 분석 2.1. code #include #include #include #include int main(void) { setbuf(stdout, NULL); char input[64]; volatile int give_flag = 0; puts("hi, how can i help?"); gets(input); if (strcmp(input, "give me the flag") == 0) { puts("lol no"); } else if (strcmp(input, "please give me the flag") == 0) { puts("no"); } else if (strcmp(input, "help, i have no idea how to solve this") == 0..
LA CTF 2023 - pwn/gatekeep
1. intro 2. code 및 분석 2.1. code #include #include #include #include #include void print_flag() { char flag[256]; FILE* flagfile = fopen("flag.txt", "r"); if (flagfile == NULL) { puts("Cannot read flag.txt."); } else { fgets(flag, 256, flagfile); flag[strcspn(flag, "\n")] = '\0'; puts(flag); } } int check(){ char input[15]; char pass[10]; int access = 0; // If my password is random, I can gatekee..
pwntools 64bit fmtstr_payload
서론 최근까지도 format string bug 문제가 나오면 직접 페이로드를 작성했었다. 왜나하면 기본적인 pwntools fmtstr_payload가 64 bit 용으로는 제대로 작성되지 않는 경우가 많았기 때문이다. 더불오 인터넷에 올라와있는 많은 코드들도 오류가 발생하는 경우가 대부분이었다. 고정된 주소라면 상관 없지만, leak 된 주소를 기반으로 하는 페이로드 작성이 시간이 지날수록 귀찮아짐에 따라 fmtstr_payload를 적극적으로 사용하기 위해 검색을 조금 했고, 드디어 찾아냈다. 방법 해결 방법이 너무 쉬웠다 -_- 단순히 contet.bits만 확실히 선언해주면 된다. 예를 들면 아래와 같다. from pwn import * context.bits = 64 system = 0x7f1..
vscode 탐색기에서 불필요한 파일 숨기기
서론 노트북을 하나 지르고, 셋팅을 다시 하는 와중에 vscode와 wsl을 연동한 다음 탐색기에서 wsl의 모든 숨긴 파일을 가져오기에 이를 숨길 수 있는 방법을 찾아냈다. 본론 아래와 같이 처음 연동하면 계정 폴더 내의 숨김 파일을 모두 보여준다. 이를 숨기기 위해서는 아래와 같이 숨길 파일을 지정해주면 된다. 파일 -> 기본설정 -> 설정 상단 "설정 검색" 에서 file:exclude 를 써주고 나오는 창에서 "패턴 추가" 버튼을 누르고 **/.* 추가 확인 버튼을 누르자마자 사라진다.
Legendre Symbol - 르장드르 기호
서론 지금까지 이런 해킹은 없었다. 이것은 크립토인가 수학인가. 이론 앞서 공부한 제곱 잉여 x^2 = a mod p 에서 p가 충분히 작다면 쉽게 a를 구할 수 있었지만, p가 커지면 어떻게 제곱 잉여인지 아닌지 쉽게 확인할 수 있을까. 르장드르 기호는 어떤 수가 제곱 잉여인지 아닌지 나타내는 함수이다. 기호는 아래와 같은데, 분수처럼 생겼지만 분수랑은 관계 없다. 르장드르 기호의 정의는 아래와같다. 포스팅에서는 편의 상 (a / p) 라고 하겠다. 즉, (a / p)가 1이면 제곱 잉여, -1이면 비 제곱 잉여, 0이면 잉여 없음으로 표현한다. 이들은 제곱 잉여의 성질에 대응하는데, 제곱 잉여 * 제곱 잉여 = 제곱 잉여 제곱 잉여 * 비제곱 잉여 = 비제곱 잉여 비제곱 잉여 * 비제곱 잉여 = 제곱..
Quadratic Residues
1. intro 2. code 및 분석 2.1. code N/A 2.2. 분석 나머지 계산에서 곱셈과 나눗셈에 대해서 알아보았지만, 나머지를 제곱근으로 표현하는 것이 무엇을 의미할까. p = 29라고 가정해보자. a^2 = 5 mod 29를 계산해보면 a는 11이 됨을 알 수 있다. (앞서 작성한 코드를 조금 수정해서 사용) ┌──(kali㉿kali)-[~/Downloads] └─$ python solve.py 29 ['1 : 1', '2 : 4', '3 : 9', '4 : 16', '5 : 25', '6 : 7', '7 : 20', '8 : 6', '9 : 23', '10 : 13', '11 : 5', '12 : 28', '13 : 24', '14 : 22'] 그러므로 11은 5의 제곱근이라고 할 수 ..
Quadratic Residues - 제곱 잉여
서론 과연 크립토의 수학은 어디까지 가는가... ㅋㅋㅋ 이론 요약하자면 x^2 ≡ a mod n 을 만족하는 정수 x가 있으면 a는 n의 제곱 잉여, 없으면 제곱 비잉여 라고 한다. 예를 들어 n =7 이라고 가정하면 1^2 ≡ 1 ≡ 1 mod 7 2^2 ≡ 4 ≡ 4 mod 7 3^2 ≡ 9 ≡ 2 mod 7 4^2 ≡ 16 ≡ 2 mod 7 5^2 ≡ 25 ≡ 4 mod 7 6^2 ≡ 36 ≡ 1 mod 7 ... (이후에는 반복됨) 이기 때문에 1,2,4가 7의 제곱 잉여가 된다. 한편, 3,5,6은 비 제곱 잉여가 된다. 한번 더 해보자. 만일 n이 13이라면 1^2 ≡ 1 ≡ 1 mod 13 2^2 ≡ 4 ≡ 4 mod 13 3^2 ≡ 9 ≡ 9 mod 13 4^2 ≡ 16 ≡ 3 mod 13..