해킹/시스템
[bof 원정대] succubus -> nightmare (PLT)
kid1412
2012. 3. 31. 03:13
728x90
다음은 문제의 소스입니다.
[그림 1] nightmare.c
소스분석
1. buffer의 크기 40
2. 인자값은 적어도 하나 이상
3. 리턴값이 strcpy의 값이어야 한다.
4. strcpy로 첫번째 인자값은 buffer에 복사
5. buffer+48 뒤쪽의 4byte를 AAAA로 채운다.
풀기위한 과정입니다.
0. 공격 방법
1. strcpy의 주소값 구하기
[그림 2] strcpy의 주소값 구하기
2. buffer의 주소값, argv[2]의 주소값 구하기
[그림 3] 주소값 구하기 위한 소스코드
[그림 4] buffer의 주소값, argv[2]의 주소값
3. bof 공격
[그림 5] bof 공격
소스분석
1. buffer의 크기 40
2. 인자값은 적어도 하나 이상
3. 리턴값이 strcpy의 값이어야 한다.
4. strcpy로 첫번째 인자값은 buffer에 복사
5. buffer+48 뒤쪽의 4byte를 AAAA로 채운다.
풀기위한 과정입니다.
0. bash2
1. strcpy의 주소값 구하기
2. buffer의 주소값, argv[2]의 주소값 구하기
3. bof 공격
0. 공격 방법
PLT란?
일종의 실제 호출 코드를 담고 있는 Procedure Linkage Table(프로시져 링키지 테이블)로써 이 내용 참조를
통해 _dl_runtime_resolve가 수행되고, 실제 시스템 라이브러리 호출이 이루어지게 된다.
strcpy의 구조
[strcpy][dummy][dest][src]
공격맵
[buffer(dummy)][sfp(dummy)][strcpy][dummy][buffer+48(ret)][argv[2]]
argv[2] =>[system][exit][/bin/sh]
1. strcpy의 주소값 구하기
2. buffer의 주소값, argv[2]의 주소값 구하기
3. bof 공격