Wargame/HackCTF30 Unexploitable #3 1. Mitigation GOT Overwrite가 가능하고 NX가 실행되어 있어 쉘 코드 삽입이 불가능 하다. 2. 문제 확인 문제를 실행 시키면 Impossible RTL ha? 문자열이 출력되고 입력을 받고 종료한다. 3. 풀이 메인함수에서는 fgets를 통해 BOF가 일어난다. gift 함수부분을 보면 가젯을 선물로 주는데 나중에 사용할 수 도 있으니 일단 알아만 놓자. RTC기법으로 fwrite와 fgets를 통해 릭을 해야하는데 fwrite를 보면 mov rcx, [rdi] 부분이 있다. fwrite의 rcx부분 stdout을 처리하기 위해 이 부분을 이용할 것 이다. stdout got 0x601050 우리는 RTC(Return to csu)기법을 통해 fgets의 주소를 릭을하여 libc .. 2021. 5. 1. World Best Encryption Tool 1. Mitigation GOT Overwrite가 가능하고 실행권한도 없다. 그리고 카나리가 걸려있다. 2. 문제 확인 문제를 확인해보면 입력을 받는데 입력을하니 문자가 암호화되서 나오고 yes를하면 다시 입력을 받고 No을하면 종료한다. 3. 문제 풀이 소스 코드를 보면 입력을 받고 do ~ while문이 있고 그 안에 while문에서 xor 연산을하여 암호화를 한다. strncpy에서 local_48에 local_88을 복사를하느데 0x39(57)바이트 만큼 복사를 한다. 그리고 계속 진행할건지 안할건지 묻고 안한다면 프로그램을 종료하는데 카나리 검사를 한다. 아까 문제확인을 할때 암호화한 값을 출려개주는데 그 부분에서 카나리를 릭하면 될거 같은 느낌이 강하게 든다. gdb로 확인해보자. rbp-0.. 2021. 4. 20. ROP 1. Mitigation GOT Overwire가 가능하고 실행권한이 없다. 2. 문제 확인 문제를 실행시키면 입력을 받고 헬로 월드를 출력해주고 종료한다. 3. 풀이 메인 함수에 vulnerable_function() 함수가 보이고 헬로월드를 출력해준다. vulnerable_function함수를 보면 0x100만큼 입력는데 BOF가 일어나고 간단한 ROP 문제이다. 가젯을 구하고 RTL을하여 read got나 write got로 주소를 leak하여 system함수의 주소를 구하면 된다. ROPgadget으로 pop pop pop ret 가젯을 찾아보니 바로 있다. 이제 익스를 해보자. exploit from pwn import * r = remote('ctf.j0n9hyun.xyz', 3021) e =.. 2021. 4. 3. Register 1. Mitigation GOT Overwrite가 가능하고 카니리가 있고 실행 권한이 없다. 2. 문제 확인 문제의 이름처럼 각각의 레지스터에 입력을 받는다. IDA로 분석 해보자. 3. 풀이 메인 함수를 보면 alarm() 함수가 보이고 build() 함수가 보인다. alarm 함수는 지정 시간이 되면 자신에게 SIGALRM(14) 시그널을 전송하는데 프로세스가 SIGALRM을 받으면 종료한다. 이점을 기억하고 buil()를 보자. signal(int signum, sighandler_t handler)이 있는데 signum인 14가 발생하면 handler 함수를 처리한다. handler 함수부터 차례대로 살펴보도록 하겠다. handler 함수안에서 exec_syscall_obj 함수를 부르는데 이.. 2021. 4. 3. 이전 1 2 3 4 ··· 8 다음