LOB 12번 (golem → darknight) cat darknight.c 코드를 보면 제일 위에 FPO라고 적혀있고 코드 안에 strncpy함수에 의해 buffer크기보다 1byte 더 받는 것을 알 수 있다. 즉, 1byte BOF가 발생하게 된다.FPO기법이 1byte BOF를 이용하는 방법이다. EBP가 변하면 EBP+4도 변하게 되는데 EBP+4는 RET이다. SFP의 1byte를 덮어 씀으로써 ebp를 조작해서 RET값도 덮으면 된다. 우선 스택에 레지스터 주소값들을 살펴보기 위해 브레이크 포인트를 걸고 확인해보자. main 함수 안에 불리는 problem_child 함수에서 leave부분에 BP를 걸고 A를 41byte 넣고 ebp의 값을 확인해보니 0xbffffafc에 있는 것을 알 수 있다.그래서 0xbffffa00부터 확인해보았다... 더보기 LOB 11번(skeleton → golem) golem 코드Egghunter가 사라져 환경변수 입력이 가능하나 프로그램 종료 전에 buffer부터 0xbfffffff까지 RET주소 들어있는 부분을 제외하고는 전부 다 0으로 초기화 전부 다 초기화시키니까 살아남는게 없다.공유라이브러리를 이용하면 된다.+)공유라이브러리? 심볼(함수,변수)등을 프로그램이 시작하기전에 로드하여 필요할 때 마다 연동되는 동적 라이브러리 이해하기 쉽게 말하면 원래 컴파일 할 때 libc.so.6이라는 라이브러리에서 심볼의 정 보를 적재하며 컴파일하고 프로그램이 실행되는데 그 전에 attack.so를 우선적으로 들 어가도록 환경변수를 설정하고 그 안의 내용을 쉘코드로 하면 된다는 것.http://agz.es/Reverse-Engineering/Buffer-Overflow/BO.. 더보기 LOB 10번(vampire → skeleton) cat skeleton.c 코드의 끝에 보면 모든 argv[]를 0으로 초기화한다.일단 혹시 남아있는 게 있나 확인하기 위해 스택을 살펴본다. 다 초기화 되고나서 스택에 뭐가 남아있나 확인해야하므로 leave에 브레이크포인트를 건다. r `python –c’print“\xbf”*48’` `python –c’print“A”*100’` 0으로 다 초기화 되던 중 뒷부분에 무언가 남아있다. 확인을 해보니 파일 경로임을 알 수 있다.그렇다면 앞에서 푼 문제처럼 심볼릭 링크를 걸어 풀어보자. 위에 끝에 남아있는 곳의 주소를 이용하여 RET주소를 덮는다. 더보기 이전 1 ··· 26 27 28 29 30 31 32 ··· 36 다음