nemo의 이야기
BOF원정대 goblin -> orc 본문
orc.c 파일을 확인해보면 위와 같은 소스 파일을 확인할 수 있다.
소스파일을 분석해보면 memset함수를 이용해서 환경변수를 초기화하는 것을 확인할 수 있다.
그리고 argv[1]에 리턴 주소 마지막 byte가 bf으로 끝나지 않으면 프롤그램이 종료 되게 설정해놨다.
이 문제를 해결하기 위해서는 버퍼에 쉘코드를 삽입하여 공격을 해야된다.
우선 버퍼에 A를 44byte를 넣고 리턴주소에 bfbfbfbf를 넣어 메모리를 확인해보자
버퍼에 주소는 bffffad0라는 것을 확인할 수 있다.
그러면 해당 주소에 쉘코드를 넣고 나머지는 nop으로 채워서 공격해보자
메모리를 확인해보면 정확히 들어가 있는 것을 확인할 수 있다.
그러면 원본 파일에 가서 공격을 시도해보자
위 사진처럼 실패한 것을 확인할 수 있다.
왜냐하면 gdb와 실제 프로세스에 주소가 다르기 때문이다.
하지만 argv에 주소는 16byte씩 이동하기 때문에
bffffad0에서 16byte씩 증, 감소를 시켜서 찾으면 성공할 것이다.
16byte를 증가시켰더니 공격에 성공한 것을 확인할 수 있다.
이와 같은 방법이 있고 c파일을 buffer에 주소를 확인하는 방법이 있다.
하지만 c파일에 크기가 맞아야지 해당 buffer주소가 맞으므로 주의 해야된다.
'Information security > System security' 카테고리의 다른 글
BOF원정대 wolfman -> darkelf (0) | 2018.01.08 |
---|---|
BOF 원정대 orc -> wolfman (0) | 2017.10.30 |
BOF원정대 cobolt -> goblin (0) | 2017.10.05 |
BOF원정대 gremlin -> cobolt (0) | 2017.10.04 |
BOF 원정대 gate -> gremlin (0) | 2017.09.30 |
Comments