본문 바로가기

ROP11

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.
SysROP 1. Mitigation 2. 문제 확인 문제를 실행시키면 입력을 받고 프로그램을 종료한다. 문제 이름 그대로 ROP를 해야할거 같은 느낌이다. 3. 풀이 IDA를 통해 문제를 분석해보면 buf와 ret까지의 거리는 0x10 + 0x8(sfp)인 것과 read 함수를 통해 오버플로우가 일어난다. 그런데 특이한게 함수 부분을 보면 사용할 수 있는 함수가 read하나 밖에 없다는점이다. 일단 gdb로 분석해 보자. gdb로 분석할려고 메인을 볼려고하니까 심볼을 불러올 수 없다고 한다.... 그래서 확인해보니 stripped(안티디버깅) 파일이였다. 그래서 가젯을 구하고 ROP를 할려고 했으나 마땅히 사용할 함수는 없어서 한참을 고민했다. 검색을 하면서 찾다보니 syscall을 이용하는 방법이 있었다. 일단 .. 2021. 3. 24.