본문 바로가기

시스템해킹45

[Toddler's Bottle] - bof 이번 문제는 bof문제이다. 위의 주소로 파일을 다운받고 문제를 확인해 보자. 문제를 실행시켜보면 overflow me가 출력됨가 동시에 입력을 받을 수 있는데 입력을 받으니 Nah..를 출력한다. 소스 코드가 같이 제공되니 소스 코드를 확인해보자. 소스 코드를 보면 func함수의 인자로 0xdeadbeef를 넘겨주고 overflowme가 32바이트로 할당되어있다. 계속해서 코드를 살펴보면 gets함수에서 overflowme의 입력을 받는데 여기서 Buffer Overflow 취약점이 일어난다. bof 취약점을 이용해서 key 값을 0xcafebabe로 덮어주면 쉘을 획득할 수 있다!! gdb로 분석해보면 overflowme의 시작 위치에서 부터 0xdeadbeef까지의 거리는 0x34이다 0xdeadb.. 2021. 3. 26.
SysROP 1. Mitigation 2. 문제 확인 문제를 실행시키면 입력을 받고 프로그램을 종료한다. 문제 이름 그대로 ROP를 해야할거 같은 느낌이다. 3. 풀이 IDA를 통해 문제를 분석해보면 buf와 ret까지의 거리는 0x10 + 0x8(sfp)인 것과 read 함수를 통해 오버플로우가 일어난다. 그런데 특이한게 함수 부분을 보면 사용할 수 있는 함수가 read하나 밖에 없다는점이다. 일단 gdb로 분석해 보자. gdb로 분석할려고 메인을 볼려고하니까 심볼을 불러올 수 없다고 한다.... 그래서 확인해보니 stripped(안티디버깅) 파일이였다. 그래서 가젯을 구하고 ROP를 할려고 했으나 마땅히 사용할 함수는 없어서 한참을 고민했다. 검색을 하면서 찾다보니 syscall을 이용하는 방법이 있었다. 일단 .. 2021. 3. 24.
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.
Look at Me 1. Mitigation 이번 문제는 정적 링킹이 되어있는 문제여서 내부에 많음 함수와 가젯들이 있을 것 이다. 2. 문제 확인 입력을 받고 종료를 한다. 3. 풀이 문제를 IDA로 분석해 보면 look_at_me 함수에서 gets로 입력을 받는데 BOF가 일어난다. 그러면 쉘 코드를 사용을 못하니 ROP를 하면 될 것이다. ROP를 하기 위해 system 함수를 찾아보니 system 함수가 없다.. 그래서 찾아보니 mprotect라는 함수가 있다. mprotect int mprotect(void *addr, size_t len, int prot) 메모리로 매핑된 영역의 보호 모드를 변경할 때 사용되는 함수 매핑된 메모리 보호 모드는 mmap 함수로 메모리 매피응ㄹ 수행할 때 초깃 값을 설정한다. add.. 2021. 3. 21.