목록Information security (35)
nemo의 이야기
위 코드를 확인해보면 1. buffer를 초기화하고 RET를 제외하고 그 아래에 있는 모든 스택을 초기화한다. 모든 스택을 초기화하기때문이 입력값에 쉘코드를 넣어서 공격하기는 힘들다. 이를 해결하기 위해서는 환경변수를 이용하여 공격하면 된다. 리눅스에는 LD_PRELOAD라는 환경변수가 존재한다. 이 환경변수를 지정해 놓으면 프로세스가 로딩하고 각종 라이브러리들을 로딩할 때 LD_PRELOAD에 선언된 라이브러리를 가장 먼저 로딩하게 된다. 이를 이용하여 이미 존재하는 라이브러리와 이름을 같게하여 정상의 라이브러리가 로딩되지 않게하고 정상적인 라이브러리 안의 정상적인 함수와 같은 이름의 함수를 작성하여 함수를 후킹 할 수 있다. 그럼 쉘코드를 LD_PRELOAD에 넣고 후킹할 c파일을 만들어 컴파일 해보..
이전 문제와 비슷하지만 한가지가 다르다 1. argv를 모두 초기화 한다. 이를 공격하기 위해서는 파일명이 저장되어 있는 스택 메모리 끝에 있는 주소를 이용하여 공격하면 될 것이다. 그러기 위해서는 argv[0]에 있는 주소를 확인해야 된다. 더미코드로 실행하여 argv[0]에 주소를 확인한 결과 0xbffffc22이다. 이제 bfffc22부터 시작하여 스택메모리 끝부분에 있는 파일명에 위치를 찾아보자 bfffffe3에 있는 것을 확인 할 수 있다. 이제 심볼릭 링크를 이용하여 파일명을 공격코드로 변경하여 공격해보자 ln -s skeleton $(python -c 'print "A" + "\x90" * 100 + "\x68\xf9\xbf\x0f\x40\x68\xe0\x91\x03\x40\xb8\xe0\x..
위 소스를 확인하면 1. 환경변수를 사용하지 못한다. 2. 스택메모리만 사용해야 되고 3. argv[1]에 글자 길이가 48이상이 되면 안된다 4. argv[1]을 초기화한다 5. buffer를 초기화한다 6. argc가 두개 여야 한다. 이를 해결하기 위해서는 argv[0]를 이용해서 공격해 보자 우선 argv[0]에 주소를 확인해보자 argv[0]에 주소는 bffffc76이다 다음으로 심볼릭 링크를 이용하여 파일을 만들어 보자 여기서 쉘코드를 바꾼 이유는 \x2f에 의미는 /를 뜻하므로 파일 경로를 의미한다. 그러므로 \x2f가 들어가면 안된다. 이제 심볼릭 링크 파일을 실행 시켜 공격을 해보자 ./$(python -c 'print "\x90" * 90 + "\xeb\x11\x5e\x31\xc9\xb..
위 소스를 확인해보면 1. argv[0]에 글자 길이가 77자가 되어야 된다. 2. 환경변수를 사용 못한다. 3. argv[1]에 글자 길이가 48이상이 되면 안된다. 4. 스택 메모리만을 사용해야 된다. 이를 공격에 성공하려면 mkdir를 이용해여 argv[0]에 글자 길이를 맞추어서 공격을 햐야된다. argv[2]에 있는 주소는 bfffb80이다 그러면 이전에 사용했던 방법을 이용하여 공격을 해보자 절대 경롤를 입력하여 이전에 사용했던 코드를 입력하면 Seagmentation fault라는 오류 문구가 나온다 여기서 argv[2]에 주소를 16을 위 아래로 조정하 여 바꿔보자 아래로 조정을 해서 위와 같이 공격에 성공하였다.