버퍼오버플로우(이하 BOF) 강좌 보면서 생각난겁니다.
리턴어드레스를 BOF를 이용하여 수정할 때,
먼저 BOF를 일으켜서 리턴어드레스 부분에 값을 채워넣는식이던데
그러지 않고 강제적으로 그 주소에 값을 덮어씌울수는 없는건가요?
그러니깐 리턴어드레스가 저장된 주소가 있으면, BOF가 아닌,
그냥 그 주소에 자신이 원하는 값으로 바꾼다던가, 그렇게 할 수는 없나요?
Hit : 3719 Date : 2011/10/05 12:03
BrokenPipe
우리가 리눅스에 텔넷을 접속하면 보통 /bin/bash를 실행하게 됩니다.
/bin/bash에서 프로그램을 실행시킬때는 fork()를 사용해서 자식프로세스를 생성한후에
exec 명령을 사용해서 자식프로세스에 실행시키는데요
버퍼오버플로우를 일으킬 프로그램은 /bin/bash에서 fork함수로 생성한
자식 프로세스입니다. 따라서 이 프로세스가 종료된 뒤에는 부모 프로세스로 넘어가게 되는데
이말은 곧 리턴어드레스는 부모프로세스(/bin/bash) 의 어딘가라는 건데요
말씀하신 방법대로 하려면 /bin/bash 자체에 대한 취약점을 찾아야 할 것같네요
2011/10/05
별빛을담아
쓸데 없는 쓰레기 값을 채우는 이유는 리턴 어드레스가 있는 부분까지 가기 위한 거죠.
만약 프로그램을 사용해서 공격할 프로그램 target의 리턴어드레스가 있는 부분에 바로 갈 수 있고,
target프로그램이 리턴 어드레스를 참조하려는 상황에서, 리턴 어드레스를 쉘이 있는 곳으로 수정한다면 쉘이 떨어지겠죠.