LA CTF 2023 - pwn / rickroll
·
CTF/Solved
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
·
CTF/Solved
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
·
CTF/Solved
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
·
Tips & theory
서론 최근까지도 format string bug 문제가 나오면 직접 페이로드를 작성했었다. 왜나하면 기본적인 pwntools fmtstr_payload가 64 bit 용으로는 제대로 작성되지 않는 경우가 많았기 때문이다. 더불오 인터넷에 올라와있는 많은 코드들도 오류가 발생하는 경우가 대부분이었다. 고정된 주소라면 상관 없지만, leak 된 주소를 기반으로 하는 페이로드 작성이 시간이 지날수록 귀찮아짐에 따라 fmtstr_payload를 적극적으로 사용하기 위해 검색을 조금 했고, 드디어 찾아냈다. 방법 해결 방법이 너무 쉬웠다 -_- 단순히 contet.bits만 확실히 선언해주면 된다. 예를 들면 아래와 같다. from pwn import * context.bits = 64 system = 0x7f1..
vscode 탐색기에서 불필요한 파일 숨기기
·
Tips & theory
서론 노트북을 하나 지르고, 셋팅을 다시 하는 와중에 vscode와 wsl을 연동한 다음 탐색기에서 wsl의 모든 숨긴 파일을 가져오기에 이를 숨길 수 있는 방법을 찾아냈다. 본론 아래와 같이 처음 연동하면 계정 폴더 내의 숨김 파일을 모두 보여준다. 이를 숨기기 위해서는 아래와 같이 숨길 파일을 지정해주면 된다. 파일 -> 기본설정 -> 설정 상단 "설정 검색" 에서 file:exclude 를 써주고 나오는 창에서 "패턴 추가" 버튼을 누르고 **/.* 추가 확인 버튼을 누르자마자 사라진다.
Legendre Symbol - 르장드르 기호
·
Tips & theory
서론 지금까지 이런 해킹은 없었다. 이것은 크립토인가 수학인가. 이론 앞서 공부한 제곱 잉여 x^2 = a mod p 에서 p가 충분히 작다면 쉽게 a를 구할 수 있었지만, p가 커지면 어떻게 제곱 잉여인지 아닌지 쉽게 확인할 수 있을까. 르장드르 기호는 어떤 수가 제곱 잉여인지 아닌지 나타내는 함수이다. 기호는 아래와 같은데, 분수처럼 생겼지만 분수랑은 관계 없다. 르장드르 기호의 정의는 아래와같다. 포스팅에서는 편의 상 (a / p) 라고 하겠다. 즉, (a / p)가 1이면 제곱 잉여, -1이면 비 제곱 잉여, 0이면 잉여 없음으로 표현한다. 이들은 제곱 잉여의 성질에 대응하는데, 제곱 잉여 * 제곱 잉여 = 제곱 잉여 제곱 잉여 * 비제곱 잉여 = 비제곱 잉여 비제곱 잉여 * 비제곱 잉여 = 제곱..
Quadratic Residues
·
Wargame/Cryptohack
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 - 제곱 잉여
·
Tips & theory
서론 과연 크립토의 수학은 어디까지 가는가... ㅋㅋㅋ 이론 요약하자면 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..
2월 초에 쓰는 일기
·
Diary
자체평가 : ★★★★☆ 일이 다소 바쁜 와중에도 열공 하고 있긴 하다. 리버싱 공부를 계획했는데, 크립토로 살짝 빠졌다. 요즘엔 리버싱보다 크립토 공부를 더 많이 하는 것 같다. 드림핵 컨텐츠 위주로 공부하고 있었는데, 역시 만능인 곳은 없나보다. 어쩌다보니 알게된 cryptohack이 크립토 분야에 있어서는 아주 체계적으로 공부할 수 있는 것 같다. (강추!) 약간 무지성 문제가 많은 리버싱보다는 훨씬 도움이 되는 것 같기도 하고. 하지만 목표 달성이라는 관점에서 드림핵 문제를 좀 풀어야하긴 하는데, 다소 시간이 오래 걸릴 것 같다. 포너블쪽은... 진행이 안된다. 사실 리버싱 + 크립토 공부 때문에 못하고 있다는게 더 맞는 것 같다. 조금 여유가 생기면 다시 시작해야겠다. 작년부터 기다렸던 일인데, ..
BB CTF 2023 - Medium pwn
·
CTF/Solved
1. intro 2. code 및 분석 2.1. code 2.1.1. main int __cdecl __noreturn main(int argc, const char **argv, const char **envp) { puts("Hi! I am the Stack Oracle.\n"); while ( 1 ) gimme_pointer("Hi! I am the Stack Oracle.\n", argv); } 2.1.2. gimme_pointer unsigned __int64 gimme_pointer() { const void *v1; // [rsp+8h] [rbp-28h] BYREF char buf[24]; // [rsp+10h] [rbp-20h] BYREF unsigned __int64 v3; // [rsp..