Return to libc6 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. Unexploitable #2 Unfexploitable #1의 다은 단계 문제인거 같다. 1. Mitigation 2. 문제 확인 문제를 실행시켜보면 unexploitable #1과 다르게 fflush의 문자열을 이용할 수 없는거 같다. IDA로 확인하자 3. 풀이 main 함수를 보면 fflush가 없는걸 확인 할 수 있다. gift 함수는 똑같이 주어지기 때문에 1번 문제에서 풀었던 것 처럼 system 함수와 fgets를 이용해 주소를 leak하고 ROP를 하면 된다. exploit from pwn import * r = remote('ctf.j0n9hyun.xyz', 3029) e = ELF('./Unexploitable_2') prdi = 0x0000000000400773 system_plt = e.plt['system'].. 2021. 3. 31. Unexploitable #1 1. Mitigation 2. 문제 확인 문제를 실행시키면 입력받고 종료를 한다. 3. 풀이 fwrite로 출력을하고 fgets에서 입력을 받는데 BOF가 일어난다. 여기선 gift 함수가 주어진다. 시스템 함수는 일반적으로 인자를 줄때 명령어를 줘야하는데 명령어가 아닌 값을 주면 오류를 일으킨다. 이를 이용해서 fgets got를 leak하여 ROP를 하는 방법이 있지만. 필자는 다른 방법으로 풀고 ROP exploit 코드는 밑에서 확인할 수 있다. 코드에 fflush가 있는데 우리는 이 sh를 이용하여 쉘을 실행할 것 이다. fflush가 0x4003bb이니 sh는 0x4003bf이다. exploit from pwn import * r = remote('ctf.j0n9hyun.xyz', 3023) .. 2021. 3. 31. Gift 1. Mitigation NX enabled 인거 말고는 걸려있는 것 이 없다. 2. 문제 확인 문제를 실행시켜보면 의문의 주소 두개를 보여주고 첫 번째 입력을 받으면 입력한걸 출력해주고 두 번째에 또 입력을 받는다. 저 주소의 정체가 무엇인지 확인 하자. 3. 풀이 IDA를 통해 확인해 보면 두 개의 주소는 binsh와 system의 주소이다. 주소를 알려주기 때문에 Gift인가? 그리고 두번의 입력을 받는데 두 번째 입력을 통해 오버플로우가 일어나는데 저 두 주소를 이용하여 RTL을 하면 from pwn import * p = remote('ctf.j0n9hyun.xyz', 3018) lib = ELF('/lib/i386-linux-gnu/libc.so.6') e = ELF('./gift') pr =.. 2021. 3. 23. 이전 1 2 다음