목록Information security/System security (34)
nemo의 이야기
이전 문제와 비슷하지만 한가지가 다르다 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을 위 아래로 조정하 여 바꿔보자 아래로 조정을 해서 위와 같이 공격에 성공하였다.
위 소스를 확인해보면 1. 스택 메모리만 사용해야 된다. 2. argv[1]에 길이에 제한을 걸어 48바이트 이상을 못 쓴다. 따라서 argv[2]애 쉘코드를 입력하여 공격하는 방식으로 하면 성공할 것 이다. 그러면 우선 argv[2]에 주소를 확인하여 argv[1]에 argv[2]에 주소를 넣어주자 avgv[0]에 주소가 bffffab4에 있다는 것을 확인 할 수 있다. 이제 argv[0]에서 부터 argv[2]에 있는 주소를 확인해보자 bffffbf0에 argv[2]가 있는 것을 확인 할 수 있다. 그러면 nop슬라이딩을 이용하여 공격해보자 공격 코드 : ./darkelf $(python -c 'print "A" * 44 + "\xf0\xfb\xff\xbf" + " " + "\x90" * 1000 +..