system hacking61 [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. [Toddler's Bottle] - collision 이번 문제는 collision이라는 문제이다 collision이 사전적 의미로 충돌인데 충돌하면 Hash가 생각난다. 생각이 맞는지 ssh로 접속해서 확인해 보자. 소스 코드를 보면 hashcode가 있고 check_password 함수가 보이는데. 입력한 값을 5번 더해서 리턴하는데 리턴 값과 hashcode가 같으면 flag를 읽을 수 있다. 그러면 hashcode값 0x21DD09EC / 5를하면 0x6C5CEC8이다. 이 값을 다시 5번 더하면 0x21DD09E8이 나오는데 원래의 hashcode 값보다 4바이트가 부족하다. argv를 입력할때 (0x6C5CEC8 * 4) + 0x6C5CECC를 해주면 조건문이 참이기 때문에 flag 값을 볼 수 있다. from pwn import * user =.. 2021. 3. 26. [Toddler's Bottle] - fd 이번문제는 Pwnable.kr의 첫 번째 문제인 fd이다. 접속 정보를 주기 때문에 ssh로 접속을 해보자. 접속을하여 ls 명령어로 확인해보면 fd, fd.c, flag 3개의 파일이 존재하는데 flag파일을 읽어볼려고하니 Permission denied가 출력된다. 권한이 없어서 그런것이다. fd.c를 확인해보자 buf가 전역변수로 할당되어있고 argv[1]을 입력받은 값을 정수형으로 변환해 0x1234와 빼준 값을 fd로 받는다. 밑에 보면 read함수가 보이는데 첫 번째 인자인 fd는 파일 디스크립터이다. 리눅스 파일 디스크립터는 표준 입력 0(stdin), 표준 출력 1(stdout), 표준 에러 2(stderr)이 있다. 우리가 buf에 입력을 받을려면 fd의 자리에 0이 되어야 한다. 그렇다.. 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. 이전 1 ··· 10 11 12 13 14 15 16 다음