이번주 부터는 pwnable.kr 문제를 풀어보려고 한다. 파이팅 :D ! ls -al 명령어로 디렉토리의 모든 파일에 대해 자세한 내용을 출력했다. fd, fd.c, flag라는 파일이 눈에 들어오는데 권한을 살펴보자면 나는 fd의 권한을 가지고 있기 때문에 fd는 읽고 실행할 수 있고 fd.c는 읽을 수 있으며, flag는 아무것 도 할 수 없다. read 권한이 있는 fd.c의 내용을 읽어 보았다. 먼저 인자의 개수가 2개 미만일 때 pass argv[1] a number을 출력하고 프로그램을 종료한다. fd 파일을 실행할 때 인자값이 주어지지 않으면 문장과 함께 강제 종료되는 코드이다. atoi 함수는 아스키 코드 값을 int 값으로 바꾸어 주는 함수이다. argv는 ..
먼저 hint의 코드를 분석해보자. main 함수가 정의되어 있고 char 유형의 80byte bleh가 선언되었다. setreuid 함수를 사용하여 권한을 최종으로 바꾸어주며, fgets 함수를 통해 표준입력으로 79byte 만큼의 내용을 bleh에 입력한다. 여기서 버퍼 오버플로우는 일어나지 않는다. 마지막으로 printf 함수로 이 내용을 출력하며 끝난다. 이번 코드는 버퍼 오버플로우 취약점은 발견되지 않지만 bleh를 출력하는 과정에서 유형을 지정해주지 않았으므로 포맷 스트링 버그 취약점을 활용하는 문제라고 추측할 수 있다. gdb를 사용하여 main 함수를 분석하려 하였으나 Main의 symbol이 없다는 내용이 출력된다. AAAA 문자를 입력하면 그대로 출력하고 %..
level19의 힌트를 확인하였다. bash shell의 실행이나 권한을 상승시키는 코드가 없으므로 만들어야 한다. 코드의 내용을 보자면 char 유형의 buf 20byte를 만들었고, gets 함수를 사용하여 값을 가져오지만 크기를 제한하지 않으므로 오버플로우가 발생할 수 있다. 코드를 분석하기 위해 tmp 디렉토리로 복사했다. 메인 함수에 0x28(40byte) 만큼이 할당되어 있다. buf (20) + bummy(20) + SEP (4) + RET (4) 으로 생각할 수 있다. 총 44byte의 "A" 값을 채운 후 RET의 자리에 환경변수의 주소값을 대입하면 된다. setuid를 실행하는 코드를 짜서 해보려 했는데 생각처럼 작동하지 않아서 setuid를 ..
코드가 평소보다 길어서 당황했지만 분석을 해보자면 void형의 shellout 함수, int형의 main 함수가 선언되어 있다. shellout 함수는 setuid 함수로 level19 권한으로 바꿔주며 배쉬 쉘을 실행시키는 역할을 한다. mainf 함수에는 char형의 100byte 리스트 string, int형의 check/ x/ count, fd_set 구조체 fds가 선언되어 있고, x와 count는 0으로 초기값이 초기화 되어 있다. if 문을 통해 count가 100 이상일 경우 "what are you trying to do" 를 출력하여 이상한 동작임을 알려준다. if 문을 통해 check의 값이 0xdeadbeef일 경우 shellcout() 함수로 쉘을 실행한다. 나는 she..