우선 level9에서 얻어온 비밀번호를 통하여 접속을 하고 힌트에 대한 정보를 확인해보았다. 평소와는 다르게 program이라는 디렉토리가 존재하지만 접근 권한을 가지고 있지 않아 접근할 수 없는 파일이다. 가장 중요하게 생각한 파트는 공유 메모리라는 점이었다. 만약 공유메모리를 어느 프로세스에서 생성하였다면, 다른 프로세스들은 key_t값을 알고 있는 순간 접근이 가능하게 된다. 이때 필요한 c 함수로는 shmget이라는 함수가 요구된다. 다음은 http://forum.falinux.com/zbxe/index.php?document_srl=423456&mid=C_LIB 에서 보여준 shmget 예제 코드를 응용한 코드이다. 제공받은 ket_t값을 이용하여 공유메모리에 접근하고 해당 내용에 대해서 출력하..
level8에서 얻은 비밀번호를 통하여 level9를 접속하고 힌트를 읽어보았다. 버퍼 오버플로우를 이용한 공격 문제이다. fgets 함수로 buf 변수에 대해서 입력을 받지만 조건문으로 참고하는 대상은 buf2 변수이다. 따라서 우리는 buf 변수에 값을 입력하여 buf2 변수에 원하는 위치에 데이터를 입력해주어야 하는 것이 가장 큰 목표이다. 따라서 현재 buf와 buf2의 메모리의 위치를 정확하게 알아야 한다. 그래서 gdb를 이용하여 분석을 실시하였다. 어셈블리에서는 항상 변수에 정보를 저장하기 위한 함수를 사용하기 전에 해당 변수의 메모리 주소를 불러와야 한다. 따라서 fgets 함수를 사용하기 전 불러온 변수 buf 의 메모리 주소를 확인해보면 0xffffffd8이라는 것을 알 수 있으며 bu..
level7에서 얻은 비밀번호로 level8에 접속하여 힌트를 우선 읽어보자. 힌트는 파일이 어딘가에 존재한다는 점과 파일의 용량이 2700이라는 점이었다. 파일을 검색하기 위해서는 find 명령어를 사용해야하는데 용량을 기준으로 검색하기 위해서는 -size 옵션을 부여해야했다. 그래서 사용한 명령어는 find / -size 2700 2> /dev/null 이었다. 하지만 아무것도 찾을 수 없다는 이야기에 당황을 했고 다시 find 함수에 대해서 조사를 해보았다. 결과적으로 size에 대해서 단위를 지정해줘야 하는 점을 착각했다. ls -l 옵션에서 나오는 용량의 단위는 바이트 단위이다. 따라서 바이트 단위로 맞춰주면서 검색을 해야한다. 이를 위해서 바이트 단위 표기법으로 수정하여 find / -size..