카테고리 PWNABLE 문제 main() passcode.txt를 읽은 값과 사용자의 입력 값이 같아야 sub_8048756 함수를 호출 할 수 있다. passcode.txt를 읽은 값은 s2, 사용자의 입력 값은 s1에 들어가는데 0x28 바이트 크기의 s1에 0x50 바이트의 입력을 넣을 수 있어 s2로 overflow가 발생한다. Overflow를 이용하여 s2의 값을 조작할 수 있으므로 passcode.txt를 몰라도 우회가 가능하다. sub_8048756() sub_8048756 함수로 들어오면 네 가지 메뉴가 있다. echo는 입력한 문자열을 출력해주고, man은 메뉴를 출력해주고, exit는 프로그램을 종료한다. 여기서 중요한 건 root_auth 메뉴이다. s = &v4 root_auth ..
카테고리 Pwnable Team having solved this 27, Point 200 문제 32 bit elf 바이너리 사용자 정보를 등록하고, 수정하고, 볼 수 있는 프로그램이다. 1번 메뉴를 선택했을 때 불리는 creatAcc 함수의 내용이다. Name, phone number, balance 를 입력 받는다. 이때, Name과 phone number는 문자열, balance는 숫자로 입력 받고, account의 개수가 maxAcc(0xA)를 넘으면 생성할 수 없다. account ID는 생성한 순서대로 1부터 시작한다. 수정시에는 이 account ID를 이용하여 수정할 account를 선택하고 해당 account의 phone number를 수정할 수 있다. 여기에는 gets함수를 통해 입력 ..
카테고리 Miscellaneous Team having solved this 12, Point 300 문제 key 라는 gif 파일과 13개의 PNG들이 주어졌다. key라는 gif 파일에는 각 아이콘들의 동작 과정이 나타나있는데, 13개의 PNG 파일에 있는 아이콘들을 보고 7개의 전구 중 어떤 전구들에 불이 들어오는지를 보고 이를 7개의 비트로 나타내면 하나의 글자가 나온다. 이렇게 총 13개의 글자를 알아내어 SHA1로 암호화하면 그 값이 flag이다. 첫 번째 PNG 파일의 결과는 위와 같다. 전원이 들어오면 하얀 박스 같이 생긴 것에 불이 들어오고, 물이 끓어 수증기가 되어 위로 올라간다. 체중계(?)처럼 생긴 것과 수증기가 만나면 전원이 공급되어 전구에 불이 켜진다. 1010100 : T 두 ..
카테고리 PWNABLE 문제 32 bit elf 바이너리인 echo_system 파일이 주어졌다. IDA로 열어보자. buf 변수는 ebp-0x88 에 위치하고 있지만 read 함수를 통해 최대 0xC8 바이트의 입력 값을 넣을 수 있다. buf 변수를 그대로 출력하고 있으므로 FSB!! 가 일어날 것 같았지만 자세히 보니 printf함수가 아니라 print라는 사용자 정의 함수였고, 내부적으로 write 함수를 통해 출력하고 있어 FSB는 일어나지 않는다. 또한 친절하게도 프로그램의 내부에 cat_flag라는, flag를 출력시켜주는 함수가 존재한다! 너무 쉬운 거 아닌가… BOF가 발생하므로 이를 이용해 RET를 cat_flag 함수의 주소로 변조하면 된다!! 라고 생각했지만 그렇게 간단한 문제는 아..