분류 전체보기 309

Diffie-Hellman 키 교환

출처 : dreamhack.io 동아리에서 암호학을 공부할 기회가 생겨서 드림핵보고 공부한 것을 정리해보려고 한다. 1. 개요 대칭키 암호 : 암호화와 복호화에 같은 키를 쓰는 알고리즘 -> 전제 조건 : 수신자와 송신자가 같은 키를 공유하고 있어야 함 대칭키 암호 시스템을 사용하여 통신하려면, 데이터를 교환하기 전에 키 교환(Key Exchange)이 이뤄져야 함 하지만 일반적으로 아주 먼 거리의 대상과 통신하는 현대 유무선 환경에서는 안전한 키 교환이 쉽지 않음 공개된 채널을 통해 키를 교환해도 외부인은 키를 알 수 없게 하는 공개 키 교환 알고리즘 등장! 2. 수학적 원리 전 이거 완벽하게 이해 못했습니다. 1) 모듈로 연산에서의 거듭제곱 임의의 합동 항등식에 대해, 양변에 동일한 값을 곱해도 식은..

Crypto 2021.03.17

[HackCTF : Pwnable] g++ pwn 풀이 (CPP)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.2 pro 긴가 민가 했었는데 잘 찍어서 푼 것 같다. 아 풀 당시에는 IDA 7.5를 사용했었는데 디컴 자체는 7.2가 알아보기 더 쉬운 것 같다. 주어진 파일은 문제 바이너리 파일 뿐. . . 분석에 들어가기에 앞서... 난 이 파일을 실행하려 했을 때 아래와 같은 오류가 떴다. 그래서 아래와 같은 방법으로 해결하였다. apt-get install lib32stdc++6 stackoverflow.com/questions/11471722/libstdc-so-6-cannot-open-shared-object-file-no-such-file-or-directory libstdc++.so.6: cannot open shared object f..

WAR GAME/HackCTF 2021.03.16

[HackCTF : Pwnable] RTL_World 풀이 (32bit, RTL)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro 소스코드 복잡해보여서 쫄았는데 별거 아니었다. 뿌듯하다. 주어진 파일은 문제 바이너리 파일 뿐이다. Analysis IDA로 까보자. 너무 길어서 그냥 복붙했다. int __cdecl main(int argc, const char **argv, const char **envp) { int result; // eax int v4; // [esp+10h] [ebp-90h] char buf[128]; // [esp+14h] [ebp-8Ch] void *system; // [esp+94h] [ebp-Ch] void *handle; // [esp+98h] [ebp-8h] void *binsh; // [esp+9Ch] [ebp-4h] se..

WAR GAME/HackCTF 2021.03.16

[NOTE : pwnable] PIE 보호기법 우회

PIE 보호기법이 걸려있으면 매우 작은 주소에 코드들이 위치한다. 왜냐면 주소공간의 어느 위치에 매핑되어도 작동하도록 상대주소로 되어있는 것... 아무튼 프로그램을 실행할 때마다 매핑되는 주소가 달라진다. ROP ㄴㄴ 실행중인 프로그램의 pie_base를 leak한다. 실제주소와 get_shell 같은 함수의 offset 차이를 이용한다. 한마디로 각 함수들이 동일한 offset으로 주소를 할당 받는 것을 이용한다.

Note/pwnable 2021.03.15

[HackCTF : Pwnable] BOF_PIE 풀이 (32bit, BOF, PIE)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro PIE 먹고 싶다. 주어진 파일은 문제 바이너리 파일 하나 뿐 Analysis IDA로 까보자. scanf는 전형적으로 bof가 발생하는 함수이다. j0n9hyun 함수에서 flag를 읽어오는데 마침 bof도 일어나니 RET를 저 함수의 주소로 바꾸어주면 될 것 같다. 실행을 해보면 welcome 함수의 주소가 출력이 되는데 끝에가 909로 일정하지만 계속 랜덤하게 주소를 출력하고 있다. 그 이유는 gdb로 welcom함수의 주소를 읽어보면 저런식으로 매우 작은 주소로 설정이 되어 있는데, 주소공간의 어느 위치에 매핑되어도 작동하도록 상대주소로 되어있다는 뜻이다. 아무튼 PIE 보호기법이 설정되어있다는 것을 의심을 할 수 있다...

WAR GAME/HackCTF 2021.03.15

[HackCTF : Pwnable] Offset 풀이 (32bit, BOF)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro 어떻게 풀까 살짝 고민했지만 어쨌든 바로 잘 풀어냈다. Analysis gets함수에서 BOF가 일어난다. select_func 함수가 수상해보이니 살표보자. main함수에서 BOF가 일어나니깐 내가 원하는 함수를 실행시킬 수 있다. 참고로 return address를 바꾸는 느낌이 아니라 위에 선언된 변수 두개를 덮어쓰는 거다. 실행시킬 함수는 print_flag이다. How to exploit payload = dummy(dest) + print_flag함수주소(*func) Let's exploit from pwn import * #p = process('./offset') p = remote('ctf.j0n9hyun.xyz..

WAR GAME/HackCTF 2021.03.09

[HackCTF : Pwnable] Simple_Overflow_ver_2 풀이 (32bit, shellcode)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro Analysis scanf에서 BOF가 터진다. 그리고 buf 주소를 친절하게 출력해 준다. 이게 끝이다. 이전문제랑 걍 똑같다. How to exploit 보호기법도 클린하니 쉘코드를 이용하면 될 것 같다.(NX disabled) (이전문제랑 똑같아서 아무생각없이 64bit shellcode를 넣었었는데 이 문제는 32bit이다; 방심 ㄴㄴ;) payload = 쉘코드 + dummy + SFP + RET(쉘코드 주소) RET에는 쉘코드 자체가 아니라 쉘코드 주소가 들어가야하는 것을 명심명심 Let's exploit from pwn import * #p = process('./Simple_overflow_ver_2') p = r..

WAR GAME/HackCTF 2021.03.09

[HackCTF : Pwnable] x64 Simple_size_BOF 풀이 (64bit, shellcode)

문제 풀이 환경 : ubuntu 20.04 사용 툴 : IDA 7.5 pro Analysis 자살 방지 문제란다. 대놓고 gets에서 BOF가 터진다. buf 주소도 친절하게 출력해준다. 이것과 BOF가 터지는 것을 이용하면 될 것 같다. How to exploit 보호기법도 클린하니 쉘코드를 이용하면 될 것 같다.(NX disabled) payload = 쉘코드 + dummy + SFP + RET(쉘코드 주소) RET에는 쉘코드 자체가 아니라 쉘코드 주소가 들어가야하는 것을 명심명심 Let's exploit from pwn import * #p = process('./Simple_size_bof') p = remote('ctf.j0n9hyun.xyz', 3005) e = ELF('./Simple_siz..

WAR GAME/HackCTF 2021.03.09